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