1.1 --- a/src/main/java/ru/indvdum/mywork/vaadin/EditWorkDialog.java Wed Nov 23 17:25:20 2011 +0300
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,234 +0,0 @@
1.4 -package ru.indvdum.mywork.vaadin;
1.5 -
1.6 -import static ru.indvdum.mywork.MyWork.EM;
1.7 -
1.8 -import java.util.Calendar;
1.9 -import java.util.List;
1.10 -
1.11 -import javax.persistence.Query;
1.12 -
1.13 -import ru.indvdum.mywork.openjpa.model.Day;
1.14 -import ru.indvdum.mywork.openjpa.model.Task;
1.15 -import ru.indvdum.mywork.openjpa.model.Work;
1.16 -
1.17 -import com.vaadin.data.Property.ValueChangeEvent;
1.18 -import com.vaadin.data.Property.ValueChangeListener;
1.19 -import com.vaadin.ui.Alignment;
1.20 -import com.vaadin.ui.Button;
1.21 -import com.vaadin.ui.ComboBox;
1.22 -import com.vaadin.ui.HorizontalLayout;
1.23 -import com.vaadin.ui.Label;
1.24 -import com.vaadin.ui.RichTextArea;
1.25 -import com.vaadin.ui.TextField;
1.26 -import com.vaadin.ui.VerticalLayout;
1.27 -import com.vaadin.ui.Window;
1.28 -import com.vaadin.ui.AbstractSelect.Filtering;
1.29 -import com.vaadin.ui.Button.ClickEvent;
1.30 -import com.vaadin.ui.Button.ClickListener;
1.31 -
1.32 -/**
1.33 - * @author indvdum
1.34 - * 23.08.2011 19:11:56
1.35 - *
1.36 - */
1.37 -public class EditWorkDialog extends Window implements ClickListener {
1.38 -
1.39 - private MyWorkApplication myApp = null;
1.40 - private EditState state = null;
1.41 - private Work work = null;
1.42 - private ComboBox workDay = null;
1.43 - private ComboBox workTask = null;
1.44 - private TextField workHours = null;
1.45 - private RichTextArea workResult = null;
1.46 -
1.47 - public EditWorkDialog(MyWorkApplication myApp, Work work) throws Exception {
1.48 - super();
1.49 - this.myApp = myApp;
1.50 - if(work == null)
1.51 - state = EditState.CREATE;
1.52 - else
1.53 - state = EditState.EDIT;
1.54 - switch(state){
1.55 - case CREATE:
1.56 - setCaption("Creating new work");
1.57 - work = new Work();
1.58 - work.setHours(0f);
1.59 - work.setResult("");
1.60 - this.work = work;
1.61 - break;
1.62 - case EDIT:
1.63 - setCaption("Editing work");
1.64 - this.work = work;
1.65 - break;
1.66 - }
1.67 - init();
1.68 - }
1.69 -
1.70 - private void init(){
1.71 - setModal(true);
1.72 - setWidth("640px");
1.73 - setHeight("480px");
1.74 - VerticalLayout vl = new VerticalLayout();
1.75 - vl.setSizeFull();
1.76 - vl.setSpacing(true);
1.77 - vl.setMargin(true);
1.78 - setContent(vl);
1.79 -
1.80 - HorizontalLayout hlDay = new HorizontalLayout();
1.81 - hlDay.setWidth("100%");
1.82 - Label lblDay = new Label("Day:");
1.83 - lblDay.setWidth("100%");
1.84 - hlDay.addComponent(lblDay);
1.85 - hlDay.setExpandRatio(lblDay, 1f);
1.86 - workDay = new ComboBox();
1.87 - workDay.setWidth("100%");
1.88 - workDay.setImmediate(true);
1.89 - workDay.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS);
1.90 - updateDays("select d from " + Day.class.getName() + " d order by d.day");
1.91 - workDay.addListener(new ValueChangeListener(){
1.92 -
1.93 - @Override
1.94 - public void valueChange(ValueChangeEvent event) {
1.95 - Day day = (Day)event.getProperty().getValue();
1.96 - if(day == null)
1.97 - updateTasks("select t from " + Task.class.getName() + " t order by t.id desc");
1.98 - else
1.99 - 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");
1.100 - }
1.101 -
1.102 - });
1.103 - hlDay.addComponent(workDay);
1.104 - hlDay.setExpandRatio(workDay, 5f);
1.105 - vl.addComponent(hlDay);
1.106 -
1.107 - HorizontalLayout hlTask = new HorizontalLayout();
1.108 - hlTask.setWidth("100%");
1.109 - Label lblStart = new Label("Task:");
1.110 - lblStart.setWidth("100%");
1.111 - hlTask.addComponent(lblStart);
1.112 - hlTask.setExpandRatio(lblStart, 1f);
1.113 - workTask = new ComboBox();
1.114 - workTask.setWidth("100%");
1.115 - workTask.setImmediate(true);
1.116 - workTask.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS);
1.117 - Day day = (Day)workDay.getValue();
1.118 - if(day == null)
1.119 - updateTasks("select t from " + Task.class.getName() + " t order by t.id desc");
1.120 - else
1.121 - 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");
1.122 - workTask.addListener(new ValueChangeListener(){
1.123 -
1.124 - @Override
1.125 - public void valueChange(ValueChangeEvent event) {
1.126 - Task task = (Task)event.getProperty().getValue();
1.127 - if(task == null)
1.128 - updateDays("select d from " + Day.class.getName() + " d order by d.day");
1.129 - else
1.130 - 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");
1.131 - }
1.132 -
1.133 - });
1.134 - hlTask.addComponent(workTask);
1.135 - hlTask.setExpandRatio(workTask, 5f);
1.136 - vl.addComponent(hlTask);
1.137 -
1.138 - HorizontalLayout hlHours = new HorizontalLayout();
1.139 - hlHours.setWidth("100%");
1.140 - Label lblHours = new Label("Hours:");
1.141 - lblHours.setWidth("100%");
1.142 - hlHours.addComponent(lblHours);
1.143 - hlHours.setExpandRatio(lblHours, 1f);
1.144 - workHours = new TextField();
1.145 - workHours.setWidth("100%");
1.146 - workHours.setValue(work.getHours());
1.147 - workHours.setImmediate(true);
1.148 - hlHours.addComponent(workHours);
1.149 - hlHours.setExpandRatio(workHours, 5f);
1.150 - vl.addComponent(hlHours);
1.151 -
1.152 - workResult = new RichTextArea("Result");
1.153 - workResult.setValue(work.getResult());
1.154 - workResult.setSizeFull();
1.155 - vl.addComponent(workResult);
1.156 - vl.setExpandRatio(workResult, 5f);
1.157 -
1.158 - HorizontalLayout hlOk = new HorizontalLayout();
1.159 - hlOk.setWidth("100%");
1.160 - Button okButton = new Button();
1.161 - switch(state){
1.162 - case CREATE:
1.163 - okButton.setCaption("Create");
1.164 - break;
1.165 - case EDIT:
1.166 - okButton.setCaption("Save");
1.167 - break;
1.168 - }
1.169 - okButton.addListener((ClickListener)this);
1.170 - hlOk.addComponent(okButton);
1.171 - hlOk.setComponentAlignment(okButton, Alignment.MIDDLE_RIGHT);
1.172 - vl.addComponent(hlOk);
1.173 - }
1.174 -
1.175 - private void updateDays(String jpql){
1.176 - if(workTask != null && workTask.getValue() != null && workDay != null && workDay.getValue() != null)
1.177 - return;
1.178 - workDay.removeAllItems();
1.179 - Query query = EM.createQuery(jpql);
1.180 - List list = query.getResultList();
1.181 - for(Day day: (List<Day>)list){
1.182 - workDay.addItem(day);
1.183 - Calendar currCal = Calendar.getInstance();
1.184 - currCal.set(Calendar.HOUR_OF_DAY, 0);
1.185 - currCal.set(Calendar.MINUTE, 0);
1.186 - currCal.set(Calendar.SECOND, 0);
1.187 - currCal.set(Calendar.MILLISECOND, 0);
1.188 - if(day.getDay().equals(currCal.getTime()))
1.189 - workDay.select(day);
1.190 - }
1.191 - }
1.192 -
1.193 - private void updateTasks(String jpql){
1.194 - if(workTask != null && workTask.getValue() != null && workDay != null && workDay.getValue() != null)
1.195 - return;
1.196 - workTask.removeAllItems();
1.197 - Query query = EM.createQuery(jpql);
1.198 - List list = query.getResultList();
1.199 - for(Task task: (List<Task>)list)
1.200 - workTask.addItem(task);
1.201 - }
1.202 -
1.203 - @Override
1.204 - public void buttonClick(ClickEvent event) {
1.205 - Object dayObj = workDay.getValue();
1.206 - Object taskObj = workTask.getValue();
1.207 - Object hoursObj = workHours.getValue();
1.208 - String result = workResult.getValue().toString();
1.209 - if (
1.210 - !(dayObj instanceof Day)
1.211 - || !(taskObj instanceof Task)
1.212 - || !(hoursObj.toString().matches("^[0-9]+[\\.]{0,1}[0-9]*"))
1.213 - ) {
1.214 - getWindow().showNotification("Invalid information entered");
1.215 - } else {
1.216 - Day day = (Day)dayObj;
1.217 - Task task = (Task)taskObj;
1.218 - Float hours = Float.parseFloat(hoursObj.toString());
1.219 - work.setDay(day);
1.220 - work.setTask(task);
1.221 - work.setHours(hours);
1.222 - work.setResult(result);
1.223 - try{
1.224 - EM.getTransaction().begin();
1.225 - EM.persist(work);
1.226 - EM.getTransaction().commit();
1.227 - EM.clear();
1.228 - } finally {
1.229 - if(EM.getTransaction().isActive())
1.230 - EM.getTransaction().rollback();
1.231 - }
1.232 - getParent().removeWindow(this);
1.233 - myApp.getWorkTable().requestRepaint();
1.234 - }
1.235 - }
1.236 -
1.237 -}