src/main/java/ru/indvdum/mywork/vaadin/EditDayDialog.java
author indvdum
Fri, 19 Aug 2011 16:23:26 +0300
changeset 9 6a02cfcc7460
child 11 e576975e68f7
permissions -rw-r--r--
Rework.
     1 package ru.indvdum.mywork.vaadin;
     2 
     3 import static ru.indvdum.mywork.MyWork.EM;
     4 
     5 import java.sql.Time;
     6 import java.text.SimpleDateFormat;
     7 import java.util.Calendar;
     8 import java.util.Date;
     9 
    10 import ru.indvdum.mywork.openjpa.model.Day;
    11 
    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;
    24 
    25 public class EditDayDialog extends Window implements ValueChangeListener, ClickListener {
    26 	
    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;
    34 
    35 	public EditDayDialog(MyWorkApplication myApp, EditState state, Day day) throws Exception {
    36 		super();
    37 		this.myApp = myApp;
    38 		this.state = state;
    39 		switch(state){
    40 		case CREATE:
    41 			setCaption("Creating new day");
    42 			if(day != null)
    43 				throw new Exception("Illegal argument: day must be null in creating state.");
    44 			day = new Day();
    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()));
    63 			day.setHours(8f);
    64 			this.day = day;
    65 			break;
    66 		case EDIT:
    67 			setCaption("Editing day");
    68 			if(day == null)
    69 				throw new Exception("Illegal argument: day must be not null in editing state.");
    70 			this.day = day;
    71 			break;
    72 		}
    73 		init();
    74 	}
    75 	
    76 	private void init(){
    77 		setModal(true);
    78 		setWidth("480px");
    79 		setHeight("300px");
    80 		VerticalLayout vl = new VerticalLayout();
    81 		vl.setSizeFull();
    82 		vl.setSpacing(true);
    83 		vl.setMargin(true);
    84 		setContent(vl);
    85 		
    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);
   103 		
   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);
   120 		
   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);
   137 		
   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);
   151 		
   152 		HorizontalLayout hlOk = new HorizontalLayout();
   153 		hlOk.setSizeFull();
   154 		Button okButton = new Button();
   155 		switch(state){
   156 		case CREATE:
   157 			okButton.setCaption("Create");
   158 			break;
   159 		case EDIT:
   160 			okButton.setCaption("Save");
   161 			break;
   162 		}
   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);
   168 	}
   169 
   170 	@Override
   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");
   177 		} else {
   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();
   184 			calEnd.setTime(end);
   185 			Calendar cal = Calendar.getInstance();
   186 			cal.setTime(date);
   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());
   199 		}
   200 	}
   201 
   202 	@Override
   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();
   208 		if (
   209 				value == null 
   210 				|| !(value instanceof Date) 
   211 				|| !(startValue instanceof Date) 
   212 				|| !(endValue instanceof Date)
   213 				|| !(hoursValue.toString().matches("^[0-9]+[\\.]{0,1}[0-9]*"))
   214 				) {
   215 			getWindow().showNotification("Invalid information entered");
   216 		} else {
   217 			Date date = (Date)value;
   218 			Date start = (Date)startValue;
   219 			Date end = (Date)endValue;
   220 			Float hours = Float.parseFloat(hoursValue.toString());
   221 			day.setDay(date);
   222 			day.setStartWork(new Time(start.getTime()));
   223 			day.setEndWork(new Time(end.getTime()));
   224 			day.setHours(hours);
   225 			try{
   226 				EM.getTransaction().begin();
   227 				EM.persist(day);
   228 				EM.getTransaction().commit();
   229 			} finally {
   230 				if(EM.getTransaction().isActive())
   231 					EM.getTransaction().rollback();
   232 			}
   233 			getParent().removeWindow(this);
   234 			myApp.getDayTable().requestRepaint();
   235 		}
   236 	}
   237 
   238 }