]> source.dussan.org Git - vaadin-framework.git/commitdiff
CalendarField -> com.itmill.toolkit.demo.reservation (#1016)
authorMarc Englund <marc.englund@itmill.com>
Mon, 22 Oct 2007 13:07:50 +0000 (13:07 +0000)
committerMarc Englund <marc.englund@itmill.com>
Mon, 22 Oct 2007 13:07:50 +0000 (13:07 +0000)
svn changeset:2578/svn branch:trunk

src/com/itmill/toolkit/demo/CalendarDemo.java
src/com/itmill/toolkit/demo/reservation/CalendarField.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/reservation/ReservationApplication.java

index fae7d80fd2650a6752ee7961ceef65f0a6378992..49b3fb7ff146a32f3f1fbfc9b5fc78042819328a 100644 (file)
@@ -6,8 +6,8 @@ import java.util.Date;
 import com.itmill.toolkit.data.Property.ValueChangeEvent;
 import com.itmill.toolkit.data.Property.ValueChangeListener;
 import com.itmill.toolkit.data.util.QueryContainer;
+import com.itmill.toolkit.demo.reservation.CalendarField;
 import com.itmill.toolkit.demo.util.SampleCalendarDatabase;
-import com.itmill.toolkit.ui.CalendarField;
 import com.itmill.toolkit.ui.OrderedLayout;
 import com.itmill.toolkit.ui.Window;
 
diff --git a/src/com/itmill/toolkit/demo/reservation/CalendarField.java b/src/com/itmill/toolkit/demo/reservation/CalendarField.java
new file mode 100644 (file)
index 0000000..0dd0c4d
--- /dev/null
@@ -0,0 +1,316 @@
+package com.itmill.toolkit.demo.reservation;\r
+\r
+import java.util.Collection;\r
+import java.util.Date;\r
+import java.util.Iterator;\r
+\r
+import com.itmill.toolkit.data.Container;\r
+import com.itmill.toolkit.data.Item;\r
+import com.itmill.toolkit.data.Property;\r
+import com.itmill.toolkit.terminal.PaintException;\r
+import com.itmill.toolkit.terminal.PaintTarget;\r
+import com.itmill.toolkit.ui.DateField;\r
+\r
+// TODO use Calendar\r
+// TODO lazyLoading\r
+// TODO check date limit when updating variables\r
+// TODO Allow item selection\r
+public class CalendarField extends DateField implements Container.Viewer {\r
+\r
+       private Date minDate;\r
+       private Date maxDate;\r
+\r
+       private Container dataSource;\r
+       private Object itemStyleNamePropertyId;\r
+       private Object itemStartPropertyId;\r
+       private Object itemEndPropertyId;\r
+       private Object itemTitlePropertyId;\r
+       private Object itemDescriptionPropertyId;\r
+       private Object itemNotimePropertyId;\r
+\r
+       public CalendarField() {\r
+               super();\r
+               init();\r
+       }\r
+\r
+       public CalendarField(Property dataSource) throws IllegalArgumentException {\r
+               super(dataSource);\r
+               init();\r
+       }\r
+\r
+       public CalendarField(String caption, Date value) {\r
+               super(caption, value);\r
+               init();\r
+       }\r
+\r
+       public CalendarField(String caption, Property dataSource) {\r
+               super(caption, dataSource);\r
+               init();\r
+       }\r
+\r
+       public CalendarField(String caption) {\r
+               super(caption);\r
+               init();\r
+       }\r
+\r
+       /*\r
+        * Gets the components UIDL tag string. Don't add a JavaDoc comment here, we\r
+        * use the default documentation from implemented interface.\r
+        */\r
+       public String getTag() {\r
+               return "calendarfield";\r
+       }\r
+\r
+       public void init() {\r
+               super.setResolution(RESOLUTION_HOUR);\r
+\r
+       }\r
+\r
+       /**\r
+        * Sets the resolution of the CalendarField. Only RESOLUTION_DAY and\r
+        * RESOLUTION_HOUR are supported.\r
+        * \r
+        * @param resolution\r
+        *            the resolution to set.\r
+        * @see com.itmill.toolkit.ui.DateField#setResolution(int)\r
+        */\r
+       public void setResolution(int resolution) {\r
+               if (resolution != RESOLUTION_DAY && resolution != RESOLUTION_HOUR) {\r
+                       throw new IllegalArgumentException();\r
+               }\r
+               super.setResolution(resolution);\r
+       }\r
+\r
+       public void setMinimumDate(Date date) {\r
+               this.minDate = date;\r
+               requestRepaint();\r
+       }\r
+\r
+       public Date getMinimumDate() {\r
+               return minDate;\r
+       }\r
+\r
+       public void setMaximumDate(Date date) {\r
+               this.maxDate = date;\r
+               requestRepaint();\r
+       }\r
+\r
+       public Date getMaximumDate() {\r
+               return maxDate;\r
+       }\r
+\r
+       public Container getContainerDataSource() {\r
+               return this.dataSource;\r
+       }\r
+\r
+       public void setContainerDataSource(Container newDataSource) {\r
+               if (newDataSource == null || checkDataSource(newDataSource)) {\r
+                       this.dataSource = newDataSource;\r
+               } else {\r
+                       // TODO error message\r
+                       throw new IllegalArgumentException();\r
+               }\r
+               requestRepaint();\r
+       }\r
+\r
+       private boolean checkDataSource(Container dataSource) {\r
+               /*\r
+                * if (!(dataSource instanceof Container.Sortable)) { // we really want\r
+                * the data source to be sortable return false; }\r
+                */\r
+               // Check old propertyIds\r
+               if (this.itemEndPropertyId != null) {\r
+                       Class c = dataSource.getType(this.itemEndPropertyId);\r
+                       if (!Date.class.isAssignableFrom(c)) {\r
+                               this.itemEndPropertyId = null;\r
+                       }\r
+               }\r
+               if (this.itemNotimePropertyId != null) {\r
+                       Class c = dataSource.getType(this.itemNotimePropertyId);\r
+                       if (!Boolean.class.isAssignableFrom(c)) {\r
+                               this.itemNotimePropertyId = null;\r
+                       }\r
+               }\r
+               if (this.itemStartPropertyId != null) {\r
+                       Class c = dataSource.getType(this.itemStartPropertyId);\r
+                       if (Date.class.isAssignableFrom(c)) {\r
+                               // All we _really_ need is one date\r
+                               return true;\r
+                       } else {\r
+                               this.itemStartPropertyId = null;\r
+                       }\r
+               }\r
+               // We need at least one Date\r
+               Collection ids = dataSource.getContainerPropertyIds();\r
+               for (Iterator it = ids.iterator(); it.hasNext();) {\r
+                       Object id = it.next();\r
+                       Class c = dataSource.getType(id);\r
+                       if (Date.class.isAssignableFrom(c)) {\r
+                               this.itemStartPropertyId = id;\r
+                               return true;\r
+                       }\r
+               }\r
+\r
+               return false;\r
+       }\r
+\r
+       public Object getItemStyleNamePropertyId() {\r
+               return itemStyleNamePropertyId;\r
+       }\r
+\r
+       public void setItemStyleNamePropertyId(Object propertyId) {\r
+               this.itemStyleNamePropertyId = propertyId;\r
+       }\r
+\r
+       public Object getItemStartPropertyId() {\r
+               return itemStartPropertyId;\r
+       }\r
+\r
+       public void setItemStartPropertyId(Object propertyId) {\r
+               // TODO nullcheck for property id\r
+               if (this.dataSource != null\r
+                               && !Date.class.isAssignableFrom(dataSource.getType(propertyId))) {\r
+                       // TODO error message\r
+                       throw new IllegalArgumentException();\r
+               }\r
+               this.itemStartPropertyId = propertyId;\r
+       }\r
+\r
+       public Object getItemEndPropertyId() {\r
+               return itemEndPropertyId;\r
+       }\r
+\r
+       public void setItemEndPropertyId(Object propertyId) {\r
+               // TODO nullcheck for property id\r
+               if (this.dataSource != null\r
+                               && !Date.class.isAssignableFrom(dataSource.getType(propertyId))) {\r
+                       // TODO error message\r
+                       throw new IllegalArgumentException();\r
+               }\r
+               this.itemEndPropertyId = propertyId;\r
+       }\r
+\r
+       public Object getItemTitlePropertyId() {\r
+               return itemTitlePropertyId;\r
+       }\r
+\r
+       public void setItemTitlePropertyId(Object propertyId) {\r
+               this.itemTitlePropertyId = propertyId;\r
+       }\r
+\r
+       public Object getItemDescriptionPropertyId() {\r
+               return itemDescriptionPropertyId;\r
+       }\r
+\r
+       public void setItemDescriptionPropertyId(Object propertyId) {\r
+               this.itemDescriptionPropertyId = propertyId;\r
+       }\r
+\r
+       public Object getitemNotimePropertyId() {\r
+               return itemNotimePropertyId;\r
+       }\r
+\r
+       public void setItemNotimePropertyId(Object propertyId) {\r
+               // TODO nullcheck for property id\r
+               if (this.dataSource != null\r
+                               && !Boolean.class.isAssignableFrom(dataSource\r
+                                               .getType(propertyId))) {\r
+                       // TODO error message\r
+                       throw new IllegalArgumentException();\r
+               }\r
+               this.itemNotimePropertyId = propertyId;\r
+       }\r
+\r
+       /**\r
+        * Paints the content of this component.\r
+        * \r
+        * @param target\r
+        *            the Paint Event.\r
+        * @throws PaintException\r
+        *             if the paint operation failed.\r
+        */\r
+       public void paintContent(PaintTarget target) throws PaintException {\r
+               super.paintContent(target);\r
+\r
+               if (this.minDate != null) {\r
+                       target.addAttribute("min", String.valueOf(this.minDate.getTime()));\r
+               }\r
+               if (this.maxDate != null) {\r
+                       target.addAttribute("max", String.valueOf(this.maxDate.getTime()));\r
+               }\r
+\r
+               if (this.dataSource != null) {\r
+                       target.startTag("items");\r
+\r
+                       // send one month now, the rest via lazyloading\r
+                       int month = new Date().getMonth();\r
+                       Object value = getValue();\r
+                       if (value != null && value instanceof Date) {\r
+                               month = ((Date) value).getMonth();\r
+                       }\r
+\r
+                       for (Iterator it = this.dataSource.getItemIds().iterator(); it\r
+                                       .hasNext();) {\r
+                               Object itemId = it.next();\r
+                               Item item = (Item) this.dataSource.getItem(itemId);\r
+                               Property p = item.getItemProperty(this.itemStartPropertyId);\r
+                               Date start = (Date) p.getValue();\r
+                               Date end = start; // assume same day\r
+                               if (this.itemEndPropertyId != null) {\r
+                                       p = item.getItemProperty(this.itemEndPropertyId);\r
+                                       end = (Date) p.getValue();\r
+                                       if (end == null) {\r
+                                               end = start;\r
+                                       } else if (end.before(start)) {\r
+                                               Date tmp = start;\r
+                                               start = end;\r
+                                               end = tmp;\r
+                                       }\r
+                               }\r
+\r
+                               if (start != null) {\r
+                                       if ((start.getMonth() <= month || end.getMonth() >= month)) {\r
+                                               target.startTag("item");\r
+                                               // TODO different id?\r
+                                               target.addAttribute("id", itemId.hashCode());\r
+                                               p = item.getItemProperty(this.itemStyleNamePropertyId);\r
+                                               String styleName = (String) p.getValue();\r
+                                               target.addAttribute("styleName", styleName);\r
+                                               target.addAttribute("start", "" + start.getTime());\r
+                                               if (end != start) {\r
+                                                       target.addAttribute("end", "" + end.getTime());\r
+                                               }\r
+                                               if (this.itemTitlePropertyId != null) {\r
+                                                       p = item.getItemProperty(this.itemTitlePropertyId);\r
+                                                       Object val = p.getValue();\r
+                                                       if (val != null) {\r
+                                                               target.addAttribute("title", val.toString());\r
+                                                       }\r
+                                               }\r
+                                               if (this.itemDescriptionPropertyId != null) {\r
+                                                       p = item\r
+                                                                       .getItemProperty(this.itemDescriptionPropertyId);\r
+                                                       Object val = p.getValue();\r
+                                                       if (val != null) {\r
+                                                               target.addAttribute("description", val\r
+                                                                               .toString());\r
+                                                       }\r
+                                               }\r
+                                               if (this.itemNotimePropertyId != null) {\r
+                                                       p = item.getItemProperty(this.itemNotimePropertyId);\r
+                                                       Object val = p.getValue();\r
+                                                       if (val != null) {\r
+                                                               target.addAttribute("notime", ((Boolean) val)\r
+                                                                               .booleanValue());\r
+                                                       }\r
+                                               }\r
+\r
+                                               target.endTag("item");\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       target.endTag("items");\r
+               }\r
+       }\r
+}\r
index 7aa1f113eccdf88476a42288a3c368acb9933a0e..273ff1cfca069f50650b015d50a4bb29b9e175e7 100644 (file)
@@ -13,7 +13,6 @@ import com.itmill.toolkit.data.Item;
 import com.itmill.toolkit.data.Property.ValueChangeEvent;\r
 import com.itmill.toolkit.data.Property.ValueChangeListener;\r
 import com.itmill.toolkit.ui.Button;\r
-import com.itmill.toolkit.ui.CalendarField;\r
 import com.itmill.toolkit.ui.Label;\r
 import com.itmill.toolkit.ui.OrderedLayout;\r
 import com.itmill.toolkit.ui.Panel;\r