package com.itmill.toolkit.demo;
import java.sql.SQLException;
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.CalendarField;
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));
// set the application to use Corporate -theme
setTheme("corporate");
// create the calendar component and add to layout
from = new CalendarField();
main.addComponent(from);
from.setResolution(CalendarField.RESOLUTION_HOUR);
from.setImmediate(true);
to = new CalendarField();
main.addComponent(to);
to.setResolution(CalendarField.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(new Date());
}
/**
* 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);
}
}