src/main/scala/net/tz/lift/model/JodaTimeField.scala
changeset 99 49eb72a46208
parent 24 149113e059bd
--- 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: