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