--- a/src/main/scala/net/tz/lift/model/JodaTimeField.scala Wed May 09 22:53:03 2012 +0200
+++ b/src/main/scala/net/tz/lift/model/JodaTimeField.scala Thu May 24 11:19:26 2012 +0200
@@ -90,6 +90,29 @@
}
/**
+ * Optional Joda date field.
+ */
+class OptionalJodaDateMidnightField[T <: Record[T]](rec: T) extends
+ OptionalDateTimeField(rec) {
+ override def setFromAny(in: Any): Box[Calendar] = in match {
+ case dt: AbstractDateTime => setBox(Full(dt.toGregorianCalendar))
+ case x => super.setFromAny(x)
+ }
+
+ def set(dt: Box[AbstractDateTime]): Box[Calendar] =
+ set(dt map(_.toGregorianCalendar))
+
+ def date = get map(new DateMidnight(_))
+
+ override def toString = date map(AsDateMidnight(_)) getOrElse ""
+
+ override def asHtml = Text(toString)
+ override def toForm = Full(SHtml.text(toString,
+ s => setBox(AsDateMidnight(s) map {_.toGregorianCalendar}),
+ "class" -> "date"))
+}
+
+/**
* Joda date-time converters.
*/
object AsDateTime {
@@ -106,8 +129,10 @@
val fmt = DateTimeFormat.forPattern("dd.MM.yyyy")
def apply(d: DateMidnight): String = fmt.print(d)
- def apply(s: String): Box[DateMidnight] = tryo {
- fmt.parseDateTime(s).toDateMidnight }
+ def apply(s: String): Box[DateMidnight] = s match {
+ case null | "" => Empty
+ case s => tryo { fmt.parseDateTime(s).toDateMidnight }
+ }
}
// vim: set ts=2 sw=2 et: