# HG changeset patch # User indvdum (gotoindvdum@gmail.com) # Date 1322059945 -10800 # Node ID 2d6a668325f9d78daf5a88e2ab68d85f6f3a8e6a # Parent 739f329b9e1e745082e3b6dcc44295f1fb8e7220 Separating projects diff -r 739f329b9e1e -r 2d6a668325f9 mywork-model/pom.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mywork-model/pom.xml Wed Nov 23 17:52:25 2011 +0300 @@ -0,0 +1,104 @@ + + + 4.0.0 + ru.indvdum.mywork + mywork-model + mywork-model + jar + mywork-model + + ru.indvdum.mywork + mywork-all + 0.0.1.0-SNAPSHOT + + + + + maven-compiler-plugin + ${maven-compiler-plugin.version} + + groovy-eclipse-compiler + nowarn + true + + + + org.codehaus.groovy + groovy-eclipse-compiler + ${groovy-eclipse-compiler.version} + + + + + org.codehaus.mojo + build-helper-maven-plugin + ${build-helper-maven-plugin.version} + + + add-source + generate-sources + + add-source + + + + src/main/groovy + src/test/groovy + + + + + + + org.codehaus.mojo + openjpa-maven-plugin + + **/model/**/*.class + true + true + + + + enhancer + process-classes + + enhance + + + + + + org.apache.openjpa + openjpa + ${openjpa.version} + + + + + + + + org.codehaus.groovy + groovy-all + ${groovy.version} + + + org.apache.openjpa + openjpa + ${openjpa.version} + + + commons-dbcp + commons-dbcp + ${commons-dbcp.version} + test + + + org.apache.derby + derby + ${derby.version} + test + + + diff -r 739f329b9e1e -r 2d6a668325f9 mywork-model/src/main/resources/META-INF/persistence.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mywork-model/src/main/resources/META-INF/persistence.xml Wed Nov 23 17:52:25 2011 +0300 @@ -0,0 +1,18 @@ + + + + org.apache.openjpa.persistence.PersistenceProviderImpl + jdbc/MyworkDataSource + + + + + + + + + + + + diff -r 739f329b9e1e -r 2d6a668325f9 mywork-model/src/main/resources/jndi.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mywork-model/src/main/resources/jndi.properties Wed Nov 23 17:52:25 2011 +0300 @@ -0,0 +1,1 @@ +java.naming.factory.initial=ru.indvdum.logisticssolution.jndi.SimpleContextFactory \ No newline at end of file diff -r 739f329b9e1e -r 2d6a668325f9 mywork-web/pom.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mywork-web/pom.xml Wed Nov 23 17:52:25 2011 +0300 @@ -0,0 +1,102 @@ + + 4.0.0 + ru.indvdum.mywork + mywork-web + 0.0.1.0-SNAPSHOT + My Work WEB + + ru.indvdum.mywork + mywork-all + 0.0.1.0-SNAPSHOT + + + 6.1.26 + 6.5.0 + 2.1.1 + 10.1.0.5.0 + + + + + org.apache.maven.plugins + maven-resources-plugin + ${maven-resources-plugin.version} + + UTF-8 + + + + maven-source-plugin + + true + + + + generate-sources + + jar + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.2 + + + + exec + + + + + java + + -classpath + + ru.indvdum.mywork.MyWork + + + + + + + + org.mortbay.jetty + jetty + ${jetty.version} + + + com.vaadin + vaadin + ${vaadin.version} + + + com.vaadin.addon + jpacontainer-addon-agpl-3.0 + 1.2.0 + + + javax.persistence + persistence-api + + + + + com.google.gwt + gwt-user + ${gwt.version} + + + + org.apache.openjpa + openjpa + ${openjpa.version} + + + diff -r 739f329b9e1e -r 2d6a668325f9 mywork-web/src/main/java/ru/indvdum/mywork/MyWork.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mywork-web/src/main/java/ru/indvdum/mywork/MyWork.java Wed Nov 23 17:52:25 2011 +0300 @@ -0,0 +1,78 @@ +package ru.indvdum.mywork; + +import java.util.Date; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; + +import org.mortbay.component.LifeCycle; +import org.mortbay.component.LifeCycle.Listener; +import org.mortbay.jetty.Connector; +import org.mortbay.jetty.Server; +import org.mortbay.jetty.servlet.Context; +import org.mortbay.jetty.servlet.ServletHolder; + +import com.vaadin.terminal.gwt.server.ApplicationServlet; + +/** + * @author indvdum + * 12.08.2011 17:31:37 + * + */ +public class MyWork { + public static EntityManagerFactory EMF = null; + public static EntityManager EM = null; + + /** + * @param args + * @throws Exception + */ + public static void main(String[] args) throws Exception { + Server server = new Server(); + Connector connector = new org.mortbay.jetty.nio.SelectChannelConnector(); + connector.setPort(8080); + connector.setMaxIdleTime(720000); + server.addConnector(connector); + + Context root = new Context(server, "/", Context.SESSIONS); + ServletHolder vaadinServlet = new ServletHolder(new ApplicationServlet()); + vaadinServlet.setInitParameter("application", "ru.indvdum.mywork.vaadin.MyWorkApplication"); + root.addServlet(vaadinServlet, "/*"); + + server.addLifeCycleListener(new Listener(){ + + @Override + public void lifeCycleFailure(LifeCycle event, Throwable cause) { + + } + + @Override + public void lifeCycleStarted(LifeCycle event) { + EMF = Persistence.createEntityManagerFactory("mywork"); + EM = EMF.createEntityManager(); + } + + @Override + public void lifeCycleStarting(LifeCycle event) { + + } + + @Override + public void lifeCycleStopped(LifeCycle event) { + + } + + @Override + public void lifeCycleStopping(LifeCycle event) { + EM.close(); + EMF.close(); + } + + }); + + server.start(); + System.out.println("Jetty server started at " + new Date()); + } + +} diff -r 739f329b9e1e -r 2d6a668325f9 mywork-web/src/main/java/ru/indvdum/mywork/openjpa/model/Day.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mywork-web/src/main/java/ru/indvdum/mywork/openjpa/model/Day.java Wed Nov 23 17:52:25 2011 +0300 @@ -0,0 +1,119 @@ +package ru.indvdum.mywork.openjpa.model; + +import java.sql.Time; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * @author indvdum + * 12.08.2011 17:31:00 + * + */ +@Entity +@Table(name = "DAYS") +public class Day implements IDatabaseObject { + + private static final long serialVersionUID = 1471705339524132968L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID", nullable = false) + private Integer id = null; + + @Column(name = "DAY") + private Date day = null; + + @Column(name = "STARTWORK") + private Time startWork = null; + + @Column(name = "ENDWORK") + private Time endWork = null; + + @Column(name = "HOURS") + private Float hours = null; + + public Day(){ + + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (!(obj instanceof Day)) + return false; + final Day other = (Day) obj; + return (getId() == other.getId() || (getId() != null && getId().equals(other.getId()))); + } + + @Override + public int hashCode() { + if(getId() != null && getId() != 0) + return getId().hashCode(); + else + return super.hashCode(); + } + + @Override + public String toString() { + return getDateFormatter().format(getDay()); + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getDay() { + return day; + } + + public String getFormattedDay() { + return toString(); + } + + public void setDay(Date day) { + this.day = day; + } + + public Time getStartWork() { + return startWork; + } + + public void setStartWork(Time startWork) { + this.startWork = startWork; + } + + public Time getEndWork() { + return endWork; + } + + public void setEndWork(Time endWork) { + this.endWork = endWork; + } + + public Float getHours() { + return hours; + } + + public void setHours(Float hours) { + this.hours = hours; + } + + protected DateFormat getDateFormatter() { + return new SimpleDateFormat("dd.MM.yyyy"); + } +} diff -r 739f329b9e1e -r 2d6a668325f9 mywork-web/src/main/java/ru/indvdum/mywork/openjpa/model/IDatabaseObject.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mywork-web/src/main/java/ru/indvdum/mywork/openjpa/model/IDatabaseObject.java Wed Nov 23 17:52:25 2011 +0300 @@ -0,0 +1,12 @@ +package ru.indvdum.mywork.openjpa.model; + +import java.io.Serializable; + +/** + * @author indvdum + * 12.08.2011 17:31:11 + * + */ +public interface IDatabaseObject extends Serializable { + +} diff -r 739f329b9e1e -r 2d6a668325f9 mywork-web/src/main/java/ru/indvdum/mywork/openjpa/model/Task.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mywork-web/src/main/java/ru/indvdum/mywork/openjpa/model/Task.java Wed Nov 23 17:52:25 2011 +0300 @@ -0,0 +1,84 @@ +package ru.indvdum.mywork.openjpa.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * @author indvdum + * 16.08.2011 9:02:32 + * + */ +@Entity +@Table(name = "TASKS") +public class Task implements IDatabaseObject { + + private static final long serialVersionUID = -4457948503094306717L; + + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE) + @Column(name = "ID", nullable = false) + private Integer id = null; + + @Column(name = "NAME") + private String name = null; + + @Column(name = "DESCRIPTION") + private String description = null; + + public Task(){ + + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (!(obj instanceof Task)) + return false; + final Task other = (Task) obj; + return (getId() == other.getId() || (getId() != null && getId().equals(other.getId()))); + } + + @Override + public int hashCode() { + if(getId() != null && getId() != 0) + return getId().hashCode(); + else + return super.hashCode(); + } + + @Override + public String toString() { + return getName(); + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name != null ? name : ""; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description != null ? description : ""; + } + + public void setDescription(String description) { + this.description = description; + } +} diff -r 739f329b9e1e -r 2d6a668325f9 mywork-web/src/main/java/ru/indvdum/mywork/openjpa/model/Work.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mywork-web/src/main/java/ru/indvdum/mywork/openjpa/model/Work.java Wed Nov 23 17:52:25 2011 +0300 @@ -0,0 +1,84 @@ +package ru.indvdum.mywork.openjpa.model; + +import javax.persistence.Column; +import javax.persistence.EmbeddedId; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.ManyToOne; +import javax.persistence.MapsId; +import javax.persistence.Table; + +/** + * @author indvdum + * 16.08.2011 13:55:51 + * + */ +@Entity +@Table(name = "WORK") +public class Work implements IDatabaseObject { + + private static final long serialVersionUID = 7138260708537798813L; + + @EmbeddedId + private WorkId id = null; + + @Column(name = "HOURS") + private Float hours = null; + + @Column(name = "RESULT") + private String result = null; + + @MapsId("dayId") + @ManyToOne(fetch = FetchType.EAGER) + private Day day = null; + + @MapsId("taskId") + @ManyToOne(fetch = FetchType.EAGER) + private Task task = null; + + public Work(){ + + } + + public Float getHours() { + return hours; + } + + public void setHours(Float hours) { + this.hours = hours; + } + + public String getResult() { + return result; + } + + public void setResult(String result) { + this.result = result; + } + + public Day getDay() { + return day; + } + + public void setDay(Day day) { + this.day = day; + } + + public Task getTask() { + return task; + } + + public void setTask(Task task) { + this.task = task; + } + + public WorkId getId() { + return id; + } + + public void setId(WorkId id) { + this.id = id; + } + +} diff -r 739f329b9e1e -r 2d6a668325f9 mywork-web/src/main/java/ru/indvdum/mywork/openjpa/model/WorkId.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mywork-web/src/main/java/ru/indvdum/mywork/openjpa/model/WorkId.java Wed Nov 23 17:52:25 2011 +0300 @@ -0,0 +1,42 @@ +package ru.indvdum.mywork.openjpa.model; + +import javax.persistence.Embeddable; + +/** + * @author indvdum + * 17.08.2011 15:00:35 + * + */ +@Embeddable +public class WorkId{ + + public Integer dayId; + public Integer taskId; + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (!(obj instanceof WorkId)) + return false; + final WorkId other = (WorkId) obj; + return ( + this.dayId == other.dayId + && this.taskId == other.taskId + || ( + this.dayId != null + && this.dayId.equals(other.dayId) + && this.taskId != null + && this.taskId.equals(other.taskId) + ) + ); + } + + @Override + public int hashCode() { + return dayId ^ taskId; + } + +} diff -r 739f329b9e1e -r 2d6a668325f9 mywork-web/src/main/java/ru/indvdum/mywork/vaadin/EditDayDialog.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mywork-web/src/main/java/ru/indvdum/mywork/vaadin/EditDayDialog.java Wed Nov 23 17:52:25 2011 +0300 @@ -0,0 +1,243 @@ +package ru.indvdum.mywork.vaadin; + +import static ru.indvdum.mywork.MyWork.EM; + +import java.sql.Time; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +import ru.indvdum.mywork.openjpa.model.Day; + +import com.vaadin.data.Property.ValueChangeEvent; +import com.vaadin.data.Property.ValueChangeListener; +import com.vaadin.ui.Alignment; +import com.vaadin.ui.Button; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Label; +import com.vaadin.ui.PopupDateField; +import com.vaadin.ui.TextField; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.Window; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Button.ClickListener; + +/** + * @author indvdum + * 23.08.2011 19:11:35 + * + */ +public class EditDayDialog extends Window implements ValueChangeListener, ClickListener { + + private MyWorkApplication myApp = null; + private EditState state = null; + private Day day = null; + private PopupDateField dayStartTime = null; + private PopupDateField dayEndTime = null; + private PopupDateField dayDate = null; + private TextField dayHours = null; + + public EditDayDialog(MyWorkApplication myApp, Day day) throws Exception { + super(); + this.myApp = myApp; + if(day == null) + state = EditState.CREATE; + else + state = EditState.EDIT; + switch(state){ + case CREATE: + setCaption("Creating new day"); + day = new Day(); + Calendar calDay = Calendar.getInstance(); + calDay.set(Calendar.HOUR_OF_DAY, 0); + calDay.set(Calendar.MINUTE, 0); + calDay.set(Calendar.SECOND, 0); + calDay.set(Calendar.MILLISECOND, 0); + day.setDay(calDay.getTime()); + Calendar calStart = Calendar.getInstance(); + calStart.set(Calendar.HOUR_OF_DAY, 9); + calStart.set(Calendar.MINUTE, 0); + calStart.set(Calendar.SECOND, 0); + calStart.set(Calendar.MILLISECOND, 0); + day.setStartWork(new Time(calStart.getTime().getTime())); + Calendar calEnd = Calendar.getInstance(); + calEnd.set(Calendar.HOUR_OF_DAY, 18); + calEnd.set(Calendar.MINUTE, 0); + calEnd.set(Calendar.SECOND, 0); + calEnd.set(Calendar.MILLISECOND, 0); + day.setEndWork(new Time(calEnd.getTime().getTime())); + day.setHours(8f); + this.day = day; + break; + case EDIT: + setCaption("Editing day"); + this.day = day; + break; + } + init(); + } + + private void init(){ + setModal(true); + setWidth("480px"); + setHeight("300px"); + VerticalLayout vl = new VerticalLayout(); + vl.setSizeFull(); + vl.setSpacing(true); + vl.setMargin(true); + setContent(vl); + + HorizontalLayout hlDay = new HorizontalLayout(); + hlDay.setWidth("100%"); + Label lblDay = new Label("Day:"); + lblDay.setWidth("100%"); + hlDay.addComponent(lblDay); + hlDay.setExpandRatio(lblDay, 1f); + dayDate = new PopupDateField(); + dayDate.setWidth("100%"); + dayDate.setInputPrompt("Enter date"); + dayDate.setResolution(PopupDateField.RESOLUTION_DAY); + dayDate.setImmediate(true); + dayDate.setValue(day.getDay()); + dayDate.addListener(this); + dayDate.setDateFormat("dd.MM.yyyy"); + hlDay.addComponent(dayDate); + hlDay.setExpandRatio(dayDate, 5f); + vl.addComponent(hlDay); + + HorizontalLayout hlStart = new HorizontalLayout(); + hlStart.setWidth("100%"); + Label lblStart = new Label("Start time:"); + lblStart.setWidth("100%"); + hlStart.addComponent(lblStart); + hlStart.setExpandRatio(lblStart, 1f); + dayStartTime = new PopupDateField(); + dayStartTime.setWidth("100%"); + dayStartTime.setInputPrompt("Enter time"); + dayStartTime.setResolution(PopupDateField.RESOLUTION_MIN); + dayStartTime.setImmediate(true); + dayStartTime.setValue(day.getStartWork()); + dayStartTime.setDateFormat("HH:mm"); + hlStart.addComponent(dayStartTime); + hlStart.setExpandRatio(dayStartTime, 5f); + vl.addComponent(hlStart); + + HorizontalLayout hlEnd = new HorizontalLayout(); + hlEnd.setWidth("100%"); + Label lblEnd = new Label("End time:"); + lblEnd.setWidth("100%"); + hlEnd.addComponent(lblEnd); + hlEnd.setExpandRatio(lblEnd, 1f); + dayEndTime = new PopupDateField(); + dayEndTime.setWidth("100%"); + dayEndTime.setInputPrompt("Enter time"); + dayEndTime.setResolution(PopupDateField.RESOLUTION_MIN); + dayEndTime.setImmediate(true); + dayEndTime.setValue(day.getEndWork()); + dayEndTime.setDateFormat("HH:mm"); + hlEnd.addComponent(dayEndTime); + hlEnd.setExpandRatio(dayEndTime, 5f); + vl.addComponent(hlEnd); + + HorizontalLayout hlHours = new HorizontalLayout(); + hlHours.setWidth("100%"); + Label lblHours = new Label("Work hours count:"); + lblHours.setWidth("100%"); + hlHours.addComponent(lblHours); + hlHours.setExpandRatio(lblHours, 1f); + dayHours = new TextField(); + dayHours.setWidth("100%"); + dayHours.setValue(day.getHours()); + dayHours.setImmediate(true); + hlHours.addComponent(dayHours); + hlHours.setExpandRatio(dayHours, 5f); + vl.addComponent(hlHours); + + HorizontalLayout hlOk = new HorizontalLayout(); + hlOk.setSizeFull(); + Button okButton = new Button(); + switch(state){ + case CREATE: + okButton.setCaption("Create"); + break; + case EDIT: + okButton.setCaption("Save"); + break; + } + okButton.addListener((ClickListener)this); + hlOk.addComponent(okButton); + hlOk.setComponentAlignment(okButton, Alignment.BOTTOM_RIGHT); + vl.addComponent(hlOk); + vl.setExpandRatio(hlOk, 1f); + } + + @Override + public void valueChange(ValueChangeEvent event) { + Object value = event.getProperty().getValue(); + Object startValue = dayStartTime.getValue(); + Object endValue = dayEndTime.getValue(); + if (value == null || !(value instanceof Date) || !(startValue instanceof Date) || !(endValue instanceof Date)) { + getWindow().showNotification("Invalid date entered"); + } else { + Date date = (Date)value; + Date start = (Date)startValue; + Date end = (Date)endValue; + Calendar calStart = Calendar.getInstance(); + calStart.setTime(start); + Calendar calEnd = Calendar.getInstance(); + calEnd.setTime(end); + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + calStart.set(Calendar.YEAR, cal.get(Calendar.YEAR)); + calStart.set(Calendar.MONTH, cal.get(Calendar.MONTH)); + calStart.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH)); + calStart.set(Calendar.SECOND, cal.get(Calendar.SECOND)); + calStart.set(Calendar.MILLISECOND, cal.get(Calendar.MILLISECOND)); + calEnd.set(Calendar.YEAR, cal.get(Calendar.YEAR)); + calEnd.set(Calendar.MONTH, cal.get(Calendar.MONTH)); + calEnd.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH)); + calEnd.set(Calendar.SECOND, cal.get(Calendar.SECOND)); + calEnd.set(Calendar.MILLISECOND, cal.get(Calendar.MILLISECOND)); + dayStartTime.setValue(calStart.getTime()); + dayEndTime.setValue(calEnd.getTime()); + } + } + + @Override + public void buttonClick(ClickEvent event) { + Object value = dayDate.getValue(); + Object startValue = dayStartTime.getValue(); + Object endValue = dayEndTime.getValue(); + Object hoursValue = dayHours.getValue(); + if ( + value == null + || !(value instanceof Date) + || !(startValue instanceof Date) + || !(endValue instanceof Date) + || !(hoursValue.toString().matches("^[0-9]+[\\.]{0,1}[0-9]*")) + ) { + getWindow().showNotification("Invalid information entered"); + } else { + Date date = (Date)value; + Date start = (Date)startValue; + Date end = (Date)endValue; + Float hours = Float.parseFloat(hoursValue.toString()); + day.setDay(date); + day.setStartWork(new Time(start.getTime())); + day.setEndWork(new Time(end.getTime())); + day.setHours(hours); + try{ + EM.getTransaction().begin(); + EM.persist(day); + EM.getTransaction().commit(); + EM.clear(); + } finally { + if(EM.getTransaction().isActive()) + EM.getTransaction().rollback(); + } + getParent().removeWindow(this); + myApp.getDayTable().requestRepaint(); + } + } + +} diff -r 739f329b9e1e -r 2d6a668325f9 mywork-web/src/main/java/ru/indvdum/mywork/vaadin/EditState.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mywork-web/src/main/java/ru/indvdum/mywork/vaadin/EditState.java Wed Nov 23 17:52:25 2011 +0300 @@ -0,0 +1,11 @@ +package ru.indvdum.mywork.vaadin; + +/** + * @author indvdum + * 23.08.2011 19:11:44 + * + */ +public enum EditState { + CREATE, + EDIT, +} diff -r 739f329b9e1e -r 2d6a668325f9 mywork-web/src/main/java/ru/indvdum/mywork/vaadin/EditTaskDialog.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mywork-web/src/main/java/ru/indvdum/mywork/vaadin/EditTaskDialog.java Wed Nov 23 17:52:25 2011 +0300 @@ -0,0 +1,116 @@ +package ru.indvdum.mywork.vaadin; + +import static ru.indvdum.mywork.MyWork.EM; +import ru.indvdum.mywork.openjpa.model.Task; + +import com.vaadin.ui.Alignment; +import com.vaadin.ui.Button; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Label; +import com.vaadin.ui.RichTextArea; +import com.vaadin.ui.TextField; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.Window; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Button.ClickListener; + +/** + * @author indvdum + * 23.08.2011 19:11:50 + * + */ +public class EditTaskDialog extends Window implements ClickListener { + + private MyWorkApplication myApp = null; + private EditState state = null; + private Task task = null; + private TextField taskName = null; + private RichTextArea taskDescription = null; + + public EditTaskDialog(MyWorkApplication myApp, Task task) throws Exception { + super(); + this.myApp = myApp; + if(task == null) + state = EditState.CREATE; + else + state = EditState.EDIT; + switch(state){ + case CREATE: + setCaption("Creating new task"); + task = new Task(); + task.setName(""); + task.setDescription(""); + this.task = task; + break; + case EDIT: + setCaption("Editing task"); + this.task = task; + break; + } + init(); + } + + private void init(){ + setModal(true); + setWidth("640px"); + setHeight("480px"); + VerticalLayout vl = new VerticalLayout(); + vl.setSizeFull(); + vl.setSpacing(true); + vl.setMargin(true); + setContent(vl); + + HorizontalLayout hlName = new HorizontalLayout(); + hlName.setWidth("100%"); + Label lblName = new Label("Name:"); + lblName.setWidth("100%"); + hlName.addComponent(lblName); + hlName.setExpandRatio(lblName, 1f); + taskName = new TextField(); + taskName.setWidth("100%"); + taskName.setValue(task.getName()); + hlName.addComponent(taskName); + hlName.setExpandRatio(taskName, 5f); + vl.addComponent(hlName); + + taskDescription = new RichTextArea("Description"); + taskDescription.setValue(task.getDescription()); + taskDescription.setSizeFull(); + vl.addComponent(taskDescription); + vl.setExpandRatio(taskDescription, 1f); + + HorizontalLayout hlOk = new HorizontalLayout(); + hlOk.setWidth("100%"); + Button okButton = new Button(); + switch(state){ + case CREATE: + okButton.setCaption("Create"); + break; + case EDIT: + okButton.setCaption("Save"); + break; + } + okButton.addListener((ClickListener)this); + hlOk.addComponent(okButton); + hlOk.setComponentAlignment(okButton, Alignment.MIDDLE_RIGHT); + vl.addComponent(hlOk); + } + + @Override + public void buttonClick(ClickEvent event) { + task.setName(taskName.getValue().toString()); + task.setDescription(taskDescription.getValue().toString()); + try{ + EM.getTransaction().begin(); + EM.persist(task); + EM.getTransaction().commit(); + EM.clear(); + } finally { + if(EM.getTransaction().isActive()) + EM.getTransaction().rollback(); + } + getParent().removeWindow(this); + myApp.getTaskTable().requestRepaint(); + } + +} diff -r 739f329b9e1e -r 2d6a668325f9 mywork-web/src/main/java/ru/indvdum/mywork/vaadin/EditWorkDialog.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mywork-web/src/main/java/ru/indvdum/mywork/vaadin/EditWorkDialog.java Wed Nov 23 17:52:25 2011 +0300 @@ -0,0 +1,234 @@ +package ru.indvdum.mywork.vaadin; + +import static ru.indvdum.mywork.MyWork.EM; + +import java.util.Calendar; +import java.util.List; + +import javax.persistence.Query; + +import ru.indvdum.mywork.openjpa.model.Day; +import ru.indvdum.mywork.openjpa.model.Task; +import ru.indvdum.mywork.openjpa.model.Work; + +import com.vaadin.data.Property.ValueChangeEvent; +import com.vaadin.data.Property.ValueChangeListener; +import com.vaadin.ui.Alignment; +import com.vaadin.ui.Button; +import com.vaadin.ui.ComboBox; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Label; +import com.vaadin.ui.RichTextArea; +import com.vaadin.ui.TextField; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.Window; +import com.vaadin.ui.AbstractSelect.Filtering; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Button.ClickListener; + +/** + * @author indvdum + * 23.08.2011 19:11:56 + * + */ +public class EditWorkDialog extends Window implements ClickListener { + + private MyWorkApplication myApp = null; + private EditState state = null; + private Work work = null; + private ComboBox workDay = null; + private ComboBox workTask = null; + private TextField workHours = null; + private RichTextArea workResult = null; + + public EditWorkDialog(MyWorkApplication myApp, Work work) throws Exception { + super(); + this.myApp = myApp; + if(work == null) + state = EditState.CREATE; + else + state = EditState.EDIT; + switch(state){ + case CREATE: + setCaption("Creating new work"); + work = new Work(); + work.setHours(0f); + work.setResult(""); + this.work = work; + break; + case EDIT: + setCaption("Editing work"); + this.work = work; + break; + } + init(); + } + + private void init(){ + setModal(true); + setWidth("640px"); + setHeight("480px"); + VerticalLayout vl = new VerticalLayout(); + vl.setSizeFull(); + vl.setSpacing(true); + vl.setMargin(true); + setContent(vl); + + HorizontalLayout hlDay = new HorizontalLayout(); + hlDay.setWidth("100%"); + Label lblDay = new Label("Day:"); + lblDay.setWidth("100%"); + hlDay.addComponent(lblDay); + hlDay.setExpandRatio(lblDay, 1f); + workDay = new ComboBox(); + workDay.setWidth("100%"); + workDay.setImmediate(true); + workDay.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS); + updateDays("select d from " + Day.class.getName() + " d order by d.day"); + workDay.addListener(new ValueChangeListener(){ + + @Override + public void valueChange(ValueChangeEvent event) { + Day day = (Day)event.getProperty().getValue(); + if(day == null) + updateTasks("select t from " + Task.class.getName() + " t order by t.id desc"); + else + updateTasks("select t from " + Task.class.getName() + " t where t.id not in (select w.task.id from " + Work.class.getName() + " w where w.day.id = " + day.getId() + ") order by t.id desc"); + } + + }); + hlDay.addComponent(workDay); + hlDay.setExpandRatio(workDay, 5f); + vl.addComponent(hlDay); + + HorizontalLayout hlTask = new HorizontalLayout(); + hlTask.setWidth("100%"); + Label lblStart = new Label("Task:"); + lblStart.setWidth("100%"); + hlTask.addComponent(lblStart); + hlTask.setExpandRatio(lblStart, 1f); + workTask = new ComboBox(); + workTask.setWidth("100%"); + workTask.setImmediate(true); + workTask.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS); + Day day = (Day)workDay.getValue(); + if(day == null) + updateTasks("select t from " + Task.class.getName() + " t order by t.id desc"); + else + updateTasks("select t from " + Task.class.getName() + " t where t.id not in (select w.task.id from " + Work.class.getName() + " w where w.day.id = " + day.getId() + ") order by t.id desc"); + workTask.addListener(new ValueChangeListener(){ + + @Override + public void valueChange(ValueChangeEvent event) { + Task task = (Task)event.getProperty().getValue(); + if(task == null) + updateDays("select d from " + Day.class.getName() + " d order by d.day"); + else + updateDays("select d from " + Day.class.getName() + " d where d.id not in (select w.day.id from " + Work.class.getName() + " w where w.task.id = " + task.getId() + ") order by d.day"); + } + + }); + hlTask.addComponent(workTask); + hlTask.setExpandRatio(workTask, 5f); + vl.addComponent(hlTask); + + HorizontalLayout hlHours = new HorizontalLayout(); + hlHours.setWidth("100%"); + Label lblHours = new Label("Hours:"); + lblHours.setWidth("100%"); + hlHours.addComponent(lblHours); + hlHours.setExpandRatio(lblHours, 1f); + workHours = new TextField(); + workHours.setWidth("100%"); + workHours.setValue(work.getHours()); + workHours.setImmediate(true); + hlHours.addComponent(workHours); + hlHours.setExpandRatio(workHours, 5f); + vl.addComponent(hlHours); + + workResult = new RichTextArea("Result"); + workResult.setValue(work.getResult()); + workResult.setSizeFull(); + vl.addComponent(workResult); + vl.setExpandRatio(workResult, 5f); + + HorizontalLayout hlOk = new HorizontalLayout(); + hlOk.setWidth("100%"); + Button okButton = new Button(); + switch(state){ + case CREATE: + okButton.setCaption("Create"); + break; + case EDIT: + okButton.setCaption("Save"); + break; + } + okButton.addListener((ClickListener)this); + hlOk.addComponent(okButton); + hlOk.setComponentAlignment(okButton, Alignment.MIDDLE_RIGHT); + vl.addComponent(hlOk); + } + + private void updateDays(String jpql){ + if(workTask != null && workTask.getValue() != null && workDay != null && workDay.getValue() != null) + return; + workDay.removeAllItems(); + Query query = EM.createQuery(jpql); + List list = query.getResultList(); + for(Day day: (List)list){ + workDay.addItem(day); + Calendar currCal = Calendar.getInstance(); + currCal.set(Calendar.HOUR_OF_DAY, 0); + currCal.set(Calendar.MINUTE, 0); + currCal.set(Calendar.SECOND, 0); + currCal.set(Calendar.MILLISECOND, 0); + if(day.getDay().equals(currCal.getTime())) + workDay.select(day); + } + } + + private void updateTasks(String jpql){ + if(workTask != null && workTask.getValue() != null && workDay != null && workDay.getValue() != null) + return; + workTask.removeAllItems(); + Query query = EM.createQuery(jpql); + List list = query.getResultList(); + for(Task task: (List)list) + workTask.addItem(task); + } + + @Override + public void buttonClick(ClickEvent event) { + Object dayObj = workDay.getValue(); + Object taskObj = workTask.getValue(); + Object hoursObj = workHours.getValue(); + String result = workResult.getValue().toString(); + if ( + !(dayObj instanceof Day) + || !(taskObj instanceof Task) + || !(hoursObj.toString().matches("^[0-9]+[\\.]{0,1}[0-9]*")) + ) { + getWindow().showNotification("Invalid information entered"); + } else { + Day day = (Day)dayObj; + Task task = (Task)taskObj; + Float hours = Float.parseFloat(hoursObj.toString()); + work.setDay(day); + work.setTask(task); + work.setHours(hours); + work.setResult(result); + try{ + EM.getTransaction().begin(); + EM.persist(work); + EM.getTransaction().commit(); + EM.clear(); + } finally { + if(EM.getTransaction().isActive()) + EM.getTransaction().rollback(); + } + getParent().removeWindow(this); + myApp.getWorkTable().requestRepaint(); + } + } + +} diff -r 739f329b9e1e -r 2d6a668325f9 mywork-web/src/main/java/ru/indvdum/mywork/vaadin/MyWorkApplication.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mywork-web/src/main/java/ru/indvdum/mywork/vaadin/MyWorkApplication.java Wed Nov 23 17:52:25 2011 +0300 @@ -0,0 +1,231 @@ +package ru.indvdum.mywork.vaadin; + +import static ru.indvdum.mywork.MyWork.EM; + +import java.util.List; + +import javax.persistence.Query; + +import ru.indvdum.mywork.openjpa.model.Day; +import ru.indvdum.mywork.openjpa.model.Task; +import ru.indvdum.mywork.openjpa.model.Work; + +import com.vaadin.Application; +import com.vaadin.addon.jpacontainer.EntityContainer; +import com.vaadin.addon.jpacontainer.EntityProvider; +import com.vaadin.addon.jpacontainer.HierarchicalEntityContainer; +import com.vaadin.addon.jpacontainer.JPAContainer; +import com.vaadin.addon.jpacontainer.provider.BatchableLocalEntityProvider; +import com.vaadin.addon.jpacontainer.provider.CachingBatchableLocalEntityProvider; +import com.vaadin.addon.jpacontainer.provider.CachingLocalEntityProvider; +import com.vaadin.addon.jpacontainer.provider.CachingMutableLocalEntityProvider; +import com.vaadin.addon.jpacontainer.provider.LocalEntityProvider; +import com.vaadin.ui.Alignment; +import com.vaadin.ui.Button; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.MenuBar; +import com.vaadin.ui.TabSheet; +import com.vaadin.ui.Table; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.Window; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Button.ClickListener; +import com.vaadin.ui.MenuBar.Command; +import com.vaadin.ui.MenuBar.MenuItem; + +/** + * @author indvdum + * 12.08.2011 17:31:53 + * + */ +public class MyWorkApplication extends Application { + + private MyWorkApplication thisObject = this; + private Table dayTable = null; + private Table taskTable = null; + private Table workTable = null; + + private Command newDayCommand = new Command() { + public void menuSelected(MenuItem selectedItem) { + EditDayDialog dialog = null; + try { + dialog = new EditDayDialog(thisObject, null); + } catch (Exception e) { + e.printStackTrace(); + } + getMainWindow().addWindow(dialog); + } + }; + private Command newTaskCommand = new Command() { + public void menuSelected(MenuItem selectedItem) { + EditTaskDialog dialog = null; + try { + dialog = new EditTaskDialog(thisObject, null); + } catch (Exception e) { + e.printStackTrace(); + } + getMainWindow().addWindow(dialog); + } + }; + private Command newWorkCommand = new Command() { + public void menuSelected(MenuItem selectedItem) { + EditWorkDialog dialog = null; + try { + dialog = new EditWorkDialog(thisObject, null); + } catch (Exception e) { + e.printStackTrace(); + } + getMainWindow().addWindow(dialog); + } + }; + private Command editDayCommand = new Command() { + public void menuSelected(MenuItem selectedItem) { + EditDayDialog dialog = null; + Day day = EM.find(Day.class, dayTable.getValue()); + if(day == null) + return; + try { + dialog = new EditDayDialog(thisObject, day); + } catch (Exception e) { + e.printStackTrace(); + } + getMainWindow().addWindow(dialog); + } + }; + private Command editTaskCommand = new Command() { + public void menuSelected(MenuItem selectedItem) { + EditTaskDialog dialog = null; + Task task = EM.find(Task.class, taskTable.getValue()); + if(task == null) + return; + try { + dialog = new EditTaskDialog(thisObject, task); + } catch (Exception e) { + e.printStackTrace(); + } + getMainWindow().addWindow(dialog); + } + }; + private Command editWorkCommand = new Command() { + public void menuSelected(MenuItem selectedItem) { + EditWorkDialog dialog = null; + Work work = EM.find(Work.class, workTable.getValue()); + if(work == null) + return; + try { + dialog = new EditWorkDialog(thisObject, work); + } catch (Exception e) { + e.printStackTrace(); + } + getMainWindow().addWindow(dialog); + } + }; + + @Override + public void init() { + Window window = new Window(); + setMainWindow(window); + + TabSheet tabSheet = new TabSheet(); + tabSheet.setSizeFull(); + window.setContent(tabSheet); + + VerticalLayout vlMain = new VerticalLayout(); + vlMain.setSizeFull(); + vlMain.setMargin(true); + vlMain.setSpacing(true); + tabSheet.addTab(vlMain, "Main page", null); + + MenuBar menuBar = new MenuBar(); + MenuItem file = menuBar.addItem("File", null); + MenuItem newItem = file.addItem("New", null); + newItem.addItem("Day...", newDayCommand); + newItem.addItem("Task...", newTaskCommand); + newItem.addItem("Work...", newWorkCommand); + MenuItem edit = menuBar.addItem("Edit", null); + edit.addItem("Day...", editDayCommand); + edit.addItem("Task...", editTaskCommand); + edit.addItem("Work...", editWorkCommand); + vlMain.addComponent(menuBar); + + LocalEntityProvider dayProvider = new CachingLocalEntityProvider(Day.class); + dayProvider.setEntityManager(EM); + JPAContainer dayContainer = new JPAContainer(Day.class); + dayContainer.setEntityProvider(dayProvider); + + dayTable = new Table(); + dayTable.setSelectable(true); + dayTable.setEditable(false); + dayTable.setImmediate(true); + dayTable.setSizeFull(); + dayTable.setContainerDataSource(dayContainer); + dayTable.setVisibleColumns(new String[]{ + "formattedDay", + "startWork", + "endWork", + "hours", + }); + dayTable.setSortContainerPropertyId("day"); + dayTable.setColumnHeaders(new String[]{ + "day", + "startWork", + "endWork", + "hours", + }); + vlMain.addComponent(dayTable); + vlMain.setExpandRatio(dayTable, 1f); + + LocalEntityProvider taskProvider = new CachingLocalEntityProvider(Task.class); + taskProvider.setEntityManager(EM); + JPAContainer taskContainer = new JPAContainer(Task.class); + taskContainer.setEntityProvider(taskProvider); + + taskTable = new Table(); + taskTable.setSelectable(true); + taskTable.setEditable(false); + taskTable.setImmediate(true); + taskTable.setSizeFull(); + taskTable.setContainerDataSource(taskContainer); + taskTable.setVisibleColumns(new String[]{ + "name", + "description", + }); + taskTable.setColumnWidth("description", 300); + vlMain.addComponent(taskTable); + vlMain.setExpandRatio(taskTable, 1f); + + LocalEntityProvider workProvider = new CachingLocalEntityProvider(Work.class); + workProvider.setEntityManager(EM); + JPAContainer workContainer = new JPAContainer(Work.class); + workContainer.setEntityProvider(workProvider); + + workTable = new Table(); + workTable.setSelectable(false); + workTable.setEditable(false); + workTable.setImmediate(true); + workTable.setSizeFull(); + workTable.setContainerDataSource(workContainer); + workTable.setVisibleColumns(new String[]{ + "day", + "task", + "hours", + "result", + }); + workTable.setColumnWidth("result", 200); + workTable.setSortContainerPropertyId("day"); + vlMain.addComponent(workTable); + vlMain.setExpandRatio(workTable, 1f); + } + + public Table getDayTable() { + return dayTable; + } + + public Table getTaskTable() { + return taskTable; + } + + public Table getWorkTable() { + return workTable; + } +} diff -r 739f329b9e1e -r 2d6a668325f9 mywork-web/src/main/resources/META-INF/persistence.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mywork-web/src/main/resources/META-INF/persistence.xml Wed Nov 23 17:52:25 2011 +0300 @@ -0,0 +1,21 @@ + + + + org.apache.openjpa.persistence.PersistenceProviderImpl + + ru.indvdum.mywork.openjpa.model.Day + ru.indvdum.mywork.openjpa.model.Task + ru.indvdum.mywork.openjpa.model.Work + ru.indvdum.mywork.openjpa.model.WorkId + + + + + + + + + diff -r 739f329b9e1e -r 2d6a668325f9 pom.xml --- a/pom.xml Wed Nov 23 17:25:20 2011 +0300 +++ b/pom.xml Wed Nov 23 17:52:25 2011 +0300 @@ -1,18 +1,16 @@ - + + 4.0.0 - ru.indvdum - mywork - 0.0.1-SNAPSHOT - My Work + ru.indvdum.mywork + mywork-all + mywork + 0.0.1.0-SNAPSHOT + pom - 6.1.26 - 6.5.0 - 2.1.1 - 10.1.0.5.0 - 2.1.1 1.4 10.8.2.2 1.8.0 + 2.1.1 2.3.2 2.5.1-1 1.5 @@ -25,70 +23,22 @@ src/main/resources - false + true + org.apache.maven.plugins maven-compiler-plugin ${maven-compiler-plugin.version} - groovy-eclipse-compiler - nowarn - true + 1.6 + 1.6 + UTF-8 + true + 128m + 512m - - - org.codehaus.groovy - groovy-eclipse-compiler - ${groovy-eclipse-compiler.version} - - - - - org.codehaus.mojo - build-helper-maven-plugin - ${build-helper-maven-plugin.version} - - - add-source - generate-sources - - add-source - - - - src/main/groovy - src/test/groovy - - - - - - - org.codehaus.mojo - openjpa-maven-plugin - - **/model/**/*.class - true - true - - - - enhancer - process-classes - - enhance - - - - - - org.apache.openjpa - openjpa - ${openjpa.version} - - org.apache.maven.plugins @@ -98,40 +48,6 @@ UTF-8 - - maven-source-plugin - - true - - - - generate-sources - - jar - - - - - - org.codehaus.mojo - exec-maven-plugin - 1.2 - - - - exec - - - - - java - - -classpath - - ru.indvdum.mywork.MyWork - - - @@ -169,6 +85,20 @@ + + + + ru.indvdum.mywork + mywork-model + ${project.version} + + + ru.indvdum.mywork + mywork-web + ${project.version} + + + org.slf4j @@ -181,58 +111,9 @@ ${junit.version} test - - org.mortbay.jetty - jetty - ${jetty.version} - - - com.vaadin - vaadin - ${vaadin.version} - - - com.vaadin.addon - jpacontainer-addon-agpl-3.0 - 1.2.0 - - - javax.persistence - persistence-api - - - - - com.google.gwt - gwt-user - ${gwt.version} - - - com.oracle - ojdbc14 - ${oracle.jdbc.version} - - - org.apache.openjpa - openjpa - ${openjpa.version} - - - org.codehaus.groovy - groovy-all - ${groovy.version} - - - commons-dbcp - commons-dbcp - ${commons-dbcp.version} - test - - - org.apache.derby - derby - ${derby.version} - test - + + mywork-model + mywork-web + diff -r 739f329b9e1e -r 2d6a668325f9 src/main/java/ru/indvdum/mywork/MyWork.java --- a/src/main/java/ru/indvdum/mywork/MyWork.java Wed Nov 23 17:25:20 2011 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -package ru.indvdum.mywork; - -import java.util.Date; - -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.Persistence; - -import org.mortbay.component.LifeCycle; -import org.mortbay.component.LifeCycle.Listener; -import org.mortbay.jetty.Connector; -import org.mortbay.jetty.Server; -import org.mortbay.jetty.servlet.Context; -import org.mortbay.jetty.servlet.ServletHolder; - -import com.vaadin.terminal.gwt.server.ApplicationServlet; - -/** - * @author indvdum - * 12.08.2011 17:31:37 - * - */ -public class MyWork { - public static EntityManagerFactory EMF = null; - public static EntityManager EM = null; - - /** - * @param args - * @throws Exception - */ - public static void main(String[] args) throws Exception { - Server server = new Server(); - Connector connector = new org.mortbay.jetty.nio.SelectChannelConnector(); - connector.setPort(8080); - connector.setMaxIdleTime(720000); - server.addConnector(connector); - - Context root = new Context(server, "/", Context.SESSIONS); - ServletHolder vaadinServlet = new ServletHolder(new ApplicationServlet()); - vaadinServlet.setInitParameter("application", "ru.indvdum.mywork.vaadin.MyWorkApplication"); - root.addServlet(vaadinServlet, "/*"); - - server.addLifeCycleListener(new Listener(){ - - @Override - public void lifeCycleFailure(LifeCycle event, Throwable cause) { - - } - - @Override - public void lifeCycleStarted(LifeCycle event) { - EMF = Persistence.createEntityManagerFactory("mywork"); - EM = EMF.createEntityManager(); - } - - @Override - public void lifeCycleStarting(LifeCycle event) { - - } - - @Override - public void lifeCycleStopped(LifeCycle event) { - - } - - @Override - public void lifeCycleStopping(LifeCycle event) { - EM.close(); - EMF.close(); - } - - }); - - server.start(); - System.out.println("Jetty server started at " + new Date()); - } - -} diff -r 739f329b9e1e -r 2d6a668325f9 src/main/java/ru/indvdum/mywork/openjpa/model/Day.java --- a/src/main/java/ru/indvdum/mywork/openjpa/model/Day.java Wed Nov 23 17:25:20 2011 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -package ru.indvdum.mywork.openjpa.model; - -import java.sql.Time; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; - -/** - * @author indvdum - * 12.08.2011 17:31:00 - * - */ -@Entity -@Table(name = "DAYS") -public class Day implements IDatabaseObject { - - private static final long serialVersionUID = 1471705339524132968L; - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "ID", nullable = false) - private Integer id = null; - - @Column(name = "DAY") - private Date day = null; - - @Column(name = "STARTWORK") - private Time startWork = null; - - @Column(name = "ENDWORK") - private Time endWork = null; - - @Column(name = "HOURS") - private Float hours = null; - - public Day(){ - - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (!(obj instanceof Day)) - return false; - final Day other = (Day) obj; - return (getId() == other.getId() || (getId() != null && getId().equals(other.getId()))); - } - - @Override - public int hashCode() { - if(getId() != null && getId() != 0) - return getId().hashCode(); - else - return super.hashCode(); - } - - @Override - public String toString() { - return getDateFormatter().format(getDay()); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Date getDay() { - return day; - } - - public String getFormattedDay() { - return toString(); - } - - public void setDay(Date day) { - this.day = day; - } - - public Time getStartWork() { - return startWork; - } - - public void setStartWork(Time startWork) { - this.startWork = startWork; - } - - public Time getEndWork() { - return endWork; - } - - public void setEndWork(Time endWork) { - this.endWork = endWork; - } - - public Float getHours() { - return hours; - } - - public void setHours(Float hours) { - this.hours = hours; - } - - protected DateFormat getDateFormatter() { - return new SimpleDateFormat("dd.MM.yyyy"); - } -} diff -r 739f329b9e1e -r 2d6a668325f9 src/main/java/ru/indvdum/mywork/openjpa/model/IDatabaseObject.java --- a/src/main/java/ru/indvdum/mywork/openjpa/model/IDatabaseObject.java Wed Nov 23 17:25:20 2011 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ -package ru.indvdum.mywork.openjpa.model; - -import java.io.Serializable; - -/** - * @author indvdum - * 12.08.2011 17:31:11 - * - */ -public interface IDatabaseObject extends Serializable { - -} diff -r 739f329b9e1e -r 2d6a668325f9 src/main/java/ru/indvdum/mywork/openjpa/model/Task.java --- a/src/main/java/ru/indvdum/mywork/openjpa/model/Task.java Wed Nov 23 17:25:20 2011 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -package ru.indvdum.mywork.openjpa.model; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; - -/** - * @author indvdum - * 16.08.2011 9:02:32 - * - */ -@Entity -@Table(name = "TASKS") -public class Task implements IDatabaseObject { - - private static final long serialVersionUID = -4457948503094306717L; - - @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE) - @Column(name = "ID", nullable = false) - private Integer id = null; - - @Column(name = "NAME") - private String name = null; - - @Column(name = "DESCRIPTION") - private String description = null; - - public Task(){ - - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (!(obj instanceof Task)) - return false; - final Task other = (Task) obj; - return (getId() == other.getId() || (getId() != null && getId().equals(other.getId()))); - } - - @Override - public int hashCode() { - if(getId() != null && getId() != 0) - return getId().hashCode(); - else - return super.hashCode(); - } - - @Override - public String toString() { - return getName(); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name != null ? name : ""; - } - - public void setName(String name) { - this.name = name; - } - - public String getDescription() { - return description != null ? description : ""; - } - - public void setDescription(String description) { - this.description = description; - } -} diff -r 739f329b9e1e -r 2d6a668325f9 src/main/java/ru/indvdum/mywork/openjpa/model/Work.java --- a/src/main/java/ru/indvdum/mywork/openjpa/model/Work.java Wed Nov 23 17:25:20 2011 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -package ru.indvdum.mywork.openjpa.model; - -import javax.persistence.Column; -import javax.persistence.EmbeddedId; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.ManyToOne; -import javax.persistence.MapsId; -import javax.persistence.Table; - -/** - * @author indvdum - * 16.08.2011 13:55:51 - * - */ -@Entity -@Table(name = "WORK") -public class Work implements IDatabaseObject { - - private static final long serialVersionUID = 7138260708537798813L; - - @EmbeddedId - private WorkId id = null; - - @Column(name = "HOURS") - private Float hours = null; - - @Column(name = "RESULT") - private String result = null; - - @MapsId("dayId") - @ManyToOne(fetch = FetchType.EAGER) - private Day day = null; - - @MapsId("taskId") - @ManyToOne(fetch = FetchType.EAGER) - private Task task = null; - - public Work(){ - - } - - public Float getHours() { - return hours; - } - - public void setHours(Float hours) { - this.hours = hours; - } - - public String getResult() { - return result; - } - - public void setResult(String result) { - this.result = result; - } - - public Day getDay() { - return day; - } - - public void setDay(Day day) { - this.day = day; - } - - public Task getTask() { - return task; - } - - public void setTask(Task task) { - this.task = task; - } - - public WorkId getId() { - return id; - } - - public void setId(WorkId id) { - this.id = id; - } - -} diff -r 739f329b9e1e -r 2d6a668325f9 src/main/java/ru/indvdum/mywork/openjpa/model/WorkId.java --- a/src/main/java/ru/indvdum/mywork/openjpa/model/WorkId.java Wed Nov 23 17:25:20 2011 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -package ru.indvdum.mywork.openjpa.model; - -import javax.persistence.Embeddable; - -/** - * @author indvdum - * 17.08.2011 15:00:35 - * - */ -@Embeddable -public class WorkId{ - - public Integer dayId; - public Integer taskId; - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (!(obj instanceof WorkId)) - return false; - final WorkId other = (WorkId) obj; - return ( - this.dayId == other.dayId - && this.taskId == other.taskId - || ( - this.dayId != null - && this.dayId.equals(other.dayId) - && this.taskId != null - && this.taskId.equals(other.taskId) - ) - ); - } - - @Override - public int hashCode() { - return dayId ^ taskId; - } - -} diff -r 739f329b9e1e -r 2d6a668325f9 src/main/java/ru/indvdum/mywork/vaadin/EditDayDialog.java --- a/src/main/java/ru/indvdum/mywork/vaadin/EditDayDialog.java Wed Nov 23 17:25:20 2011 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,243 +0,0 @@ -package ru.indvdum.mywork.vaadin; - -import static ru.indvdum.mywork.MyWork.EM; - -import java.sql.Time; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; - -import ru.indvdum.mywork.openjpa.model.Day; - -import com.vaadin.data.Property.ValueChangeEvent; -import com.vaadin.data.Property.ValueChangeListener; -import com.vaadin.ui.Alignment; -import com.vaadin.ui.Button; -import com.vaadin.ui.HorizontalLayout; -import com.vaadin.ui.Label; -import com.vaadin.ui.PopupDateField; -import com.vaadin.ui.TextField; -import com.vaadin.ui.VerticalLayout; -import com.vaadin.ui.Window; -import com.vaadin.ui.Button.ClickEvent; -import com.vaadin.ui.Button.ClickListener; - -/** - * @author indvdum - * 23.08.2011 19:11:35 - * - */ -public class EditDayDialog extends Window implements ValueChangeListener, ClickListener { - - private MyWorkApplication myApp = null; - private EditState state = null; - private Day day = null; - private PopupDateField dayStartTime = null; - private PopupDateField dayEndTime = null; - private PopupDateField dayDate = null; - private TextField dayHours = null; - - public EditDayDialog(MyWorkApplication myApp, Day day) throws Exception { - super(); - this.myApp = myApp; - if(day == null) - state = EditState.CREATE; - else - state = EditState.EDIT; - switch(state){ - case CREATE: - setCaption("Creating new day"); - day = new Day(); - Calendar calDay = Calendar.getInstance(); - calDay.set(Calendar.HOUR_OF_DAY, 0); - calDay.set(Calendar.MINUTE, 0); - calDay.set(Calendar.SECOND, 0); - calDay.set(Calendar.MILLISECOND, 0); - day.setDay(calDay.getTime()); - Calendar calStart = Calendar.getInstance(); - calStart.set(Calendar.HOUR_OF_DAY, 9); - calStart.set(Calendar.MINUTE, 0); - calStart.set(Calendar.SECOND, 0); - calStart.set(Calendar.MILLISECOND, 0); - day.setStartWork(new Time(calStart.getTime().getTime())); - Calendar calEnd = Calendar.getInstance(); - calEnd.set(Calendar.HOUR_OF_DAY, 18); - calEnd.set(Calendar.MINUTE, 0); - calEnd.set(Calendar.SECOND, 0); - calEnd.set(Calendar.MILLISECOND, 0); - day.setEndWork(new Time(calEnd.getTime().getTime())); - day.setHours(8f); - this.day = day; - break; - case EDIT: - setCaption("Editing day"); - this.day = day; - break; - } - init(); - } - - private void init(){ - setModal(true); - setWidth("480px"); - setHeight("300px"); - VerticalLayout vl = new VerticalLayout(); - vl.setSizeFull(); - vl.setSpacing(true); - vl.setMargin(true); - setContent(vl); - - HorizontalLayout hlDay = new HorizontalLayout(); - hlDay.setWidth("100%"); - Label lblDay = new Label("Day:"); - lblDay.setWidth("100%"); - hlDay.addComponent(lblDay); - hlDay.setExpandRatio(lblDay, 1f); - dayDate = new PopupDateField(); - dayDate.setWidth("100%"); - dayDate.setInputPrompt("Enter date"); - dayDate.setResolution(PopupDateField.RESOLUTION_DAY); - dayDate.setImmediate(true); - dayDate.setValue(day.getDay()); - dayDate.addListener(this); - dayDate.setDateFormat("dd.MM.yyyy"); - hlDay.addComponent(dayDate); - hlDay.setExpandRatio(dayDate, 5f); - vl.addComponent(hlDay); - - HorizontalLayout hlStart = new HorizontalLayout(); - hlStart.setWidth("100%"); - Label lblStart = new Label("Start time:"); - lblStart.setWidth("100%"); - hlStart.addComponent(lblStart); - hlStart.setExpandRatio(lblStart, 1f); - dayStartTime = new PopupDateField(); - dayStartTime.setWidth("100%"); - dayStartTime.setInputPrompt("Enter time"); - dayStartTime.setResolution(PopupDateField.RESOLUTION_MIN); - dayStartTime.setImmediate(true); - dayStartTime.setValue(day.getStartWork()); - dayStartTime.setDateFormat("HH:mm"); - hlStart.addComponent(dayStartTime); - hlStart.setExpandRatio(dayStartTime, 5f); - vl.addComponent(hlStart); - - HorizontalLayout hlEnd = new HorizontalLayout(); - hlEnd.setWidth("100%"); - Label lblEnd = new Label("End time:"); - lblEnd.setWidth("100%"); - hlEnd.addComponent(lblEnd); - hlEnd.setExpandRatio(lblEnd, 1f); - dayEndTime = new PopupDateField(); - dayEndTime.setWidth("100%"); - dayEndTime.setInputPrompt("Enter time"); - dayEndTime.setResolution(PopupDateField.RESOLUTION_MIN); - dayEndTime.setImmediate(true); - dayEndTime.setValue(day.getEndWork()); - dayEndTime.setDateFormat("HH:mm"); - hlEnd.addComponent(dayEndTime); - hlEnd.setExpandRatio(dayEndTime, 5f); - vl.addComponent(hlEnd); - - HorizontalLayout hlHours = new HorizontalLayout(); - hlHours.setWidth("100%"); - Label lblHours = new Label("Work hours count:"); - lblHours.setWidth("100%"); - hlHours.addComponent(lblHours); - hlHours.setExpandRatio(lblHours, 1f); - dayHours = new TextField(); - dayHours.setWidth("100%"); - dayHours.setValue(day.getHours()); - dayHours.setImmediate(true); - hlHours.addComponent(dayHours); - hlHours.setExpandRatio(dayHours, 5f); - vl.addComponent(hlHours); - - HorizontalLayout hlOk = new HorizontalLayout(); - hlOk.setSizeFull(); - Button okButton = new Button(); - switch(state){ - case CREATE: - okButton.setCaption("Create"); - break; - case EDIT: - okButton.setCaption("Save"); - break; - } - okButton.addListener((ClickListener)this); - hlOk.addComponent(okButton); - hlOk.setComponentAlignment(okButton, Alignment.BOTTOM_RIGHT); - vl.addComponent(hlOk); - vl.setExpandRatio(hlOk, 1f); - } - - @Override - public void valueChange(ValueChangeEvent event) { - Object value = event.getProperty().getValue(); - Object startValue = dayStartTime.getValue(); - Object endValue = dayEndTime.getValue(); - if (value == null || !(value instanceof Date) || !(startValue instanceof Date) || !(endValue instanceof Date)) { - getWindow().showNotification("Invalid date entered"); - } else { - Date date = (Date)value; - Date start = (Date)startValue; - Date end = (Date)endValue; - Calendar calStart = Calendar.getInstance(); - calStart.setTime(start); - Calendar calEnd = Calendar.getInstance(); - calEnd.setTime(end); - Calendar cal = Calendar.getInstance(); - cal.setTime(date); - calStart.set(Calendar.YEAR, cal.get(Calendar.YEAR)); - calStart.set(Calendar.MONTH, cal.get(Calendar.MONTH)); - calStart.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH)); - calStart.set(Calendar.SECOND, cal.get(Calendar.SECOND)); - calStart.set(Calendar.MILLISECOND, cal.get(Calendar.MILLISECOND)); - calEnd.set(Calendar.YEAR, cal.get(Calendar.YEAR)); - calEnd.set(Calendar.MONTH, cal.get(Calendar.MONTH)); - calEnd.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH)); - calEnd.set(Calendar.SECOND, cal.get(Calendar.SECOND)); - calEnd.set(Calendar.MILLISECOND, cal.get(Calendar.MILLISECOND)); - dayStartTime.setValue(calStart.getTime()); - dayEndTime.setValue(calEnd.getTime()); - } - } - - @Override - public void buttonClick(ClickEvent event) { - Object value = dayDate.getValue(); - Object startValue = dayStartTime.getValue(); - Object endValue = dayEndTime.getValue(); - Object hoursValue = dayHours.getValue(); - if ( - value == null - || !(value instanceof Date) - || !(startValue instanceof Date) - || !(endValue instanceof Date) - || !(hoursValue.toString().matches("^[0-9]+[\\.]{0,1}[0-9]*")) - ) { - getWindow().showNotification("Invalid information entered"); - } else { - Date date = (Date)value; - Date start = (Date)startValue; - Date end = (Date)endValue; - Float hours = Float.parseFloat(hoursValue.toString()); - day.setDay(date); - day.setStartWork(new Time(start.getTime())); - day.setEndWork(new Time(end.getTime())); - day.setHours(hours); - try{ - EM.getTransaction().begin(); - EM.persist(day); - EM.getTransaction().commit(); - EM.clear(); - } finally { - if(EM.getTransaction().isActive()) - EM.getTransaction().rollback(); - } - getParent().removeWindow(this); - myApp.getDayTable().requestRepaint(); - } - } - -} diff -r 739f329b9e1e -r 2d6a668325f9 src/main/java/ru/indvdum/mywork/vaadin/EditState.java --- a/src/main/java/ru/indvdum/mywork/vaadin/EditState.java Wed Nov 23 17:25:20 2011 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -package ru.indvdum.mywork.vaadin; - -/** - * @author indvdum - * 23.08.2011 19:11:44 - * - */ -public enum EditState { - CREATE, - EDIT, -} diff -r 739f329b9e1e -r 2d6a668325f9 src/main/java/ru/indvdum/mywork/vaadin/EditTaskDialog.java --- a/src/main/java/ru/indvdum/mywork/vaadin/EditTaskDialog.java Wed Nov 23 17:25:20 2011 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,116 +0,0 @@ -package ru.indvdum.mywork.vaadin; - -import static ru.indvdum.mywork.MyWork.EM; -import ru.indvdum.mywork.openjpa.model.Task; - -import com.vaadin.ui.Alignment; -import com.vaadin.ui.Button; -import com.vaadin.ui.HorizontalLayout; -import com.vaadin.ui.Label; -import com.vaadin.ui.RichTextArea; -import com.vaadin.ui.TextField; -import com.vaadin.ui.VerticalLayout; -import com.vaadin.ui.Window; -import com.vaadin.ui.Button.ClickEvent; -import com.vaadin.ui.Button.ClickListener; - -/** - * @author indvdum - * 23.08.2011 19:11:50 - * - */ -public class EditTaskDialog extends Window implements ClickListener { - - private MyWorkApplication myApp = null; - private EditState state = null; - private Task task = null; - private TextField taskName = null; - private RichTextArea taskDescription = null; - - public EditTaskDialog(MyWorkApplication myApp, Task task) throws Exception { - super(); - this.myApp = myApp; - if(task == null) - state = EditState.CREATE; - else - state = EditState.EDIT; - switch(state){ - case CREATE: - setCaption("Creating new task"); - task = new Task(); - task.setName(""); - task.setDescription(""); - this.task = task; - break; - case EDIT: - setCaption("Editing task"); - this.task = task; - break; - } - init(); - } - - private void init(){ - setModal(true); - setWidth("640px"); - setHeight("480px"); - VerticalLayout vl = new VerticalLayout(); - vl.setSizeFull(); - vl.setSpacing(true); - vl.setMargin(true); - setContent(vl); - - HorizontalLayout hlName = new HorizontalLayout(); - hlName.setWidth("100%"); - Label lblName = new Label("Name:"); - lblName.setWidth("100%"); - hlName.addComponent(lblName); - hlName.setExpandRatio(lblName, 1f); - taskName = new TextField(); - taskName.setWidth("100%"); - taskName.setValue(task.getName()); - hlName.addComponent(taskName); - hlName.setExpandRatio(taskName, 5f); - vl.addComponent(hlName); - - taskDescription = new RichTextArea("Description"); - taskDescription.setValue(task.getDescription()); - taskDescription.setSizeFull(); - vl.addComponent(taskDescription); - vl.setExpandRatio(taskDescription, 1f); - - HorizontalLayout hlOk = new HorizontalLayout(); - hlOk.setWidth("100%"); - Button okButton = new Button(); - switch(state){ - case CREATE: - okButton.setCaption("Create"); - break; - case EDIT: - okButton.setCaption("Save"); - break; - } - okButton.addListener((ClickListener)this); - hlOk.addComponent(okButton); - hlOk.setComponentAlignment(okButton, Alignment.MIDDLE_RIGHT); - vl.addComponent(hlOk); - } - - @Override - public void buttonClick(ClickEvent event) { - task.setName(taskName.getValue().toString()); - task.setDescription(taskDescription.getValue().toString()); - try{ - EM.getTransaction().begin(); - EM.persist(task); - EM.getTransaction().commit(); - EM.clear(); - } finally { - if(EM.getTransaction().isActive()) - EM.getTransaction().rollback(); - } - getParent().removeWindow(this); - myApp.getTaskTable().requestRepaint(); - } - -} diff -r 739f329b9e1e -r 2d6a668325f9 src/main/java/ru/indvdum/mywork/vaadin/EditWorkDialog.java --- a/src/main/java/ru/indvdum/mywork/vaadin/EditWorkDialog.java Wed Nov 23 17:25:20 2011 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,234 +0,0 @@ -package ru.indvdum.mywork.vaadin; - -import static ru.indvdum.mywork.MyWork.EM; - -import java.util.Calendar; -import java.util.List; - -import javax.persistence.Query; - -import ru.indvdum.mywork.openjpa.model.Day; -import ru.indvdum.mywork.openjpa.model.Task; -import ru.indvdum.mywork.openjpa.model.Work; - -import com.vaadin.data.Property.ValueChangeEvent; -import com.vaadin.data.Property.ValueChangeListener; -import com.vaadin.ui.Alignment; -import com.vaadin.ui.Button; -import com.vaadin.ui.ComboBox; -import com.vaadin.ui.HorizontalLayout; -import com.vaadin.ui.Label; -import com.vaadin.ui.RichTextArea; -import com.vaadin.ui.TextField; -import com.vaadin.ui.VerticalLayout; -import com.vaadin.ui.Window; -import com.vaadin.ui.AbstractSelect.Filtering; -import com.vaadin.ui.Button.ClickEvent; -import com.vaadin.ui.Button.ClickListener; - -/** - * @author indvdum - * 23.08.2011 19:11:56 - * - */ -public class EditWorkDialog extends Window implements ClickListener { - - private MyWorkApplication myApp = null; - private EditState state = null; - private Work work = null; - private ComboBox workDay = null; - private ComboBox workTask = null; - private TextField workHours = null; - private RichTextArea workResult = null; - - public EditWorkDialog(MyWorkApplication myApp, Work work) throws Exception { - super(); - this.myApp = myApp; - if(work == null) - state = EditState.CREATE; - else - state = EditState.EDIT; - switch(state){ - case CREATE: - setCaption("Creating new work"); - work = new Work(); - work.setHours(0f); - work.setResult(""); - this.work = work; - break; - case EDIT: - setCaption("Editing work"); - this.work = work; - break; - } - init(); - } - - private void init(){ - setModal(true); - setWidth("640px"); - setHeight("480px"); - VerticalLayout vl = new VerticalLayout(); - vl.setSizeFull(); - vl.setSpacing(true); - vl.setMargin(true); - setContent(vl); - - HorizontalLayout hlDay = new HorizontalLayout(); - hlDay.setWidth("100%"); - Label lblDay = new Label("Day:"); - lblDay.setWidth("100%"); - hlDay.addComponent(lblDay); - hlDay.setExpandRatio(lblDay, 1f); - workDay = new ComboBox(); - workDay.setWidth("100%"); - workDay.setImmediate(true); - workDay.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS); - updateDays("select d from " + Day.class.getName() + " d order by d.day"); - workDay.addListener(new ValueChangeListener(){ - - @Override - public void valueChange(ValueChangeEvent event) { - Day day = (Day)event.getProperty().getValue(); - if(day == null) - updateTasks("select t from " + Task.class.getName() + " t order by t.id desc"); - else - updateTasks("select t from " + Task.class.getName() + " t where t.id not in (select w.task.id from " + Work.class.getName() + " w where w.day.id = " + day.getId() + ") order by t.id desc"); - } - - }); - hlDay.addComponent(workDay); - hlDay.setExpandRatio(workDay, 5f); - vl.addComponent(hlDay); - - HorizontalLayout hlTask = new HorizontalLayout(); - hlTask.setWidth("100%"); - Label lblStart = new Label("Task:"); - lblStart.setWidth("100%"); - hlTask.addComponent(lblStart); - hlTask.setExpandRatio(lblStart, 1f); - workTask = new ComboBox(); - workTask.setWidth("100%"); - workTask.setImmediate(true); - workTask.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS); - Day day = (Day)workDay.getValue(); - if(day == null) - updateTasks("select t from " + Task.class.getName() + " t order by t.id desc"); - else - updateTasks("select t from " + Task.class.getName() + " t where t.id not in (select w.task.id from " + Work.class.getName() + " w where w.day.id = " + day.getId() + ") order by t.id desc"); - workTask.addListener(new ValueChangeListener(){ - - @Override - public void valueChange(ValueChangeEvent event) { - Task task = (Task)event.getProperty().getValue(); - if(task == null) - updateDays("select d from " + Day.class.getName() + " d order by d.day"); - else - updateDays("select d from " + Day.class.getName() + " d where d.id not in (select w.day.id from " + Work.class.getName() + " w where w.task.id = " + task.getId() + ") order by d.day"); - } - - }); - hlTask.addComponent(workTask); - hlTask.setExpandRatio(workTask, 5f); - vl.addComponent(hlTask); - - HorizontalLayout hlHours = new HorizontalLayout(); - hlHours.setWidth("100%"); - Label lblHours = new Label("Hours:"); - lblHours.setWidth("100%"); - hlHours.addComponent(lblHours); - hlHours.setExpandRatio(lblHours, 1f); - workHours = new TextField(); - workHours.setWidth("100%"); - workHours.setValue(work.getHours()); - workHours.setImmediate(true); - hlHours.addComponent(workHours); - hlHours.setExpandRatio(workHours, 5f); - vl.addComponent(hlHours); - - workResult = new RichTextArea("Result"); - workResult.setValue(work.getResult()); - workResult.setSizeFull(); - vl.addComponent(workResult); - vl.setExpandRatio(workResult, 5f); - - HorizontalLayout hlOk = new HorizontalLayout(); - hlOk.setWidth("100%"); - Button okButton = new Button(); - switch(state){ - case CREATE: - okButton.setCaption("Create"); - break; - case EDIT: - okButton.setCaption("Save"); - break; - } - okButton.addListener((ClickListener)this); - hlOk.addComponent(okButton); - hlOk.setComponentAlignment(okButton, Alignment.MIDDLE_RIGHT); - vl.addComponent(hlOk); - } - - private void updateDays(String jpql){ - if(workTask != null && workTask.getValue() != null && workDay != null && workDay.getValue() != null) - return; - workDay.removeAllItems(); - Query query = EM.createQuery(jpql); - List list = query.getResultList(); - for(Day day: (List)list){ - workDay.addItem(day); - Calendar currCal = Calendar.getInstance(); - currCal.set(Calendar.HOUR_OF_DAY, 0); - currCal.set(Calendar.MINUTE, 0); - currCal.set(Calendar.SECOND, 0); - currCal.set(Calendar.MILLISECOND, 0); - if(day.getDay().equals(currCal.getTime())) - workDay.select(day); - } - } - - private void updateTasks(String jpql){ - if(workTask != null && workTask.getValue() != null && workDay != null && workDay.getValue() != null) - return; - workTask.removeAllItems(); - Query query = EM.createQuery(jpql); - List list = query.getResultList(); - for(Task task: (List)list) - workTask.addItem(task); - } - - @Override - public void buttonClick(ClickEvent event) { - Object dayObj = workDay.getValue(); - Object taskObj = workTask.getValue(); - Object hoursObj = workHours.getValue(); - String result = workResult.getValue().toString(); - if ( - !(dayObj instanceof Day) - || !(taskObj instanceof Task) - || !(hoursObj.toString().matches("^[0-9]+[\\.]{0,1}[0-9]*")) - ) { - getWindow().showNotification("Invalid information entered"); - } else { - Day day = (Day)dayObj; - Task task = (Task)taskObj; - Float hours = Float.parseFloat(hoursObj.toString()); - work.setDay(day); - work.setTask(task); - work.setHours(hours); - work.setResult(result); - try{ - EM.getTransaction().begin(); - EM.persist(work); - EM.getTransaction().commit(); - EM.clear(); - } finally { - if(EM.getTransaction().isActive()) - EM.getTransaction().rollback(); - } - getParent().removeWindow(this); - myApp.getWorkTable().requestRepaint(); - } - } - -} diff -r 739f329b9e1e -r 2d6a668325f9 src/main/java/ru/indvdum/mywork/vaadin/MyWorkApplication.java --- a/src/main/java/ru/indvdum/mywork/vaadin/MyWorkApplication.java Wed Nov 23 17:25:20 2011 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,231 +0,0 @@ -package ru.indvdum.mywork.vaadin; - -import static ru.indvdum.mywork.MyWork.EM; - -import java.util.List; - -import javax.persistence.Query; - -import ru.indvdum.mywork.openjpa.model.Day; -import ru.indvdum.mywork.openjpa.model.Task; -import ru.indvdum.mywork.openjpa.model.Work; - -import com.vaadin.Application; -import com.vaadin.addon.jpacontainer.EntityContainer; -import com.vaadin.addon.jpacontainer.EntityProvider; -import com.vaadin.addon.jpacontainer.HierarchicalEntityContainer; -import com.vaadin.addon.jpacontainer.JPAContainer; -import com.vaadin.addon.jpacontainer.provider.BatchableLocalEntityProvider; -import com.vaadin.addon.jpacontainer.provider.CachingBatchableLocalEntityProvider; -import com.vaadin.addon.jpacontainer.provider.CachingLocalEntityProvider; -import com.vaadin.addon.jpacontainer.provider.CachingMutableLocalEntityProvider; -import com.vaadin.addon.jpacontainer.provider.LocalEntityProvider; -import com.vaadin.ui.Alignment; -import com.vaadin.ui.Button; -import com.vaadin.ui.HorizontalLayout; -import com.vaadin.ui.MenuBar; -import com.vaadin.ui.TabSheet; -import com.vaadin.ui.Table; -import com.vaadin.ui.VerticalLayout; -import com.vaadin.ui.Window; -import com.vaadin.ui.Button.ClickEvent; -import com.vaadin.ui.Button.ClickListener; -import com.vaadin.ui.MenuBar.Command; -import com.vaadin.ui.MenuBar.MenuItem; - -/** - * @author indvdum - * 12.08.2011 17:31:53 - * - */ -public class MyWorkApplication extends Application { - - private MyWorkApplication thisObject = this; - private Table dayTable = null; - private Table taskTable = null; - private Table workTable = null; - - private Command newDayCommand = new Command() { - public void menuSelected(MenuItem selectedItem) { - EditDayDialog dialog = null; - try { - dialog = new EditDayDialog(thisObject, null); - } catch (Exception e) { - e.printStackTrace(); - } - getMainWindow().addWindow(dialog); - } - }; - private Command newTaskCommand = new Command() { - public void menuSelected(MenuItem selectedItem) { - EditTaskDialog dialog = null; - try { - dialog = new EditTaskDialog(thisObject, null); - } catch (Exception e) { - e.printStackTrace(); - } - getMainWindow().addWindow(dialog); - } - }; - private Command newWorkCommand = new Command() { - public void menuSelected(MenuItem selectedItem) { - EditWorkDialog dialog = null; - try { - dialog = new EditWorkDialog(thisObject, null); - } catch (Exception e) { - e.printStackTrace(); - } - getMainWindow().addWindow(dialog); - } - }; - private Command editDayCommand = new Command() { - public void menuSelected(MenuItem selectedItem) { - EditDayDialog dialog = null; - Day day = EM.find(Day.class, dayTable.getValue()); - if(day == null) - return; - try { - dialog = new EditDayDialog(thisObject, day); - } catch (Exception e) { - e.printStackTrace(); - } - getMainWindow().addWindow(dialog); - } - }; - private Command editTaskCommand = new Command() { - public void menuSelected(MenuItem selectedItem) { - EditTaskDialog dialog = null; - Task task = EM.find(Task.class, taskTable.getValue()); - if(task == null) - return; - try { - dialog = new EditTaskDialog(thisObject, task); - } catch (Exception e) { - e.printStackTrace(); - } - getMainWindow().addWindow(dialog); - } - }; - private Command editWorkCommand = new Command() { - public void menuSelected(MenuItem selectedItem) { - EditWorkDialog dialog = null; - Work work = EM.find(Work.class, workTable.getValue()); - if(work == null) - return; - try { - dialog = new EditWorkDialog(thisObject, work); - } catch (Exception e) { - e.printStackTrace(); - } - getMainWindow().addWindow(dialog); - } - }; - - @Override - public void init() { - Window window = new Window(); - setMainWindow(window); - - TabSheet tabSheet = new TabSheet(); - tabSheet.setSizeFull(); - window.setContent(tabSheet); - - VerticalLayout vlMain = new VerticalLayout(); - vlMain.setSizeFull(); - vlMain.setMargin(true); - vlMain.setSpacing(true); - tabSheet.addTab(vlMain, "Main page", null); - - MenuBar menuBar = new MenuBar(); - MenuItem file = menuBar.addItem("File", null); - MenuItem newItem = file.addItem("New", null); - newItem.addItem("Day...", newDayCommand); - newItem.addItem("Task...", newTaskCommand); - newItem.addItem("Work...", newWorkCommand); - MenuItem edit = menuBar.addItem("Edit", null); - edit.addItem("Day...", editDayCommand); - edit.addItem("Task...", editTaskCommand); - edit.addItem("Work...", editWorkCommand); - vlMain.addComponent(menuBar); - - LocalEntityProvider dayProvider = new CachingLocalEntityProvider(Day.class); - dayProvider.setEntityManager(EM); - JPAContainer dayContainer = new JPAContainer(Day.class); - dayContainer.setEntityProvider(dayProvider); - - dayTable = new Table(); - dayTable.setSelectable(true); - dayTable.setEditable(false); - dayTable.setImmediate(true); - dayTable.setSizeFull(); - dayTable.setContainerDataSource(dayContainer); - dayTable.setVisibleColumns(new String[]{ - "formattedDay", - "startWork", - "endWork", - "hours", - }); - dayTable.setSortContainerPropertyId("day"); - dayTable.setColumnHeaders(new String[]{ - "day", - "startWork", - "endWork", - "hours", - }); - vlMain.addComponent(dayTable); - vlMain.setExpandRatio(dayTable, 1f); - - LocalEntityProvider taskProvider = new CachingLocalEntityProvider(Task.class); - taskProvider.setEntityManager(EM); - JPAContainer taskContainer = new JPAContainer(Task.class); - taskContainer.setEntityProvider(taskProvider); - - taskTable = new Table(); - taskTable.setSelectable(true); - taskTable.setEditable(false); - taskTable.setImmediate(true); - taskTable.setSizeFull(); - taskTable.setContainerDataSource(taskContainer); - taskTable.setVisibleColumns(new String[]{ - "name", - "description", - }); - taskTable.setColumnWidth("description", 300); - vlMain.addComponent(taskTable); - vlMain.setExpandRatio(taskTable, 1f); - - LocalEntityProvider workProvider = new CachingLocalEntityProvider(Work.class); - workProvider.setEntityManager(EM); - JPAContainer workContainer = new JPAContainer(Work.class); - workContainer.setEntityProvider(workProvider); - - workTable = new Table(); - workTable.setSelectable(false); - workTable.setEditable(false); - workTable.setImmediate(true); - workTable.setSizeFull(); - workTable.setContainerDataSource(workContainer); - workTable.setVisibleColumns(new String[]{ - "day", - "task", - "hours", - "result", - }); - workTable.setColumnWidth("result", 200); - workTable.setSortContainerPropertyId("day"); - vlMain.addComponent(workTable); - vlMain.setExpandRatio(workTable, 1f); - } - - public Table getDayTable() { - return dayTable; - } - - public Table getTaskTable() { - return taskTable; - } - - public Table getWorkTable() { - return workTable; - } -} diff -r 739f329b9e1e -r 2d6a668325f9 src/main/resources/META-INF/persistence.xml --- a/src/main/resources/META-INF/persistence.xml Wed Nov 23 17:25:20 2011 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ - - - - org.apache.openjpa.persistence.PersistenceProviderImpl - - ru.indvdum.mywork.openjpa.model.Day - ru.indvdum.mywork.openjpa.model.Task - ru.indvdum.mywork.openjpa.model.Work - ru.indvdum.mywork.openjpa.model.WorkId - - - - - - - - -