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