1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/src/main/java/ru/indvdum/mywork/vaadin/EditDayDialog.java Fri Aug 19 16:23:26 2011 +0300
1.3 @@ -0,0 +1,238 @@
1.4 +package ru.indvdum.mywork.vaadin;
1.5 +
1.6 +import static ru.indvdum.mywork.MyWork.EM;
1.7 +
1.8 +import java.sql.Time;
1.9 +import java.text.SimpleDateFormat;
1.10 +import java.util.Calendar;
1.11 +import java.util.Date;
1.12 +
1.13 +import ru.indvdum.mywork.openjpa.model.Day;
1.14 +
1.15 +import com.vaadin.data.Property.ValueChangeEvent;
1.16 +import com.vaadin.data.Property.ValueChangeListener;
1.17 +import com.vaadin.ui.Alignment;
1.18 +import com.vaadin.ui.Button;
1.19 +import com.vaadin.ui.HorizontalLayout;
1.20 +import com.vaadin.ui.Label;
1.21 +import com.vaadin.ui.PopupDateField;
1.22 +import com.vaadin.ui.TextField;
1.23 +import com.vaadin.ui.VerticalLayout;
1.24 +import com.vaadin.ui.Window;
1.25 +import com.vaadin.ui.Button.ClickEvent;
1.26 +import com.vaadin.ui.Button.ClickListener;
1.27 +
1.28 +public class EditDayDialog extends Window implements ValueChangeListener, ClickListener {
1.29 +
1.30 + private MyWorkApplication myApp = null;
1.31 + private EditState state = null;
1.32 + private Day day = null;
1.33 + private PopupDateField dayStartTime = null;
1.34 + private PopupDateField dayEndTime = null;
1.35 + private PopupDateField dayDate = null;
1.36 + private TextField dayHours = null;
1.37 +
1.38 + public EditDayDialog(MyWorkApplication myApp, EditState state, Day day) throws Exception {
1.39 + super();
1.40 + this.myApp = myApp;
1.41 + this.state = state;
1.42 + switch(state){
1.43 + case CREATE:
1.44 + setCaption("Creating new day");
1.45 + if(day != null)
1.46 + throw new Exception("Illegal argument: day must be null in creating state.");
1.47 + day = new Day();
1.48 + Calendar calDay = Calendar.getInstance();
1.49 + calDay.set(Calendar.HOUR_OF_DAY, 0);
1.50 + calDay.set(Calendar.MINUTE, 0);
1.51 + calDay.set(Calendar.SECOND, 0);
1.52 + calDay.set(Calendar.MILLISECOND, 0);
1.53 + day.setDay(calDay.getTime());
1.54 + Calendar calStart = Calendar.getInstance();
1.55 + calStart.set(Calendar.HOUR_OF_DAY, 9);
1.56 + calStart.set(Calendar.MINUTE, 0);
1.57 + calStart.set(Calendar.SECOND, 0);
1.58 + calStart.set(Calendar.MILLISECOND, 0);
1.59 + day.setStartWork(new Time(calStart.getTime().getTime()));
1.60 + Calendar calEnd = Calendar.getInstance();
1.61 + calEnd.set(Calendar.HOUR_OF_DAY, 18);
1.62 + calEnd.set(Calendar.MINUTE, 0);
1.63 + calEnd.set(Calendar.SECOND, 0);
1.64 + calEnd.set(Calendar.MILLISECOND, 0);
1.65 + day.setEndWork(new Time(calEnd.getTime().getTime()));
1.66 + day.setHours(8f);
1.67 + this.day = day;
1.68 + break;
1.69 + case EDIT:
1.70 + setCaption("Editing day");
1.71 + if(day == null)
1.72 + throw new Exception("Illegal argument: day must be not null in editing state.");
1.73 + this.day = day;
1.74 + break;
1.75 + }
1.76 + init();
1.77 + }
1.78 +
1.79 + private void init(){
1.80 + setModal(true);
1.81 + setWidth("480px");
1.82 + setHeight("300px");
1.83 + VerticalLayout vl = new VerticalLayout();
1.84 + vl.setSizeFull();
1.85 + vl.setSpacing(true);
1.86 + vl.setMargin(true);
1.87 + setContent(vl);
1.88 +
1.89 + HorizontalLayout hlDay = new HorizontalLayout();
1.90 + hlDay.setWidth("100%");
1.91 + Label lblDay = new Label("Day:");
1.92 + lblDay.setWidth("100%");
1.93 + hlDay.addComponent(lblDay);
1.94 + hlDay.setExpandRatio(lblDay, 1f);
1.95 + dayDate = new PopupDateField();
1.96 + dayDate.setWidth("100%");
1.97 + dayDate.setInputPrompt("Enter date");
1.98 + dayDate.setResolution(PopupDateField.RESOLUTION_DAY);
1.99 + dayDate.setImmediate(true);
1.100 + dayDate.setValue(day.getDay());
1.101 + dayDate.addListener(this);
1.102 + dayDate.setDateFormat("dd.MM.yyyy");
1.103 + hlDay.addComponent(dayDate);
1.104 + hlDay.setExpandRatio(dayDate, 5f);
1.105 + vl.addComponent(hlDay);
1.106 +
1.107 + HorizontalLayout hlStart = new HorizontalLayout();
1.108 + hlStart.setWidth("100%");
1.109 + Label lblStart = new Label("Start time:");
1.110 + lblStart.setWidth("100%");
1.111 + hlStart.addComponent(lblStart);
1.112 + hlStart.setExpandRatio(lblStart, 1f);
1.113 + dayStartTime = new PopupDateField();
1.114 + dayStartTime.setWidth("100%");
1.115 + dayStartTime.setInputPrompt("Enter time");
1.116 + dayStartTime.setResolution(PopupDateField.RESOLUTION_MIN);
1.117 + dayStartTime.setImmediate(true);
1.118 + dayStartTime.setValue(day.getStartWork());
1.119 + dayStartTime.setDateFormat("HH:mm");
1.120 + hlStart.addComponent(dayStartTime);
1.121 + hlStart.setExpandRatio(dayStartTime, 5f);
1.122 + vl.addComponent(hlStart);
1.123 +
1.124 + HorizontalLayout hlEnd = new HorizontalLayout();
1.125 + hlEnd.setWidth("100%");
1.126 + Label lblEnd = new Label("End time:");
1.127 + lblEnd.setWidth("100%");
1.128 + hlEnd.addComponent(lblEnd);
1.129 + hlEnd.setExpandRatio(lblEnd, 1f);
1.130 + dayEndTime = new PopupDateField();
1.131 + dayEndTime.setWidth("100%");
1.132 + dayEndTime.setInputPrompt("Enter time");
1.133 + dayEndTime.setResolution(PopupDateField.RESOLUTION_MIN);
1.134 + dayEndTime.setImmediate(true);
1.135 + dayEndTime.setValue(day.getEndWork());
1.136 + dayEndTime.setDateFormat("HH:mm");
1.137 + hlEnd.addComponent(dayEndTime);
1.138 + hlEnd.setExpandRatio(dayEndTime, 5f);
1.139 + vl.addComponent(hlEnd);
1.140 +
1.141 + HorizontalLayout hlHours = new HorizontalLayout();
1.142 + hlHours.setWidth("100%");
1.143 + Label lblHours = new Label("Work hours count:");
1.144 + lblHours.setWidth("100%");
1.145 + hlHours.addComponent(lblHours);
1.146 + hlHours.setExpandRatio(lblHours, 1f);
1.147 + dayHours = new TextField();
1.148 + dayHours.setWidth("100%");
1.149 + dayHours.setValue(day.getHours());
1.150 + dayHours.setImmediate(true);
1.151 + hlHours.addComponent(dayHours);
1.152 + hlHours.setExpandRatio(dayHours, 5f);
1.153 + vl.addComponent(hlHours);
1.154 +
1.155 + HorizontalLayout hlOk = new HorizontalLayout();
1.156 + hlOk.setSizeFull();
1.157 + Button okButton = new Button();
1.158 + switch(state){
1.159 + case CREATE:
1.160 + okButton.setCaption("Create");
1.161 + break;
1.162 + case EDIT:
1.163 + okButton.setCaption("Save");
1.164 + break;
1.165 + }
1.166 + okButton.addListener((ClickListener)this);
1.167 + hlOk.addComponent(okButton);
1.168 + hlOk.setComponentAlignment(okButton, Alignment.BOTTOM_RIGHT);
1.169 + vl.addComponent(hlOk);
1.170 + vl.setExpandRatio(hlOk, 1f);
1.171 + }
1.172 +
1.173 + @Override
1.174 + public void valueChange(ValueChangeEvent event) {
1.175 + Object value = event.getProperty().getValue();
1.176 + Object startValue = dayStartTime.getValue();
1.177 + Object endValue = dayEndTime.getValue();
1.178 + if (value == null || !(value instanceof Date) || !(startValue instanceof Date) || !(endValue instanceof Date)) {
1.179 + getWindow().showNotification("Invalid date entered");
1.180 + } else {
1.181 + Date date = (Date)value;
1.182 + Date start = (Date)startValue;
1.183 + Date end = (Date)endValue;
1.184 + Calendar calStart = Calendar.getInstance();
1.185 + calStart.setTime(start);
1.186 + Calendar calEnd = Calendar.getInstance();
1.187 + calEnd.setTime(end);
1.188 + Calendar cal = Calendar.getInstance();
1.189 + cal.setTime(date);
1.190 + calStart.set(Calendar.YEAR, cal.get(Calendar.YEAR));
1.191 + calStart.set(Calendar.MONTH, cal.get(Calendar.MONTH));
1.192 + calStart.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH));
1.193 + calStart.set(Calendar.SECOND, cal.get(Calendar.SECOND));
1.194 + calStart.set(Calendar.MILLISECOND, cal.get(Calendar.MILLISECOND));
1.195 + calEnd.set(Calendar.YEAR, cal.get(Calendar.YEAR));
1.196 + calEnd.set(Calendar.MONTH, cal.get(Calendar.MONTH));
1.197 + calEnd.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH));
1.198 + calEnd.set(Calendar.SECOND, cal.get(Calendar.SECOND));
1.199 + calEnd.set(Calendar.MILLISECOND, cal.get(Calendar.MILLISECOND));
1.200 + dayStartTime.setValue(calStart.getTime());
1.201 + dayEndTime.setValue(calEnd.getTime());
1.202 + }
1.203 + }
1.204 +
1.205 + @Override
1.206 + public void buttonClick(ClickEvent event) {
1.207 + Object value = dayDate.getValue();
1.208 + Object startValue = dayStartTime.getValue();
1.209 + Object endValue = dayEndTime.getValue();
1.210 + Object hoursValue = dayHours.getValue();
1.211 + if (
1.212 + value == null
1.213 + || !(value instanceof Date)
1.214 + || !(startValue instanceof Date)
1.215 + || !(endValue instanceof Date)
1.216 + || !(hoursValue.toString().matches("^[0-9]+[\\.]{0,1}[0-9]*"))
1.217 + ) {
1.218 + getWindow().showNotification("Invalid information entered");
1.219 + } else {
1.220 + Date date = (Date)value;
1.221 + Date start = (Date)startValue;
1.222 + Date end = (Date)endValue;
1.223 + Float hours = Float.parseFloat(hoursValue.toString());
1.224 + day.setDay(date);
1.225 + day.setStartWork(new Time(start.getTime()));
1.226 + day.setEndWork(new Time(end.getTime()));
1.227 + day.setHours(hours);
1.228 + try{
1.229 + EM.getTransaction().begin();
1.230 + EM.persist(day);
1.231 + EM.getTransaction().commit();
1.232 + } finally {
1.233 + if(EM.getTransaction().isActive())
1.234 + EM.getTransaction().rollback();
1.235 + }
1.236 + getParent().removeWindow(this);
1.237 + myApp.getDayTable().requestRepaint();
1.238 + }
1.239 + }
1.240 +
1.241 +}