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