mywork-web/src/main/java/ru/indvdum/mywork/vaadin/EditDayDialog.java
changeset 16 2d6a668325f9
parent 14 1d1d4c94d251
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/mywork-web/src/main/java/ru/indvdum/mywork/vaadin/EditDayDialog.java	Wed Nov 23 17:52:25 2011 +0300
     1.3 @@ -0,0 +1,243 @@
     1.4 +package ru.indvdum.mywork.vaadin;
     1.5 +
     1.6 +import static ru.indvdum.mywork.MyWork.EM;
     1.7 +
     1.8 +import java.sql.Time;
     1.9 +import java.text.SimpleDateFormat;
    1.10 +import java.util.Calendar;
    1.11 +import java.util.Date;
    1.12 +
    1.13 +import ru.indvdum.mywork.openjpa.model.Day;
    1.14 +
    1.15 +import com.vaadin.data.Property.ValueChangeEvent;
    1.16 +import com.vaadin.data.Property.ValueChangeListener;
    1.17 +import com.vaadin.ui.Alignment;
    1.18 +import com.vaadin.ui.Button;
    1.19 +import com.vaadin.ui.HorizontalLayout;
    1.20 +import com.vaadin.ui.Label;
    1.21 +import com.vaadin.ui.PopupDateField;
    1.22 +import com.vaadin.ui.TextField;
    1.23 +import com.vaadin.ui.VerticalLayout;
    1.24 +import com.vaadin.ui.Window;
    1.25 +import com.vaadin.ui.Button.ClickEvent;
    1.26 +import com.vaadin.ui.Button.ClickListener;
    1.27 +
    1.28 +/**
    1.29 + * @author indvdum
    1.30 + * 23.08.2011 19:11:35
    1.31 + *
    1.32 + */
    1.33 +public class EditDayDialog extends Window implements ValueChangeListener, ClickListener {
    1.34 +	
    1.35 +	private MyWorkApplication myApp = null;
    1.36 +	private EditState state = null;
    1.37 +	private Day day = null;
    1.38 +	private PopupDateField dayStartTime = null;
    1.39 +	private PopupDateField dayEndTime = null;
    1.40 +	private PopupDateField dayDate = null;
    1.41 +	private TextField dayHours = null;
    1.42 +
    1.43 +	public EditDayDialog(MyWorkApplication myApp, Day day) throws Exception {
    1.44 +		super();
    1.45 +		this.myApp = myApp;
    1.46 +		if(day == null)
    1.47 +			state = EditState.CREATE;
    1.48 +		else
    1.49 +			state = EditState.EDIT;
    1.50 +		switch(state){
    1.51 +		case CREATE:
    1.52 +			setCaption("Creating new day");
    1.53 +			day = new Day();
    1.54 +			Calendar calDay = Calendar.getInstance();
    1.55 +			calDay.set(Calendar.HOUR_OF_DAY, 0);
    1.56 +			calDay.set(Calendar.MINUTE, 0);
    1.57 +			calDay.set(Calendar.SECOND, 0);
    1.58 +			calDay.set(Calendar.MILLISECOND, 0);
    1.59 +			day.setDay(calDay.getTime());
    1.60 +			Calendar calStart = Calendar.getInstance();
    1.61 +			calStart.set(Calendar.HOUR_OF_DAY, 9);
    1.62 +			calStart.set(Calendar.MINUTE, 0);
    1.63 +			calStart.set(Calendar.SECOND, 0);
    1.64 +			calStart.set(Calendar.MILLISECOND, 0);
    1.65 +			day.setStartWork(new Time(calStart.getTime().getTime()));
    1.66 +			Calendar calEnd = Calendar.getInstance();
    1.67 +			calEnd.set(Calendar.HOUR_OF_DAY, 18);
    1.68 +			calEnd.set(Calendar.MINUTE, 0);
    1.69 +			calEnd.set(Calendar.SECOND, 0);
    1.70 +			calEnd.set(Calendar.MILLISECOND, 0);
    1.71 +			day.setEndWork(new Time(calEnd.getTime().getTime()));
    1.72 +			day.setHours(8f);
    1.73 +			this.day = day;
    1.74 +			break;
    1.75 +		case EDIT:
    1.76 +			setCaption("Editing day");
    1.77 +			this.day = day;
    1.78 +			break;
    1.79 +		}
    1.80 +		init();
    1.81 +	}
    1.82 +	
    1.83 +	private void init(){
    1.84 +		setModal(true);
    1.85 +		setWidth("480px");
    1.86 +		setHeight("300px");
    1.87 +		VerticalLayout vl = new VerticalLayout();
    1.88 +		vl.setSizeFull();
    1.89 +		vl.setSpacing(true);
    1.90 +		vl.setMargin(true);
    1.91 +		setContent(vl);
    1.92 +		
    1.93 +		HorizontalLayout hlDay = new HorizontalLayout();
    1.94 +		hlDay.setWidth("100%");
    1.95 +		Label lblDay = new Label("Day:");
    1.96 +		lblDay.setWidth("100%");
    1.97 +		hlDay.addComponent(lblDay);
    1.98 +		hlDay.setExpandRatio(lblDay, 1f);
    1.99 +		dayDate = new PopupDateField();
   1.100 +		dayDate.setWidth("100%");
   1.101 +		dayDate.setInputPrompt("Enter date");
   1.102 +		dayDate.setResolution(PopupDateField.RESOLUTION_DAY);
   1.103 +		dayDate.setImmediate(true);
   1.104 +		dayDate.setValue(day.getDay());
   1.105 +		dayDate.addListener(this);
   1.106 +		dayDate.setDateFormat("dd.MM.yyyy");
   1.107 +		hlDay.addComponent(dayDate);
   1.108 +		hlDay.setExpandRatio(dayDate, 5f);
   1.109 +		vl.addComponent(hlDay);
   1.110 +		
   1.111 +		HorizontalLayout hlStart = new HorizontalLayout();
   1.112 +		hlStart.setWidth("100%");
   1.113 +		Label lblStart = new Label("Start time:");
   1.114 +		lblStart.setWidth("100%");
   1.115 +		hlStart.addComponent(lblStart);
   1.116 +		hlStart.setExpandRatio(lblStart, 1f);
   1.117 +		dayStartTime = new PopupDateField();
   1.118 +		dayStartTime.setWidth("100%");
   1.119 +		dayStartTime.setInputPrompt("Enter time");
   1.120 +		dayStartTime.setResolution(PopupDateField.RESOLUTION_MIN);
   1.121 +		dayStartTime.setImmediate(true);
   1.122 +		dayStartTime.setValue(day.getStartWork());
   1.123 +		dayStartTime.setDateFormat("HH:mm");
   1.124 +		hlStart.addComponent(dayStartTime);
   1.125 +		hlStart.setExpandRatio(dayStartTime, 5f);
   1.126 +		vl.addComponent(hlStart);
   1.127 +		
   1.128 +		HorizontalLayout hlEnd = new HorizontalLayout();
   1.129 +		hlEnd.setWidth("100%");
   1.130 +		Label lblEnd = new Label("End time:");
   1.131 +		lblEnd.setWidth("100%");
   1.132 +		hlEnd.addComponent(lblEnd);
   1.133 +		hlEnd.setExpandRatio(lblEnd, 1f);
   1.134 +		dayEndTime = new PopupDateField();
   1.135 +		dayEndTime.setWidth("100%");
   1.136 +		dayEndTime.setInputPrompt("Enter time");
   1.137 +		dayEndTime.setResolution(PopupDateField.RESOLUTION_MIN);
   1.138 +		dayEndTime.setImmediate(true);
   1.139 +		dayEndTime.setValue(day.getEndWork());
   1.140 +		dayEndTime.setDateFormat("HH:mm");
   1.141 +		hlEnd.addComponent(dayEndTime);
   1.142 +		hlEnd.setExpandRatio(dayEndTime, 5f);
   1.143 +		vl.addComponent(hlEnd);
   1.144 +		
   1.145 +		HorizontalLayout hlHours = new HorizontalLayout();
   1.146 +		hlHours.setWidth("100%");
   1.147 +		Label lblHours = new Label("Work hours count:");
   1.148 +		lblHours.setWidth("100%");
   1.149 +		hlHours.addComponent(lblHours);
   1.150 +		hlHours.setExpandRatio(lblHours, 1f);
   1.151 +		dayHours = new TextField();
   1.152 +		dayHours.setWidth("100%");
   1.153 +		dayHours.setValue(day.getHours());
   1.154 +		dayHours.setImmediate(true);
   1.155 +		hlHours.addComponent(dayHours);
   1.156 +		hlHours.setExpandRatio(dayHours, 5f);
   1.157 +		vl.addComponent(hlHours);
   1.158 +		
   1.159 +		HorizontalLayout hlOk = new HorizontalLayout();
   1.160 +		hlOk.setSizeFull();
   1.161 +		Button okButton = new Button();
   1.162 +		switch(state){
   1.163 +		case CREATE:
   1.164 +			okButton.setCaption("Create");
   1.165 +			break;
   1.166 +		case EDIT:
   1.167 +			okButton.setCaption("Save");
   1.168 +			break;
   1.169 +		}
   1.170 +		okButton.addListener((ClickListener)this);
   1.171 +		hlOk.addComponent(okButton);
   1.172 +		hlOk.setComponentAlignment(okButton, Alignment.BOTTOM_RIGHT);
   1.173 +		vl.addComponent(hlOk);
   1.174 +		vl.setExpandRatio(hlOk, 1f);
   1.175 +	}
   1.176 +
   1.177 +	@Override
   1.178 +	public void valueChange(ValueChangeEvent event) {
   1.179 +		Object value = event.getProperty().getValue();
   1.180 +		Object startValue = dayStartTime.getValue();
   1.181 +		Object endValue = dayEndTime.getValue();
   1.182 +		if (value == null || !(value instanceof Date) || !(startValue instanceof Date) || !(endValue instanceof Date)) {
   1.183 +			getWindow().showNotification("Invalid date entered");
   1.184 +		} else {
   1.185 +			Date date = (Date)value;
   1.186 +			Date start = (Date)startValue;
   1.187 +			Date end = (Date)endValue;
   1.188 +			Calendar calStart = Calendar.getInstance();
   1.189 +			calStart.setTime(start);
   1.190 +			Calendar calEnd = Calendar.getInstance();
   1.191 +			calEnd.setTime(end);
   1.192 +			Calendar cal = Calendar.getInstance();
   1.193 +			cal.setTime(date);
   1.194 +			calStart.set(Calendar.YEAR, cal.get(Calendar.YEAR));
   1.195 +			calStart.set(Calendar.MONTH, cal.get(Calendar.MONTH));
   1.196 +			calStart.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH));
   1.197 +			calStart.set(Calendar.SECOND, cal.get(Calendar.SECOND));
   1.198 +			calStart.set(Calendar.MILLISECOND, cal.get(Calendar.MILLISECOND));
   1.199 +			calEnd.set(Calendar.YEAR, cal.get(Calendar.YEAR));
   1.200 +			calEnd.set(Calendar.MONTH, cal.get(Calendar.MONTH));
   1.201 +			calEnd.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH));
   1.202 +			calEnd.set(Calendar.SECOND, cal.get(Calendar.SECOND));
   1.203 +			calEnd.set(Calendar.MILLISECOND, cal.get(Calendar.MILLISECOND));
   1.204 +			dayStartTime.setValue(calStart.getTime());
   1.205 +			dayEndTime.setValue(calEnd.getTime());
   1.206 +		}
   1.207 +	}
   1.208 +
   1.209 +	@Override
   1.210 +	public void buttonClick(ClickEvent event) {
   1.211 +		Object value = dayDate.getValue();
   1.212 +		Object startValue = dayStartTime.getValue();
   1.213 +		Object endValue = dayEndTime.getValue();
   1.214 +		Object hoursValue = dayHours.getValue();
   1.215 +		if (
   1.216 +				value == null 
   1.217 +				|| !(value instanceof Date) 
   1.218 +				|| !(startValue instanceof Date) 
   1.219 +				|| !(endValue instanceof Date)
   1.220 +				|| !(hoursValue.toString().matches("^[0-9]+[\\.]{0,1}[0-9]*"))
   1.221 +				) {
   1.222 +			getWindow().showNotification("Invalid information entered");
   1.223 +		} else {
   1.224 +			Date date = (Date)value;
   1.225 +			Date start = (Date)startValue;
   1.226 +			Date end = (Date)endValue;
   1.227 +			Float hours = Float.parseFloat(hoursValue.toString());
   1.228 +			day.setDay(date);
   1.229 +			day.setStartWork(new Time(start.getTime()));
   1.230 +			day.setEndWork(new Time(end.getTime()));
   1.231 +			day.setHours(hours);
   1.232 +			try{
   1.233 +				EM.getTransaction().begin();
   1.234 +				EM.persist(day);
   1.235 +				EM.getTransaction().commit();
   1.236 +				EM.clear();
   1.237 +			} finally {
   1.238 +				if(EM.getTransaction().isActive())
   1.239 +					EM.getTransaction().rollback();
   1.240 +			}
   1.241 +			getParent().removeWindow(this);
   1.242 +			myApp.getDayTable().requestRepaint();
   1.243 +		}
   1.244 +	}
   1.245 +
   1.246 +}