Добавлено редактирование объектов.
1 package ru.indvdum.mywork.vaadin;
3 import static ru.indvdum.mywork.MyWork.EM;
6 import java.text.SimpleDateFormat;
7 import java.util.Calendar;
10 import ru.indvdum.mywork.openjpa.model.Day;
12 import com.vaadin.data.Property.ValueChangeEvent;
13 import com.vaadin.data.Property.ValueChangeListener;
14 import com.vaadin.ui.Alignment;
15 import com.vaadin.ui.Button;
16 import com.vaadin.ui.HorizontalLayout;
17 import com.vaadin.ui.Label;
18 import com.vaadin.ui.PopupDateField;
19 import com.vaadin.ui.TextField;
20 import com.vaadin.ui.VerticalLayout;
21 import com.vaadin.ui.Window;
22 import com.vaadin.ui.Button.ClickEvent;
23 import com.vaadin.ui.Button.ClickListener;
25 public class EditDayDialog extends Window implements ValueChangeListener, ClickListener {
27 private MyWorkApplication myApp = null;
28 private EditState state = null;
29 private Day day = null;
30 private PopupDateField dayStartTime = null;
31 private PopupDateField dayEndTime = null;
32 private PopupDateField dayDate = null;
33 private TextField dayHours = null;
35 public EditDayDialog(MyWorkApplication myApp, Day day) throws Exception {
39 state = EditState.CREATE;
41 state = EditState.EDIT;
44 setCaption("Creating new day");
46 Calendar calDay = Calendar.getInstance();
47 calDay.set(Calendar.HOUR_OF_DAY, 0);
48 calDay.set(Calendar.MINUTE, 0);
49 calDay.set(Calendar.SECOND, 0);
50 calDay.set(Calendar.MILLISECOND, 0);
51 day.setDay(calDay.getTime());
52 Calendar calStart = Calendar.getInstance();
53 calStart.set(Calendar.HOUR_OF_DAY, 9);
54 calStart.set(Calendar.MINUTE, 0);
55 calStart.set(Calendar.SECOND, 0);
56 calStart.set(Calendar.MILLISECOND, 0);
57 day.setStartWork(new Time(calStart.getTime().getTime()));
58 Calendar calEnd = Calendar.getInstance();
59 calEnd.set(Calendar.HOUR_OF_DAY, 18);
60 calEnd.set(Calendar.MINUTE, 0);
61 calEnd.set(Calendar.SECOND, 0);
62 calEnd.set(Calendar.MILLISECOND, 0);
63 day.setEndWork(new Time(calEnd.getTime().getTime()));
68 setCaption("Editing day");
79 VerticalLayout vl = new VerticalLayout();
85 HorizontalLayout hlDay = new HorizontalLayout();
86 hlDay.setWidth("100%");
87 Label lblDay = new Label("Day:");
88 lblDay.setWidth("100%");
89 hlDay.addComponent(lblDay);
90 hlDay.setExpandRatio(lblDay, 1f);
91 dayDate = new PopupDateField();
92 dayDate.setWidth("100%");
93 dayDate.setInputPrompt("Enter date");
94 dayDate.setResolution(PopupDateField.RESOLUTION_DAY);
95 dayDate.setImmediate(true);
96 dayDate.setValue(day.getDay());
97 dayDate.addListener(this);
98 dayDate.setDateFormat("dd.MM.yyyy");
99 hlDay.addComponent(dayDate);
100 hlDay.setExpandRatio(dayDate, 5f);
101 vl.addComponent(hlDay);
103 HorizontalLayout hlStart = new HorizontalLayout();
104 hlStart.setWidth("100%");
105 Label lblStart = new Label("Start time:");
106 lblStart.setWidth("100%");
107 hlStart.addComponent(lblStart);
108 hlStart.setExpandRatio(lblStart, 1f);
109 dayStartTime = new PopupDateField();
110 dayStartTime.setWidth("100%");
111 dayStartTime.setInputPrompt("Enter time");
112 dayStartTime.setResolution(PopupDateField.RESOLUTION_MIN);
113 dayStartTime.setImmediate(true);
114 dayStartTime.setValue(day.getStartWork());
115 dayStartTime.setDateFormat("HH:mm");
116 hlStart.addComponent(dayStartTime);
117 hlStart.setExpandRatio(dayStartTime, 5f);
118 vl.addComponent(hlStart);
120 HorizontalLayout hlEnd = new HorizontalLayout();
121 hlEnd.setWidth("100%");
122 Label lblEnd = new Label("End time:");
123 lblEnd.setWidth("100%");
124 hlEnd.addComponent(lblEnd);
125 hlEnd.setExpandRatio(lblEnd, 1f);
126 dayEndTime = new PopupDateField();
127 dayEndTime.setWidth("100%");
128 dayEndTime.setInputPrompt("Enter time");
129 dayEndTime.setResolution(PopupDateField.RESOLUTION_MIN);
130 dayEndTime.setImmediate(true);
131 dayEndTime.setValue(day.getEndWork());
132 dayEndTime.setDateFormat("HH:mm");
133 hlEnd.addComponent(dayEndTime);
134 hlEnd.setExpandRatio(dayEndTime, 5f);
135 vl.addComponent(hlEnd);
137 HorizontalLayout hlHours = new HorizontalLayout();
138 hlHours.setWidth("100%");
139 Label lblHours = new Label("Work hours count:");
140 lblHours.setWidth("100%");
141 hlHours.addComponent(lblHours);
142 hlHours.setExpandRatio(lblHours, 1f);
143 dayHours = new TextField();
144 dayHours.setWidth("100%");
145 dayHours.setValue(day.getHours());
146 dayHours.setImmediate(true);
147 hlHours.addComponent(dayHours);
148 hlHours.setExpandRatio(dayHours, 5f);
149 vl.addComponent(hlHours);
151 HorizontalLayout hlOk = new HorizontalLayout();
153 Button okButton = new Button();
156 okButton.setCaption("Create");
159 okButton.setCaption("Save");
162 okButton.addListener((ClickListener)this);
163 hlOk.addComponent(okButton);
164 hlOk.setComponentAlignment(okButton, Alignment.BOTTOM_RIGHT);
165 vl.addComponent(hlOk);
166 vl.setExpandRatio(hlOk, 1f);
170 public void valueChange(ValueChangeEvent event) {
171 Object value = event.getProperty().getValue();
172 Object startValue = dayStartTime.getValue();
173 Object endValue = dayEndTime.getValue();
174 if (value == null || !(value instanceof Date) || !(startValue instanceof Date) || !(endValue instanceof Date)) {
175 getWindow().showNotification("Invalid date entered");
177 Date date = (Date)value;
178 Date start = (Date)startValue;
179 Date end = (Date)endValue;
180 Calendar calStart = Calendar.getInstance();
181 calStart.setTime(start);
182 Calendar calEnd = Calendar.getInstance();
184 Calendar cal = Calendar.getInstance();
186 calStart.set(Calendar.YEAR, cal.get(Calendar.YEAR));
187 calStart.set(Calendar.MONTH, cal.get(Calendar.MONTH));
188 calStart.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH));
189 calStart.set(Calendar.SECOND, cal.get(Calendar.SECOND));
190 calStart.set(Calendar.MILLISECOND, cal.get(Calendar.MILLISECOND));
191 calEnd.set(Calendar.YEAR, cal.get(Calendar.YEAR));
192 calEnd.set(Calendar.MONTH, cal.get(Calendar.MONTH));
193 calEnd.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH));
194 calEnd.set(Calendar.SECOND, cal.get(Calendar.SECOND));
195 calEnd.set(Calendar.MILLISECOND, cal.get(Calendar.MILLISECOND));
196 dayStartTime.setValue(calStart.getTime());
197 dayEndTime.setValue(calEnd.getTime());
202 public void buttonClick(ClickEvent event) {
203 Object value = dayDate.getValue();
204 Object startValue = dayStartTime.getValue();
205 Object endValue = dayEndTime.getValue();
206 Object hoursValue = dayHours.getValue();
209 || !(value instanceof Date)
210 || !(startValue instanceof Date)
211 || !(endValue instanceof Date)
212 || !(hoursValue.toString().matches("^[0-9]+[\\.]{0,1}[0-9]*"))
214 getWindow().showNotification("Invalid information entered");
216 Date date = (Date)value;
217 Date start = (Date)startValue;
218 Date end = (Date)endValue;
219 Float hours = Float.parseFloat(hoursValue.toString());
221 day.setStartWork(new Time(start.getTime()));
222 day.setEndWork(new Time(end.getTime()));
225 EM.getTransaction().begin();
227 EM.getTransaction().commit();
230 if(EM.getTransaction().isActive())
231 EM.getTransaction().rollback();
233 getParent().removeWindow(this);
234 myApp.getDayTable().requestRepaint();