Solution of a problem with JPA exceptions.
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, EditState state, Day day) throws Exception {
41 setCaption("Creating new day");
43 throw new Exception("Illegal argument: day must be null in creating state.");
45 Calendar calDay = Calendar.getInstance();
46 calDay.set(Calendar.HOUR_OF_DAY, 0);
47 calDay.set(Calendar.MINUTE, 0);
48 calDay.set(Calendar.SECOND, 0);
49 calDay.set(Calendar.MILLISECOND, 0);
50 day.setDay(calDay.getTime());
51 Calendar calStart = Calendar.getInstance();
52 calStart.set(Calendar.HOUR_OF_DAY, 9);
53 calStart.set(Calendar.MINUTE, 0);
54 calStart.set(Calendar.SECOND, 0);
55 calStart.set(Calendar.MILLISECOND, 0);
56 day.setStartWork(new Time(calStart.getTime().getTime()));
57 Calendar calEnd = Calendar.getInstance();
58 calEnd.set(Calendar.HOUR_OF_DAY, 18);
59 calEnd.set(Calendar.MINUTE, 0);
60 calEnd.set(Calendar.SECOND, 0);
61 calEnd.set(Calendar.MILLISECOND, 0);
62 day.setEndWork(new Time(calEnd.getTime().getTime()));
67 setCaption("Editing day");
69 throw new Exception("Illegal argument: day must be not null in editing state.");
80 VerticalLayout vl = new VerticalLayout();
86 HorizontalLayout hlDay = new HorizontalLayout();
87 hlDay.setWidth("100%");
88 Label lblDay = new Label("Day:");
89 lblDay.setWidth("100%");
90 hlDay.addComponent(lblDay);
91 hlDay.setExpandRatio(lblDay, 1f);
92 dayDate = new PopupDateField();
93 dayDate.setWidth("100%");
94 dayDate.setInputPrompt("Enter date");
95 dayDate.setResolution(PopupDateField.RESOLUTION_DAY);
96 dayDate.setImmediate(true);
97 dayDate.setValue(day.getDay());
98 dayDate.addListener(this);
99 dayDate.setDateFormat("dd.MM.yyyy");
100 hlDay.addComponent(dayDate);
101 hlDay.setExpandRatio(dayDate, 5f);
102 vl.addComponent(hlDay);
104 HorizontalLayout hlStart = new HorizontalLayout();
105 hlStart.setWidth("100%");
106 Label lblStart = new Label("Start time:");
107 lblStart.setWidth("100%");
108 hlStart.addComponent(lblStart);
109 hlStart.setExpandRatio(lblStart, 1f);
110 dayStartTime = new PopupDateField();
111 dayStartTime.setWidth("100%");
112 dayStartTime.setInputPrompt("Enter time");
113 dayStartTime.setResolution(PopupDateField.RESOLUTION_MIN);
114 dayStartTime.setImmediate(true);
115 dayStartTime.setValue(day.getStartWork());
116 dayStartTime.setDateFormat("HH:mm");
117 hlStart.addComponent(dayStartTime);
118 hlStart.setExpandRatio(dayStartTime, 5f);
119 vl.addComponent(hlStart);
121 HorizontalLayout hlEnd = new HorizontalLayout();
122 hlEnd.setWidth("100%");
123 Label lblEnd = new Label("End time:");
124 lblEnd.setWidth("100%");
125 hlEnd.addComponent(lblEnd);
126 hlEnd.setExpandRatio(lblEnd, 1f);
127 dayEndTime = new PopupDateField();
128 dayEndTime.setWidth("100%");
129 dayEndTime.setInputPrompt("Enter time");
130 dayEndTime.setResolution(PopupDateField.RESOLUTION_MIN);
131 dayEndTime.setImmediate(true);
132 dayEndTime.setValue(day.getEndWork());
133 dayEndTime.setDateFormat("HH:mm");
134 hlEnd.addComponent(dayEndTime);
135 hlEnd.setExpandRatio(dayEndTime, 5f);
136 vl.addComponent(hlEnd);
138 HorizontalLayout hlHours = new HorizontalLayout();
139 hlHours.setWidth("100%");
140 Label lblHours = new Label("Work hours count:");
141 lblHours.setWidth("100%");
142 hlHours.addComponent(lblHours);
143 hlHours.setExpandRatio(lblHours, 1f);
144 dayHours = new TextField();
145 dayHours.setWidth("100%");
146 dayHours.setValue(day.getHours());
147 dayHours.setImmediate(true);
148 hlHours.addComponent(dayHours);
149 hlHours.setExpandRatio(dayHours, 5f);
150 vl.addComponent(hlHours);
152 HorizontalLayout hlOk = new HorizontalLayout();
154 Button okButton = new Button();
157 okButton.setCaption("Create");
160 okButton.setCaption("Save");
163 okButton.addListener((ClickListener)this);
164 hlOk.addComponent(okButton);
165 hlOk.setComponentAlignment(okButton, Alignment.BOTTOM_RIGHT);
166 vl.addComponent(hlOk);
167 vl.setExpandRatio(hlOk, 1f);
171 public void valueChange(ValueChangeEvent event) {
172 Object value = event.getProperty().getValue();
173 Object startValue = dayStartTime.getValue();
174 Object endValue = dayEndTime.getValue();
175 if (value == null || !(value instanceof Date) || !(startValue instanceof Date) || !(endValue instanceof Date)) {
176 getWindow().showNotification("Invalid date entered");
178 Date date = (Date)value;
179 Date start = (Date)startValue;
180 Date end = (Date)endValue;
181 Calendar calStart = Calendar.getInstance();
182 calStart.setTime(start);
183 Calendar calEnd = Calendar.getInstance();
185 Calendar cal = Calendar.getInstance();
187 calStart.set(Calendar.YEAR, cal.get(Calendar.YEAR));
188 calStart.set(Calendar.MONTH, cal.get(Calendar.MONTH));
189 calStart.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH));
190 calStart.set(Calendar.SECOND, cal.get(Calendar.SECOND));
191 calStart.set(Calendar.MILLISECOND, cal.get(Calendar.MILLISECOND));
192 calEnd.set(Calendar.YEAR, cal.get(Calendar.YEAR));
193 calEnd.set(Calendar.MONTH, cal.get(Calendar.MONTH));
194 calEnd.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH));
195 calEnd.set(Calendar.SECOND, cal.get(Calendar.SECOND));
196 calEnd.set(Calendar.MILLISECOND, cal.get(Calendar.MILLISECOND));
197 dayStartTime.setValue(calStart.getTime());
198 dayEndTime.setValue(calEnd.getTime());
203 public void buttonClick(ClickEvent event) {
204 Object value = dayDate.getValue();
205 Object startValue = dayStartTime.getValue();
206 Object endValue = dayEndTime.getValue();
207 Object hoursValue = dayHours.getValue();
210 || !(value instanceof Date)
211 || !(startValue instanceof Date)
212 || !(endValue instanceof Date)
213 || !(hoursValue.toString().matches("^[0-9]+[\\.]{0,1}[0-9]*"))
215 getWindow().showNotification("Invalid information entered");
217 Date date = (Date)value;
218 Date start = (Date)startValue;
219 Date end = (Date)endValue;
220 Float hours = Float.parseFloat(hoursValue.toString());
222 day.setStartWork(new Time(start.getTime()));
223 day.setEndWork(new Time(end.getTime()));
226 EM.getTransaction().begin();
228 EM.getTransaction().commit();
231 if(EM.getTransaction().isActive())
232 EM.getTransaction().rollback();
234 getParent().removeWindow(this);
235 myApp.getDayTable().requestRepaint();