package com.itmill.toolkit.demo.reservation; import java.sql.SQLException; import java.util.Calendar; 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.util.SampleCalendarDatabase; import com.itmill.toolkit.ui.DateField; import com.itmill.toolkit.ui.OrderedLayout; import com.itmill.toolkit.ui.Window; /** * This example shows how the CalendarField can use Containers. A QueryContainer * is used to bind SQL table rows to the calendar. Demonstrates: how to create * com.itmill.toolkit.data.Container and set it as datasource for * com.itmill.toolkit.ui.Component.CalendarField * * @author IT Mill Ltd. * @since 4.0.0 * */ public class CalendarDemo extends com.itmill.toolkit.Application { // Database provided with sample data private SampleCalendarDatabase sampleDatabase; // The calendar UI component private CalendarField from; private CalendarField to; /** * Initialize Application. Demo components are added to main window. */ public void init() { Window main = new Window("Calendar demo"); setMainWindow(main); main.setLayout(new OrderedLayout(OrderedLayout.ORIENTATION_HORIZONTAL)); // create the calendar component and add to layout from = new CalendarField(); main.addComponent(from); from.setResolution(DateField.RESOLUTION_HOUR); from.setImmediate(true); to = new CalendarField(); main.addComponent(to); to.setResolution(DateField.RESOLUTION_HOUR); to.setEnabled(false); to.setImmediate(true); from.addListener(new ValueChangeListener() { public void valueChange(ValueChangeEvent event) { Date fd = (Date) from.getValue(); Date td = (Date) to.getValue(); if (fd == null) { to.setValue(null); to.setEnabled(false); return; } else { to.setEnabled(true); } to.setMinimumDate(fd); if (td == null || td.before(fd)) { to.setValue(fd); } } }); // initialize the sample database and set as calendar datasource sampleDatabase = new SampleCalendarDatabase(); initCalendars(); // Don't allow dates before today from.setMinimumDate(Calendar.getInstance().getTime()); } /** * Populates table component with all rows from calendar table. */ private void initCalendars() { try { QueryContainer qc = new QueryContainer("SELECT * FROM " + SampleCalendarDatabase.DB_TABLE_NAME, sampleDatabase .getConnection()); from.setContainerDataSource(qc); to.setContainerDataSource(qc); } catch (SQLException e) { e.printStackTrace(); } /* * // Calendar will use the first date property as start if you do not // * explicitly specify the property id. Our start -property will be the // * first one, so it's intentionally left out. // Start is the only * mandatory property, but you'll probably want to // specify title as * well. * from.setItemEndPropertyId(SampleCalendarDatabase.PROPERTY_ID_END); * from.setItemTitlePropertyId(SampleCalendarDatabase.PROPERTY_ID_TITLE); * from.setItemNotimePropertyId(SampleCalendarDatabase.PROPERTY_ID_NOTIME); * * to.setItemEndPropertyId(SampleCalendarDatabase.PROPERTY_ID_END); * to.setItemTitlePropertyId(SampleCalendarDatabase.PROPERTY_ID_TITLE); * to.setItemNotimePropertyId(SampleCalendarDatabase.PROPERTY_ID_NOTIME); */ } }