indvdum@9
|
1 |
package ru.indvdum.mywork.vaadin;
|
indvdum@9
|
2 |
|
indvdum@9
|
3 |
import static ru.indvdum.mywork.MyWork.EM;
|
indvdum@9
|
4 |
|
indvdum@9
|
5 |
import java.sql.Time;
|
indvdum@9
|
6 |
import java.text.SimpleDateFormat;
|
indvdum@9
|
7 |
import java.util.Calendar;
|
indvdum@9
|
8 |
import java.util.Date;
|
indvdum@9
|
9 |
|
indvdum@9
|
10 |
import ru.indvdum.mywork.openjpa.model.Day;
|
indvdum@9
|
11 |
|
indvdum@9
|
12 |
import com.vaadin.data.Property.ValueChangeEvent;
|
indvdum@9
|
13 |
import com.vaadin.data.Property.ValueChangeListener;
|
indvdum@9
|
14 |
import com.vaadin.ui.Alignment;
|
indvdum@9
|
15 |
import com.vaadin.ui.Button;
|
indvdum@9
|
16 |
import com.vaadin.ui.HorizontalLayout;
|
indvdum@9
|
17 |
import com.vaadin.ui.Label;
|
indvdum@9
|
18 |
import com.vaadin.ui.PopupDateField;
|
indvdum@9
|
19 |
import com.vaadin.ui.TextField;
|
indvdum@9
|
20 |
import com.vaadin.ui.VerticalLayout;
|
indvdum@9
|
21 |
import com.vaadin.ui.Window;
|
indvdum@9
|
22 |
import com.vaadin.ui.Button.ClickEvent;
|
indvdum@9
|
23 |
import com.vaadin.ui.Button.ClickListener;
|
indvdum@9
|
24 |
|
indvdum@9
|
25 |
public class EditDayDialog extends Window implements ValueChangeListener, ClickListener {
|
indvdum@9
|
26 |
|
indvdum@9
|
27 |
private MyWorkApplication myApp = null;
|
indvdum@9
|
28 |
private EditState state = null;
|
indvdum@9
|
29 |
private Day day = null;
|
indvdum@9
|
30 |
private PopupDateField dayStartTime = null;
|
indvdum@9
|
31 |
private PopupDateField dayEndTime = null;
|
indvdum@9
|
32 |
private PopupDateField dayDate = null;
|
indvdum@9
|
33 |
private TextField dayHours = null;
|
indvdum@9
|
34 |
|
indvdum@9
|
35 |
public EditDayDialog(MyWorkApplication myApp, EditState state, Day day) throws Exception {
|
indvdum@9
|
36 |
super();
|
indvdum@9
|
37 |
this.myApp = myApp;
|
indvdum@9
|
38 |
this.state = state;
|
indvdum@9
|
39 |
switch(state){
|
indvdum@9
|
40 |
case CREATE:
|
indvdum@9
|
41 |
setCaption("Creating new day");
|
indvdum@9
|
42 |
if(day != null)
|
indvdum@9
|
43 |
throw new Exception("Illegal argument: day must be null in creating state.");
|
indvdum@9
|
44 |
day = new Day();
|
indvdum@9
|
45 |
Calendar calDay = Calendar.getInstance();
|
indvdum@9
|
46 |
calDay.set(Calendar.HOUR_OF_DAY, 0);
|
indvdum@9
|
47 |
calDay.set(Calendar.MINUTE, 0);
|
indvdum@9
|
48 |
calDay.set(Calendar.SECOND, 0);
|
indvdum@9
|
49 |
calDay.set(Calendar.MILLISECOND, 0);
|
indvdum@9
|
50 |
day.setDay(calDay.getTime());
|
indvdum@9
|
51 |
Calendar calStart = Calendar.getInstance();
|
indvdum@9
|
52 |
calStart.set(Calendar.HOUR_OF_DAY, 9);
|
indvdum@9
|
53 |
calStart.set(Calendar.MINUTE, 0);
|
indvdum@9
|
54 |
calStart.set(Calendar.SECOND, 0);
|
indvdum@9
|
55 |
calStart.set(Calendar.MILLISECOND, 0);
|
indvdum@9
|
56 |
day.setStartWork(new Time(calStart.getTime().getTime()));
|
indvdum@9
|
57 |
Calendar calEnd = Calendar.getInstance();
|
indvdum@9
|
58 |
calEnd.set(Calendar.HOUR_OF_DAY, 18);
|
indvdum@9
|
59 |
calEnd.set(Calendar.MINUTE, 0);
|
indvdum@9
|
60 |
calEnd.set(Calendar.SECOND, 0);
|
indvdum@9
|
61 |
calEnd.set(Calendar.MILLISECOND, 0);
|
indvdum@9
|
62 |
day.setEndWork(new Time(calEnd.getTime().getTime()));
|
indvdum@9
|
63 |
day.setHours(8f);
|
indvdum@9
|
64 |
this.day = day;
|
indvdum@9
|
65 |
break;
|
indvdum@9
|
66 |
case EDIT:
|
indvdum@9
|
67 |
setCaption("Editing day");
|
indvdum@9
|
68 |
if(day == null)
|
indvdum@9
|
69 |
throw new Exception("Illegal argument: day must be not null in editing state.");
|
indvdum@9
|
70 |
this.day = day;
|
indvdum@9
|
71 |
break;
|
indvdum@9
|
72 |
}
|
indvdum@9
|
73 |
init();
|
indvdum@9
|
74 |
}
|
indvdum@9
|
75 |
|
indvdum@9
|
76 |
private void init(){
|
indvdum@9
|
77 |
setModal(true);
|
indvdum@9
|
78 |
setWidth("480px");
|
indvdum@9
|
79 |
setHeight("300px");
|
indvdum@9
|
80 |
VerticalLayout vl = new VerticalLayout();
|
indvdum@9
|
81 |
vl.setSizeFull();
|
indvdum@9
|
82 |
vl.setSpacing(true);
|
indvdum@9
|
83 |
vl.setMargin(true);
|
indvdum@9
|
84 |
setContent(vl);
|
indvdum@9
|
85 |
|
indvdum@9
|
86 |
HorizontalLayout hlDay = new HorizontalLayout();
|
indvdum@9
|
87 |
hlDay.setWidth("100%");
|
indvdum@9
|
88 |
Label lblDay = new Label("Day:");
|
indvdum@9
|
89 |
lblDay.setWidth("100%");
|
indvdum@9
|
90 |
hlDay.addComponent(lblDay);
|
indvdum@9
|
91 |
hlDay.setExpandRatio(lblDay, 1f);
|
indvdum@9
|
92 |
dayDate = new PopupDateField();
|
indvdum@9
|
93 |
dayDate.setWidth("100%");
|
indvdum@9
|
94 |
dayDate.setInputPrompt("Enter date");
|
indvdum@9
|
95 |
dayDate.setResolution(PopupDateField.RESOLUTION_DAY);
|
indvdum@9
|
96 |
dayDate.setImmediate(true);
|
indvdum@9
|
97 |
dayDate.setValue(day.getDay());
|
indvdum@9
|
98 |
dayDate.addListener(this);
|
indvdum@9
|
99 |
dayDate.setDateFormat("dd.MM.yyyy");
|
indvdum@9
|
100 |
hlDay.addComponent(dayDate);
|
indvdum@9
|
101 |
hlDay.setExpandRatio(dayDate, 5f);
|
indvdum@9
|
102 |
vl.addComponent(hlDay);
|
indvdum@9
|
103 |
|
indvdum@9
|
104 |
HorizontalLayout hlStart = new HorizontalLayout();
|
indvdum@9
|
105 |
hlStart.setWidth("100%");
|
indvdum@9
|
106 |
Label lblStart = new Label("Start time:");
|
indvdum@9
|
107 |
lblStart.setWidth("100%");
|
indvdum@9
|
108 |
hlStart.addComponent(lblStart);
|
indvdum@9
|
109 |
hlStart.setExpandRatio(lblStart, 1f);
|
indvdum@9
|
110 |
dayStartTime = new PopupDateField();
|
indvdum@9
|
111 |
dayStartTime.setWidth("100%");
|
indvdum@9
|
112 |
dayStartTime.setInputPrompt("Enter time");
|
indvdum@9
|
113 |
dayStartTime.setResolution(PopupDateField.RESOLUTION_MIN);
|
indvdum@9
|
114 |
dayStartTime.setImmediate(true);
|
indvdum@9
|
115 |
dayStartTime.setValue(day.getStartWork());
|
indvdum@9
|
116 |
dayStartTime.setDateFormat("HH:mm");
|
indvdum@9
|
117 |
hlStart.addComponent(dayStartTime);
|
indvdum@9
|
118 |
hlStart.setExpandRatio(dayStartTime, 5f);
|
indvdum@9
|
119 |
vl.addComponent(hlStart);
|
indvdum@9
|
120 |
|
indvdum@9
|
121 |
HorizontalLayout hlEnd = new HorizontalLayout();
|
indvdum@9
|
122 |
hlEnd.setWidth("100%");
|
indvdum@9
|
123 |
Label lblEnd = new Label("End time:");
|
indvdum@9
|
124 |
lblEnd.setWidth("100%");
|
indvdum@9
|
125 |
hlEnd.addComponent(lblEnd);
|
indvdum@9
|
126 |
hlEnd.setExpandRatio(lblEnd, 1f);
|
indvdum@9
|
127 |
dayEndTime = new PopupDateField();
|
indvdum@9
|
128 |
dayEndTime.setWidth("100%");
|
indvdum@9
|
129 |
dayEndTime.setInputPrompt("Enter time");
|
indvdum@9
|
130 |
dayEndTime.setResolution(PopupDateField.RESOLUTION_MIN);
|
indvdum@9
|
131 |
dayEndTime.setImmediate(true);
|
indvdum@9
|
132 |
dayEndTime.setValue(day.getEndWork());
|
indvdum@9
|
133 |
dayEndTime.setDateFormat("HH:mm");
|
indvdum@9
|
134 |
hlEnd.addComponent(dayEndTime);
|
indvdum@9
|
135 |
hlEnd.setExpandRatio(dayEndTime, 5f);
|
indvdum@9
|
136 |
vl.addComponent(hlEnd);
|
indvdum@9
|
137 |
|
indvdum@9
|
138 |
HorizontalLayout hlHours = new HorizontalLayout();
|
indvdum@9
|
139 |
hlHours.setWidth("100%");
|
indvdum@9
|
140 |
Label lblHours = new Label("Work hours count:");
|
indvdum@9
|
141 |
lblHours.setWidth("100%");
|
indvdum@9
|
142 |
hlHours.addComponent(lblHours);
|
indvdum@9
|
143 |
hlHours.setExpandRatio(lblHours, 1f);
|
indvdum@9
|
144 |
dayHours = new TextField();
|
indvdum@9
|
145 |
dayHours.setWidth("100%");
|
indvdum@9
|
146 |
dayHours.setValue(day.getHours());
|
indvdum@9
|
147 |
dayHours.setImmediate(true);
|
indvdum@9
|
148 |
hlHours.addComponent(dayHours);
|
indvdum@9
|
149 |
hlHours.setExpandRatio(dayHours, 5f);
|
indvdum@9
|
150 |
vl.addComponent(hlHours);
|
indvdum@9
|
151 |
|
indvdum@9
|
152 |
HorizontalLayout hlOk = new HorizontalLayout();
|
indvdum@9
|
153 |
hlOk.setSizeFull();
|
indvdum@9
|
154 |
Button okButton = new Button();
|
indvdum@9
|
155 |
switch(state){
|
indvdum@9
|
156 |
case CREATE:
|
indvdum@9
|
157 |
okButton.setCaption("Create");
|
indvdum@9
|
158 |
break;
|
indvdum@9
|
159 |
case EDIT:
|
indvdum@9
|
160 |
okButton.setCaption("Save");
|
indvdum@9
|
161 |
break;
|
indvdum@9
|
162 |
}
|
indvdum@9
|
163 |
okButton.addListener((ClickListener)this);
|
indvdum@9
|
164 |
hlOk.addComponent(okButton);
|
indvdum@9
|
165 |
hlOk.setComponentAlignment(okButton, Alignment.BOTTOM_RIGHT);
|
indvdum@9
|
166 |
vl.addComponent(hlOk);
|
indvdum@9
|
167 |
vl.setExpandRatio(hlOk, 1f);
|
indvdum@9
|
168 |
}
|
indvdum@9
|
169 |
|
indvdum@9
|
170 |
@Override
|
indvdum@9
|
171 |
public void valueChange(ValueChangeEvent event) {
|
indvdum@9
|
172 |
Object value = event.getProperty().getValue();
|
indvdum@9
|
173 |
Object startValue = dayStartTime.getValue();
|
indvdum@9
|
174 |
Object endValue = dayEndTime.getValue();
|
indvdum@9
|
175 |
if (value == null || !(value instanceof Date) || !(startValue instanceof Date) || !(endValue instanceof Date)) {
|
indvdum@9
|
176 |
getWindow().showNotification("Invalid date entered");
|
indvdum@9
|
177 |
} else {
|
indvdum@9
|
178 |
Date date = (Date)value;
|
indvdum@9
|
179 |
Date start = (Date)startValue;
|
indvdum@9
|
180 |
Date end = (Date)endValue;
|
indvdum@9
|
181 |
Calendar calStart = Calendar.getInstance();
|
indvdum@9
|
182 |
calStart.setTime(start);
|
indvdum@9
|
183 |
Calendar calEnd = Calendar.getInstance();
|
indvdum@9
|
184 |
calEnd.setTime(end);
|
indvdum@9
|
185 |
Calendar cal = Calendar.getInstance();
|
indvdum@9
|
186 |
cal.setTime(date);
|
indvdum@9
|
187 |
calStart.set(Calendar.YEAR, cal.get(Calendar.YEAR));
|
indvdum@9
|
188 |
calStart.set(Calendar.MONTH, cal.get(Calendar.MONTH));
|
indvdum@9
|
189 |
calStart.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH));
|
indvdum@9
|
190 |
calStart.set(Calendar.SECOND, cal.get(Calendar.SECOND));
|
indvdum@9
|
191 |
calStart.set(Calendar.MILLISECOND, cal.get(Calendar.MILLISECOND));
|
indvdum@9
|
192 |
calEnd.set(Calendar.YEAR, cal.get(Calendar.YEAR));
|
indvdum@9
|
193 |
calEnd.set(Calendar.MONTH, cal.get(Calendar.MONTH));
|
indvdum@9
|
194 |
calEnd.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH));
|
indvdum@9
|
195 |
calEnd.set(Calendar.SECOND, cal.get(Calendar.SECOND));
|
indvdum@9
|
196 |
calEnd.set(Calendar.MILLISECOND, cal.get(Calendar.MILLISECOND));
|
indvdum@9
|
197 |
dayStartTime.setValue(calStart.getTime());
|
indvdum@9
|
198 |
dayEndTime.setValue(calEnd.getTime());
|
indvdum@9
|
199 |
}
|
indvdum@9
|
200 |
}
|
indvdum@9
|
201 |
|
indvdum@9
|
202 |
@Override
|
indvdum@9
|
203 |
public void buttonClick(ClickEvent event) {
|
indvdum@9
|
204 |
Object value = dayDate.getValue();
|
indvdum@9
|
205 |
Object startValue = dayStartTime.getValue();
|
indvdum@9
|
206 |
Object endValue = dayEndTime.getValue();
|
indvdum@9
|
207 |
Object hoursValue = dayHours.getValue();
|
indvdum@9
|
208 |
if (
|
indvdum@9
|
209 |
value == null
|
indvdum@9
|
210 |
|| !(value instanceof Date)
|
indvdum@9
|
211 |
|| !(startValue instanceof Date)
|
indvdum@9
|
212 |
|| !(endValue instanceof Date)
|
indvdum@9
|
213 |
|| !(hoursValue.toString().matches("^[0-9]+[\\.]{0,1}[0-9]*"))
|
indvdum@9
|
214 |
) {
|
indvdum@9
|
215 |
getWindow().showNotification("Invalid information entered");
|
indvdum@9
|
216 |
} else {
|
indvdum@9
|
217 |
Date date = (Date)value;
|
indvdum@9
|
218 |
Date start = (Date)startValue;
|
indvdum@9
|
219 |
Date end = (Date)endValue;
|
indvdum@9
|
220 |
Float hours = Float.parseFloat(hoursValue.toString());
|
indvdum@9
|
221 |
day.setDay(date);
|
indvdum@9
|
222 |
day.setStartWork(new Time(start.getTime()));
|
indvdum@9
|
223 |
day.setEndWork(new Time(end.getTime()));
|
indvdum@9
|
224 |
day.setHours(hours);
|
indvdum@9
|
225 |
try{
|
indvdum@9
|
226 |
EM.getTransaction().begin();
|
indvdum@9
|
227 |
EM.persist(day);
|
indvdum@9
|
228 |
EM.getTransaction().commit();
|
indvdum@9
|
229 |
} finally {
|
indvdum@9
|
230 |
if(EM.getTransaction().isActive())
|
indvdum@9
|
231 |
EM.getTransaction().rollback();
|
indvdum@9
|
232 |
}
|
indvdum@9
|
233 |
getParent().removeWindow(this);
|
indvdum@9
|
234 |
myApp.getDayTable().requestRepaint();
|
indvdum@9
|
235 |
}
|
indvdum@9
|
236 |
}
|
indvdum@9
|
237 |
|
indvdum@9
|
238 |
}
|