Добавлено редактирование объектов.
1 package ru.indvdum.mywork.vaadin;
3 import static ru.indvdum.mywork.MyWork.EM;
5 import java.util.Calendar;
8 import javax.persistence.Query;
10 import ru.indvdum.mywork.openjpa.model.Day;
11 import ru.indvdum.mywork.openjpa.model.Task;
12 import ru.indvdum.mywork.openjpa.model.Work;
14 import com.vaadin.data.Property.ValueChangeEvent;
15 import com.vaadin.data.Property.ValueChangeListener;
16 import com.vaadin.ui.Alignment;
17 import com.vaadin.ui.Button;
18 import com.vaadin.ui.ComboBox;
19 import com.vaadin.ui.HorizontalLayout;
20 import com.vaadin.ui.Label;
21 import com.vaadin.ui.RichTextArea;
22 import com.vaadin.ui.TextField;
23 import com.vaadin.ui.VerticalLayout;
24 import com.vaadin.ui.Window;
25 import com.vaadin.ui.AbstractSelect.Filtering;
26 import com.vaadin.ui.Button.ClickEvent;
27 import com.vaadin.ui.Button.ClickListener;
29 public class EditWorkDialog extends Window implements ClickListener {
31 private MyWorkApplication myApp = null;
32 private EditState state = null;
33 private Work work = null;
34 private ComboBox workDay = null;
35 private ComboBox workTask = null;
36 private TextField workHours = null;
37 private RichTextArea workResult = null;
39 public EditWorkDialog(MyWorkApplication myApp, Work work) throws Exception {
43 state = EditState.CREATE;
45 state = EditState.EDIT;
48 setCaption("Creating new work");
55 setCaption("Editing work");
66 VerticalLayout vl = new VerticalLayout();
72 HorizontalLayout hlDay = new HorizontalLayout();
73 hlDay.setWidth("100%");
74 Label lblDay = new Label("Day:");
75 lblDay.setWidth("100%");
76 hlDay.addComponent(lblDay);
77 hlDay.setExpandRatio(lblDay, 1f);
78 workDay = new ComboBox();
79 workDay.setWidth("100%");
80 workDay.setImmediate(true);
81 workDay.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS);
82 updateDays("select d from " + Day.class.getName() + " d order by d.day");
83 workDay.addListener(new ValueChangeListener(){
86 public void valueChange(ValueChangeEvent event) {
87 Day day = (Day)event.getProperty().getValue();
89 updateTasks("select t from " + Task.class.getName() + " t order by t.id desc");
91 updateTasks("select t from " + Task.class.getName() + " t where t.id not in (select w.task.id from " + Work.class.getName() + " w where w.day.id = " + day.getId() + ") order by t.id desc");
95 hlDay.addComponent(workDay);
96 hlDay.setExpandRatio(workDay, 5f);
97 vl.addComponent(hlDay);
99 HorizontalLayout hlTask = new HorizontalLayout();
100 hlTask.setWidth("100%");
101 Label lblStart = new Label("Task:");
102 lblStart.setWidth("100%");
103 hlTask.addComponent(lblStart);
104 hlTask.setExpandRatio(lblStart, 1f);
105 workTask = new ComboBox();
106 workTask.setWidth("100%");
107 workTask.setImmediate(true);
108 workTask.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS);
109 Day day = (Day)workDay.getValue();
111 updateTasks("select t from " + Task.class.getName() + " t order by t.id desc");
113 updateTasks("select t from " + Task.class.getName() + " t where t.id not in (select w.task.id from " + Work.class.getName() + " w where w.day.id = " + day.getId() + ") order by t.id desc");
114 workTask.addListener(new ValueChangeListener(){
117 public void valueChange(ValueChangeEvent event) {
118 Task task = (Task)event.getProperty().getValue();
120 updateDays("select d from " + Day.class.getName() + " d order by d.day");
122 updateDays("select d from " + Day.class.getName() + " d where d.id not in (select w.day.id from " + Work.class.getName() + " w where w.task.id = " + task.getId() + ") order by d.day");
126 hlTask.addComponent(workTask);
127 hlTask.setExpandRatio(workTask, 5f);
128 vl.addComponent(hlTask);
130 HorizontalLayout hlHours = new HorizontalLayout();
131 hlHours.setWidth("100%");
132 Label lblHours = new Label("Hours:");
133 lblHours.setWidth("100%");
134 hlHours.addComponent(lblHours);
135 hlHours.setExpandRatio(lblHours, 1f);
136 workHours = new TextField();
137 workHours.setWidth("100%");
138 workHours.setValue(work.getHours());
139 workHours.setImmediate(true);
140 hlHours.addComponent(workHours);
141 hlHours.setExpandRatio(workHours, 5f);
142 vl.addComponent(hlHours);
144 workResult = new RichTextArea("Result");
145 workResult.setValue(work.getResult());
146 workResult.setSizeFull();
147 vl.addComponent(workResult);
148 vl.setExpandRatio(workResult, 5f);
150 HorizontalLayout hlOk = new HorizontalLayout();
151 hlOk.setWidth("100%");
152 Button okButton = new Button();
155 okButton.setCaption("Create");
158 okButton.setCaption("Save");
161 okButton.addListener((ClickListener)this);
162 hlOk.addComponent(okButton);
163 hlOk.setComponentAlignment(okButton, Alignment.MIDDLE_RIGHT);
164 vl.addComponent(hlOk);
167 private void updateDays(String jpql){
168 if(workTask != null && workTask.getValue() != null && workDay != null && workDay.getValue() != null)
170 workDay.removeAllItems();
171 Query query = EM.createQuery(jpql);
172 List list = query.getResultList();
173 for(Day day: (List<Day>)list){
174 workDay.addItem(day);
175 Calendar currCal = Calendar.getInstance();
176 currCal.set(Calendar.HOUR_OF_DAY, 0);
177 currCal.set(Calendar.MINUTE, 0);
178 currCal.set(Calendar.SECOND, 0);
179 currCal.set(Calendar.MILLISECOND, 0);
180 if(day.getDay().equals(currCal.getTime()))
185 private void updateTasks(String jpql){
186 if(workTask != null && workTask.getValue() != null && workDay != null && workDay.getValue() != null)
188 workTask.removeAllItems();
189 Query query = EM.createQuery(jpql);
190 List list = query.getResultList();
191 for(Task task: (List<Task>)list)
192 workTask.addItem(task);
196 public void buttonClick(ClickEvent event) {
197 Object dayObj = workDay.getValue();
198 Object taskObj = workTask.getValue();
199 Object hoursObj = workHours.getValue();
200 String result = workResult.getValue().toString();
202 !(dayObj instanceof Day)
203 || !(taskObj instanceof Task)
204 || !(hoursObj.toString().matches("^[0-9]+[\\.]{0,1}[0-9]*"))
206 getWindow().showNotification("Invalid information entered");
208 Day day = (Day)dayObj;
209 Task task = (Task)taskObj;
210 Float hours = Float.parseFloat(hoursObj.toString());
213 work.setHours(hours);
214 work.setResult(result);
216 EM.getTransaction().begin();
218 EM.getTransaction().commit();
221 if(EM.getTransaction().isActive())
222 EM.getTransaction().rollback();
224 getParent().removeWindow(this);
225 myApp.getWorkTable().requestRepaint();