src/main/java/ru/indvdum/mywork/vaadin/EditDayDialog.java
changeset 16 2d6a668325f9
parent 14 1d1d4c94d251
equal deleted inserted replaced
15:739f329b9e1e 16:2d6a668325f9
     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 }