diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/ActivityWork.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java similarity index 91% rename from navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/ActivityWork.java rename to navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java index 0ead19ab8..654998c7c 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/ActivityWork.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java @@ -1,8 +1,8 @@ -package org.navalplanner.business.workorders.entities; +package org.navalplanner.business.orders.entities; import java.math.BigDecimal; -public class ActivityWork { +public class HoursGroup { private Long id; diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/IOrderLineGroup.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/IOrderLineGroup.java new file mode 100644 index 000000000..31278c51c --- /dev/null +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/IOrderLineGroup.java @@ -0,0 +1,23 @@ +package org.navalplanner.business.orders.entities; + +/** + * Container of {@link OrderElement}.
+ * + * @author Óscar González Fernández + */ +public interface IOrderLineGroup { + + public void add(OrderElement orderElement); + + public void remove(OrderElement orderElement); + + public void replace(OrderElement oldOrderElement, + OrderElement newOrderElement); + + public void up(OrderElement orderElement); + + public void down(OrderElement orderElement); + + public void add(int position, OrderElement orderElement); + +} \ No newline at end of file diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/ProjectWork.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java similarity index 61% rename from navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/ProjectWork.java rename to navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java index f4b132280..7ee231a84 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/ProjectWork.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java @@ -1,4 +1,4 @@ -package org.navalplanner.business.workorders.entities; +package org.navalplanner.business.orders.entities; import java.util.ArrayList; import java.util.Date; @@ -8,10 +8,11 @@ import org.hibernate.validator.NotEmpty; import org.hibernate.validator.NotNull; /** - * It represents a project with its related information.
+ * It represents an {@link Order} with its related information.
+ * * @author Óscar González Fernández */ -public class ProjectWork implements ITaskWorkContainer { +public class Order implements IOrderLineGroup { private static Date copy(Date date) { return date != null ? new Date(date.getTime()) : date; @@ -36,7 +37,7 @@ public class ProjectWork implements ITaskWorkContainer { // TODO turn into a many to one relationship when Customer entity is defined private String customer; - private List taskWorks = new ArrayList(); + private List orderElements = new ArrayList(); public Long getId() { return id; @@ -98,39 +99,39 @@ public class ProjectWork implements ITaskWorkContainer { return endDate != null && endDate.before(initDate); } - public void add(TaskWork task) { - getTasksManipulator().add(task); + public void add(OrderElement orderElement) { + getOrderElementsManipulator().add(orderElement); } - private TaskWorkListManipulator getTasksManipulator() { - return new TaskWorkListManipulator(taskWorks); + private OrderLineGroupManipulator getOrderElementsManipulator() { + return new OrderLineGroupManipulator(orderElements); } - public List getTaskWorks() { - return new ArrayList(taskWorks); + public List getOrderElements() { + return new ArrayList(orderElements); } - public void remove(TaskWork task) { - getTasksManipulator().remove(task); + public void remove(OrderElement orderElement) { + getOrderElementsManipulator().remove(orderElement); } - public void replace(TaskWork oldTask, TaskWork newTask) { - getTasksManipulator().replace(oldTask, newTask); + public void replace(OrderElement oldOrderElement, OrderElement orderElement) { + getOrderElementsManipulator().replace(oldOrderElement, orderElement); } @Override - public void up(TaskWork task) { - getTasksManipulator().up(task); + public void up(OrderElement orderElement) { + getOrderElementsManipulator().up(orderElement); } @Override - public void down(TaskWork task) { - getTasksManipulator().down(task); + public void down(OrderElement orderElement) { + getOrderElementsManipulator().down(orderElement); } @Override - public void add(int position, TaskWork task) { - getTasksManipulator().add(position, task); + public void add(int position, OrderElement orderElement) { + getOrderElementsManipulator().add(position, orderElement); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWork.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java similarity index 84% rename from navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWork.java rename to navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java index dc3707c89..c66c5ed03 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWork.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java @@ -1,11 +1,11 @@ -package org.navalplanner.business.workorders.entities; +package org.navalplanner.business.orders.entities; import java.util.Date; import java.util.List; import org.hibernate.validator.NotNull; -public abstract class TaskWork { +public abstract class OrderElement { private long id; @NotNull @@ -23,7 +23,7 @@ public abstract class TaskWork { public abstract Integer getWorkHours(); - public abstract List getActivities(); + public abstract List getHoursGroups(); public long getId() { return id; @@ -46,7 +46,7 @@ public abstract class TaskWork { public abstract boolean isLeaf(); - public abstract List getChildren(); + public abstract List getChildren(); public Date getInitDate() { return initDate; @@ -88,8 +88,8 @@ public abstract class TaskWork { return description; } - public abstract TaskWorkContainer asContainer(); + public abstract OrderLineGroup asContainer(); - public abstract void forceLoadActivities(); + public abstract void forceLoadHourGroups(); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java new file mode 100644 index 000000000..c5fd170e1 --- /dev/null +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java @@ -0,0 +1,97 @@ +package org.navalplanner.business.orders.entities; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class OrderLine extends OrderElement { + + private Boolean fixedHours = false; + + private Set hoursGroups = new HashSet(); + + @Override + public Integer getWorkHours() { + int result = 0; + List hoursGroups = getHoursGroups(); + for (HoursGroup hoursGroup : hoursGroups) { + Integer workingHours = hoursGroup.getWorkingHours(); + if (workingHours != null) { + result += workingHours; + } + } + return result; + } + + @Override + public List getChildren() { + return new ArrayList(); + } + + @Override + public boolean isLeaf() { + return true; + } + + @Override + public OrderLineGroup asContainer() { + OrderLineGroup result = new OrderLineGroup(); + result.setName(getName()); + result.setInitDate(getInitDate()); + result.setEndDate(getEndDate()); + // FIXME + // result.setHoursGroups(getHoursGroups()); + return result; + } + + public void setWorkHours(Integer workingHours) { + List hoursGroups = getHoursGroups(); + + // FIXME For the moment we have just one HoursGroup for each OrderLine + if (hoursGroups.isEmpty()) { + HoursGroup hourGroup = new HoursGroup(); + hourGroup.setWorkingHours(workingHours); + + hoursGroups.add(hourGroup); + } else { + HoursGroup hourGroup = hoursGroups.get(0); + hourGroup.setWorkingHours(workingHours); + } + + setHoursGroups(hoursGroups); + } + + public void setHoursGroups(List hoursGroups) { + this.hoursGroups = new HashSet(hoursGroups); + } + + public void addHoursGroup(HoursGroup hoursGroup) { + hoursGroups.add(hoursGroup); + } + + public void deleteHoursGroup(HoursGroup hoursGroup) { + hoursGroups.remove(hoursGroup); + } + + @Override + public List getHoursGroups() { + return new ArrayList(hoursGroups); + } + + @Override + public void forceLoadHourGroups() { + for (HoursGroup hoursGroup : hoursGroups) { + hoursGroup.getWorkingHours(); + } + } + + public void setFixedHours(Boolean fixedHours) { + this.fixedHours = fixedHours; + } + + public Boolean isFixedHours() { + return fixedHours; + } + +} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java new file mode 100644 index 000000000..4ac0bb0bf --- /dev/null +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java @@ -0,0 +1,85 @@ +package org.navalplanner.business.orders.entities; + +import java.util.ArrayList; +import java.util.List; + +public class OrderLineGroup extends OrderElement implements IOrderLineGroup { + + private List children = new ArrayList(); + + @Override + public List getChildren() { + return new ArrayList(children); + } + + @Override + public boolean isLeaf() { + return false; + } + + @Override + public void remove(OrderElement child) { + getManipulator().remove(child); + } + + @Override + public void replace(OrderElement oldOrderElement, OrderElement orderElement) { + getManipulator().replace(oldOrderElement, orderElement); + } + + @Override + public void add(OrderElement orderElement) { + getManipulator().add(orderElement); + } + + @Override + public void up(OrderElement orderElement) { + getManipulator().up(orderElement); + } + + private OrderLineGroupManipulator getManipulator() { + return new OrderLineGroupManipulator(children); + } + + @Override + public OrderLineGroup asContainer() { + return this; + } + + @Override + public void down(OrderElement orderElement) { + getManipulator().down(orderElement); + } + + @Override + public void add(int position, OrderElement orderElement) { + children.add(position, orderElement); + } + + @Override + public Integer getWorkHours() { + int result = 0; + List children = getChildren(); + for (OrderElement orderElement : children) { + result += orderElement.getWorkHours(); + } + return result; + } + + @Override + public void forceLoadHourGroups() { + for (OrderElement orderElement : children) { + orderElement.forceLoadHourGroups(); + } + } + + @Override + public List getHoursGroups() { + List hoursGroups = new ArrayList(); + for (OrderElement orderElement : children) { + hoursGroups.addAll(orderElement.getHoursGroups()); + } + return hoursGroups; + } + +} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroupManipulator.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroupManipulator.java new file mode 100644 index 000000000..e58c747e1 --- /dev/null +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroupManipulator.java @@ -0,0 +1,57 @@ +package org.navalplanner.business.orders.entities; + +import java.util.Collections; +import java.util.List; + +/** + * Implementation of {@link OrderElement}.
+ * @author Óscar González Fernández + */ +public class OrderLineGroupManipulator implements IOrderLineGroup { + + private final List orderElements; + + public OrderLineGroupManipulator(List orderElements) { + this.orderElements = orderElements; + + } + + @Override + public void add(OrderElement orderElement) { + orderElements.add(orderElement); + } + + @Override + public void remove(OrderElement orderElement) { + orderElements.remove(orderElement); + } + + @Override + public void replace(OrderElement oldOrderElement, OrderElement orderElement) { + Collections.replaceAll(orderElements, oldOrderElement, orderElement); + } + + @Override + public void up(OrderElement orderElement) { + int position = orderElements.indexOf(orderElement); + if (position < orderElements.size() - 1) { + orderElements.remove(position); + orderElements.add(position + 1, orderElement); + } + } + + @Override + public void down(OrderElement orderElement) { + int position = orderElements.indexOf(orderElement); + if (position > 0) { + orderElements.remove(position); + orderElements.add(position - 1, orderElement); + } + } + + @Override + public void add(int position, OrderElement orderElement) { + orderElements.add(position, orderElement); + } + +} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/services/IOrderService.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/services/IOrderService.java new file mode 100644 index 000000000..ff3dba850 --- /dev/null +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/services/IOrderService.java @@ -0,0 +1,28 @@ +package org.navalplanner.business.orders.services; + +import java.util.List; + +import org.navalplanner.business.common.OnTransaction; +import org.navalplanner.business.common.exceptions.InstanceNotFoundException; +import org.navalplanner.business.common.exceptions.ValidationException; +import org.navalplanner.business.orders.entities.Order; + +/** + * Management of {@link Order}
+ * @author Óscar González Fernández + */ +public interface IOrderService { + + void save(Order order) throws ValidationException; + + boolean exists(Order HoursGroup); + + List getOrders(); + + void remove(Order HoursGroup) throws InstanceNotFoundException; + + Order find(Long workerId) throws InstanceNotFoundException; + + public T onTransaction(OnTransaction onTransaction); + +} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/services/ProjectWorkService.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/services/OrderService.java similarity index 61% rename from navalplanner-business/src/main/java/org/navalplanner/business/workorders/services/ProjectWorkService.java rename to navalplanner-business/src/main/java/org/navalplanner/business/orders/services/OrderService.java index 3706ab39a..c01acb278 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/services/ProjectWorkService.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/services/OrderService.java @@ -1,4 +1,4 @@ -package org.navalplanner.business.workorders.services; +package org.navalplanner.business.orders.services; import java.util.List; @@ -8,7 +8,7 @@ import org.navalplanner.business.common.OnTransaction; import org.navalplanner.business.common.daos.impl.GenericDaoHibernate; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; -import org.navalplanner.business.workorders.entities.ProjectWork; +import org.navalplanner.business.orders.entities.Order; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; @@ -16,23 +16,23 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; /** - * Default implementation of {@link IProjectWorkService}
+ * Default implementation of {@link IOrderService}
* @author Óscar González Fernández */ @Component @Scope(BeanDefinition.SCOPE_SINGLETON) @Transactional -public class ProjectWorkService implements IProjectWorkService { +public class OrderService implements IOrderService { @Autowired private SessionFactory sessionFactory; /* - * Because the dao for project work doesn't have special needs, it's not + * Because the dao for orderwork doesn't have special needs, it's not * created an interface for defining its contract */ - private GenericDaoHibernate dao = new GenericDaoHibernate() { + private GenericDaoHibernate dao = new GenericDaoHibernate() { @Override protected Session getSession() { @@ -42,33 +42,33 @@ public class ProjectWorkService implements IProjectWorkService { @Override @Transactional(readOnly = true) - public boolean exists(ProjectWork projectWork) { - return dao.exists(projectWork.getId()); + public boolean exists(Order order) { + return dao.exists(order.getId()); } @Override - public void save(ProjectWork projectWork) throws ValidationException { - if (projectWork.isEndDateBeforeStart()) { + public void save(Order order) throws ValidationException { + if (order.isEndDateBeforeStart()) { throw new ValidationException("endDate must be after startDate"); } - dao.save(projectWork); + dao.save(order); } @Override - public List getProjectWorks() { - return dao.list(ProjectWork.class); + public List getOrders() { + return dao.list(Order.class); } @Override - public ProjectWork find(Long projectWorkId) + public Order find(Long orderId) throws InstanceNotFoundException { - return dao.find(projectWorkId); + return dao.find(orderId); } @Override - public void remove(ProjectWork projectWork) + public void remove(Order order) throws InstanceNotFoundException { - dao.remove(projectWork.getId()); + dao.remove(order.getId()); } @Override diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/ITaskWorkContainer.java b/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/ITaskWorkContainer.java deleted file mode 100644 index f95dcbb45..000000000 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/ITaskWorkContainer.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.navalplanner.business.workorders.entities; - -/** - * Container of TaskWorks.
- * @author Óscar González Fernández - */ -public interface ITaskWorkContainer { - - public void add(TaskWork task); - - public void remove(TaskWork task); - - public void replace(TaskWork oldTask, TaskWork newTask); - - public void up(TaskWork task); - - public void down(TaskWork task); - - public void add(int position, TaskWork task); - -} \ No newline at end of file diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkContainer.java b/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkContainer.java deleted file mode 100644 index c0c8abbc5..000000000 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkContainer.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.navalplanner.business.workorders.entities; - -import java.util.ArrayList; -import java.util.List; - -public class TaskWorkContainer extends TaskWork implements ITaskWorkContainer { - - private List children = new ArrayList(); - - @Override - public List getChildren() { - return new ArrayList(children); - } - - @Override - public boolean isLeaf() { - return false; - } - - @Override - public void remove(TaskWork child) { - getManipulator().remove(child); - } - - @Override - public void replace(TaskWork oldTask, TaskWork newTask) { - getManipulator().replace(oldTask, newTask); - } - - @Override - public void add(TaskWork task) { - getManipulator().add(task); - } - - @Override - public void up(TaskWork task) { - getManipulator().up(task); - } - - private TaskWorkListManipulator getManipulator() { - return new TaskWorkListManipulator(children); - } - - @Override - public TaskWorkContainer asContainer() { - return this; - } - - @Override - public void down(TaskWork task) { - getManipulator().down(task); - } - - @Override - public void add(int position, TaskWork task) { - children.add(position, task); - } - - @Override - public Integer getWorkHours() { - int result = 0; - List children = getChildren(); - for (TaskWork taskWork : children) { - result += taskWork.getWorkHours(); - } - return result; - } - - @Override - public void forceLoadActivities() { - for (TaskWork taskWork : children) { - taskWork.forceLoadActivities(); - } - } - - @Override - public List getActivities() { - List activities = new ArrayList(); - for (TaskWork taskWork : children) { - activities.addAll(taskWork.getActivities()); - } - return activities; - } - -} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkLeaf.java b/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkLeaf.java deleted file mode 100644 index 2436deb35..000000000 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkLeaf.java +++ /dev/null @@ -1,97 +0,0 @@ -package org.navalplanner.business.workorders.entities; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class TaskWorkLeaf extends TaskWork { - - private Boolean fixedHours = false; - - private Set activityWorks = new HashSet(); - - @Override - public Integer getWorkHours() { - int result = 0; - List a = getActivities(); - for (ActivityWork activityWork : a) { - Integer workingHours = activityWork.getWorkingHours(); - if (workingHours != null) { - result += workingHours; - } - } - return result; - } - - @Override - public List getChildren() { - return new ArrayList(); - } - - @Override - public boolean isLeaf() { - return true; - } - - @Override - public TaskWorkContainer asContainer() { - TaskWorkContainer result = new TaskWorkContainer(); - result.setName(getName()); - result.setInitDate(getInitDate()); - result.setEndDate(getEndDate()); - // FIXME - // result.setActivities(getActivities()); - return result; - } - - public void setWorkHours(Integer workingHours) { - List activities = getActivities(); - - // FIXME For the moment we have just one activity for each TaksWorkLeaf - if (activities.isEmpty()) { - ActivityWork activity = new ActivityWork(); - activity.setWorkingHours(workingHours); - - activities.add(activity); - } else { - ActivityWork activity = activities.get(0); - activity.setWorkingHours(workingHours); - } - - setActivities(activities); - } - - public void setActivities(List activities) { - this.activityWorks = new HashSet(activities); - } - - public void addActivity(ActivityWork activityWork) { - activityWorks.add(activityWork); - } - - public void deleteActivity(ActivityWork value) { - activityWorks.remove(value); - } - - @Override - public List getActivities() { - return new ArrayList(activityWorks); - } - - @Override - public void forceLoadActivities() { - for (ActivityWork activityWork : activityWorks) { - activityWork.getWorkingHours(); - } - } - - public void setFixedHours(Boolean fixedHours) { - this.fixedHours = fixedHours; - } - - public Boolean isFixedHours() { - return fixedHours; - } - -} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkListManipulator.java b/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkListManipulator.java deleted file mode 100644 index 613bbaf2a..000000000 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkListManipulator.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.navalplanner.business.workorders.entities; - -import java.util.Collections; -import java.util.List; - -/** - * Implementation of {@link TaskWork}.
- * @author Óscar González Fernández - */ -public class TaskWorkListManipulator implements ITaskWorkContainer { - - private final List taskWorks; - - public TaskWorkListManipulator(List taskWorks) { - this.taskWorks = taskWorks; - - } - - @Override - public void add(TaskWork task) { - taskWorks.add(task); - } - - @Override - public void remove(TaskWork task) { - taskWorks.remove(task); - } - - @Override - public void replace(TaskWork oldTask, TaskWork newTask) { - Collections.replaceAll(taskWorks, oldTask, newTask); - } - - @Override - public void up(TaskWork task) { - int position = taskWorks.indexOf(task); - if (position < taskWorks.size() - 1) { - taskWorks.remove(position); - taskWorks.add(position + 1, task); - } - } - - @Override - public void down(TaskWork task) { - int position = taskWorks.indexOf(task); - if (position > 0) { - taskWorks.remove(position); - taskWorks.add(position - 1, task); - } - } - - @Override - public void add(int position, TaskWork task) { - taskWorks.add(position, task); - } - -} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/services/IProjectWorkService.java b/navalplanner-business/src/main/java/org/navalplanner/business/workorders/services/IProjectWorkService.java deleted file mode 100644 index 90b7dbafd..000000000 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/services/IProjectWorkService.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.navalplanner.business.workorders.services; - -import java.util.List; - -import org.navalplanner.business.common.OnTransaction; -import org.navalplanner.business.common.exceptions.InstanceNotFoundException; -import org.navalplanner.business.common.exceptions.ValidationException; -import org.navalplanner.business.workorders.entities.ProjectWork; - -/** - * Management of {@link ProjectWork}
- * @author Óscar González Fernández - */ -public interface IProjectWorkService { - - void save(ProjectWork projectWork) throws ValidationException; - - boolean exists(ProjectWork projectWork); - - List getProjectWorks(); - - void remove(ProjectWork projectWork) throws InstanceNotFoundException; - - ProjectWork find(Long workerId) throws InstanceNotFoundException; - - public T onTransaction(OnTransaction onTransaction); - -} diff --git a/navalplanner-business/src/main/resources/navalplanner-business-spring-config.xml b/navalplanner-business/src/main/resources/navalplanner-business-spring-config.xml index b123d34ac..014bf31d3 100644 --- a/navalplanner-business/src/main/resources/navalplanner-business-spring-config.xml +++ b/navalplanner-business/src/main/resources/navalplanner-business-spring-config.xml @@ -24,7 +24,7 @@ org/navalplanner/business/resources/entities/Resources.hbm.xml - org/navalplanner/business/workorders/entities/WorkOrders.hbm.xml + org/navalplanner/business/orders/entities/Orders.hbm.xml diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/workorders/entities/WorkOrders.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml similarity index 65% rename from navalplanner-business/src/main/resources/org/navalplanner/business/workorders/entities/WorkOrders.hbm.xml rename to navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml index bfdc03d3c..8b0c60d7b 100644 --- a/navalplanner-business/src/main/resources/org/navalplanner/business/workorders/entities/WorkOrders.hbm.xml +++ b/navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml @@ -1,8 +1,8 @@ - - - + + + @@ -12,14 +12,14 @@ - - - - + + + + - + @@ -31,28 +31,28 @@ - - + + - + - - + + - - - + + + - + diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderTest.java new file mode 100644 index 000000000..ea792e268 --- /dev/null +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderTest.java @@ -0,0 +1,42 @@ +package org.navalplanner.business.test.orders.entities; + +import org.junit.Test; +import org.navalplanner.business.orders.entities.Order; +import org.navalplanner.business.orders.entities.OrderElement; +import org.navalplanner.business.orders.entities.OrderLineGroup; +import org.navalplanner.business.orders.entities.OrderLine; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertThat; + +/** + * Tests for {@link Order}.
+ * @author Óscar González Fernández + */ +public class OrderTest { + + @Test + public void testAddingOrderElement() throws Exception { + Order order = new Order(); + OrderLineGroup container = new OrderLineGroup(); + OrderLine leaf = new OrderLine(); + container.add(leaf); + order.add(container); + assertThat(order.getOrderElements().size(), equalTo(1)); + } + + @Test + public void testPreservesOrder() throws Exception { + OrderLineGroup container = new OrderLineGroup(); + + OrderLine[] created = new OrderLine[100]; + for (int i = 0; i < created.length; i++) { + created[i] = new OrderLine(); + container.add(created[i]); + } + for (int i = 0; i < created.length; i++) { + assertThat(container.getChildren().get(i), + equalTo((OrderElement) created[i])); + } + } +} diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/services/OrderServiceTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/services/OrderServiceTest.java new file mode 100644 index 000000000..250d89bd7 --- /dev/null +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/services/OrderServiceTest.java @@ -0,0 +1,187 @@ +package org.navalplanner.business.test.orders.services; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; +import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE; +import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE; + +import java.util.List; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.navalplanner.business.common.OnTransaction; +import org.navalplanner.business.common.exceptions.InstanceNotFoundException; +import org.navalplanner.business.common.exceptions.ValidationException; +import org.navalplanner.business.orders.entities.HoursGroup; +import org.navalplanner.business.orders.entities.Order; +import org.navalplanner.business.orders.entities.OrderElement; +import org.navalplanner.business.orders.entities.OrderLineGroup; +import org.navalplanner.business.orders.entities.OrderLine; +import org.navalplanner.business.orders.services.IOrderService; +import org.navalplanner.business.test.resources.daos.CriterionSatisfactionDAOTest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.NotTransactional; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +/** + * Tests for {@link Order}.
+ * @author Óscar González Fernández + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { BUSINESS_SPRING_CONFIG_FILE, + BUSINESS_SPRING_CONFIG_TEST_FILE }) +@Transactional +public class OrderServiceTest { + + private static Order createValidOrder() { + Order order = new Order(); + order.setDescription("description"); + order.setCustomer("blabla"); + order.setInitDate(CriterionSatisfactionDAOTest.year(2000)); + order.setName("name"); + order.setResponsible("responsible"); + return order; + } + + @Autowired + private IOrderService orderService; + + @Test + public void testCreation() throws ValidationException { + Order order = createValidOrder(); + orderService.save(order); + assertTrue(orderService.exists(order)); + } + + @Test + public void testListing() throws Exception { + List list = orderService.getOrders(); + orderService.save(createValidOrder()); + assertThat(orderService.getOrders().size(), equalTo(list + .size() + 1)); + } + + @Test + public void testRemove() throws Exception { + Order order = createValidOrder(); + orderService.save(order); + assertTrue(orderService.exists(order)); + orderService.remove(order); + assertFalse(orderService.exists(order)); + } + + @Test(expected = ValidationException.class) + public void shouldSendValidationExceptionIfEndDateIsBeforeThanStartingDate() + throws ValidationException { + Order order = createValidOrder(); + order.setEndDate(CriterionSatisfactionDAOTest.year(0)); + orderService.save(order); + } + + @Test + public void testFind() throws Exception { + Order order = createValidOrder(); + orderService.save(order); + assertThat(orderService.find(order.getId()), notNullValue()); + } + + @Test + @NotTransactional + public void testOrderPreserved() throws ValidationException, + InstanceNotFoundException { + final Order order = createValidOrder(); + final OrderElement[] containers = new OrderLineGroup[10]; + for (int i = 0; i < containers.length; i++) { + containers[i] = new OrderLineGroup(); + containers[i].setName("bla"); + order.add(containers[i]); + } + OrderLineGroup container = (OrderLineGroup) containers[0]; + container.setName("container"); + final OrderElement[] orderElements = new OrderElement[10]; + for (int i = 0; i < orderElements.length; i++) { + OrderLine leaf = createValidLeaf("bla"); + orderElements[i] = leaf; + container.add(leaf); + } + orderService.save(order); + orderService.onTransaction(new OnTransaction() { + + @Override + public Void execute() { + try { + Order reloaded = orderService.find(order + .getId()); + List elements = reloaded.getOrderElements(); + for (int i = 0; i < containers.length; i++) { + assertThat(elements.get(i).getId(), + equalTo(containers[i].getId())); + } + OrderLineGroup container = (OrderLineGroup) reloaded + .getOrderElements().iterator().next(); + List children = container.getChildren(); + for (int i = 0; i < orderElements.length; i++) { + assertThat(children.get(i).getId(), equalTo(orderElements[i] + .getId())); + } + return null; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + }); + orderService.remove(order); + } + + private OrderLine createValidLeaf(String parameter) { + OrderLine result = new OrderLine(); + result.setName(parameter); + return result; + } + + @Test + @NotTransactional + public void testAddingOrderElement() throws Exception { + final Order order = createValidOrder(); + OrderLineGroup container = new OrderLineGroup(); + container.setName("bla"); + OrderLine leaf = new OrderLine(); + leaf.setName("leaf"); + container.add(leaf); + order.add(container); + HoursGroup hoursGroup = new HoursGroup(); + hoursGroup.setWorkingHours(3); + leaf.addHoursGroup(hoursGroup); + orderService.save(order); + orderService.onTransaction(new OnTransaction() { + + @Override + public Void execute() { + try { + Order reloaded = orderService.find(order + .getId()); + assertFalse(order == reloaded); + assertThat(reloaded.getOrderElements().size(), equalTo(1)); + OrderLineGroup containerReloaded = (OrderLineGroup) reloaded + .getOrderElements().get(0); + assertThat(containerReloaded.getHoursGroups().size(), + equalTo(1)); + assertThat(containerReloaded.getChildren().size(), + equalTo(1)); + OrderElement leaf = containerReloaded.getChildren().get(0); + assertThat(leaf.getHoursGroups().size(), equalTo(1)); + orderService.remove(order); + } catch (InstanceNotFoundException e) { + throw new RuntimeException(e); + } + return null; + } + }); + } +} diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/workorders/entities/ProjectWorkTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/workorders/entities/ProjectWorkTest.java deleted file mode 100644 index 398c1af05..000000000 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/workorders/entities/ProjectWorkTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.navalplanner.business.test.workorders.entities; - -import org.junit.Test; -import org.navalplanner.business.workorders.entities.ProjectWork; -import org.navalplanner.business.workorders.entities.TaskWork; -import org.navalplanner.business.workorders.entities.TaskWorkContainer; -import org.navalplanner.business.workorders.entities.TaskWorkLeaf; - -import static org.hamcrest.CoreMatchers.equalTo; -import static org.junit.Assert.assertThat; - -/** - * Tests for {@link ProjectWork}.
- * @author Óscar González Fernández - */ -public class ProjectWorkTest { - - @Test - public void testAddingTaskWork() throws Exception { - ProjectWork projectWork = new ProjectWork(); - TaskWorkContainer container = new TaskWorkContainer(); - TaskWorkLeaf leaf = new TaskWorkLeaf(); - container.add(leaf); - projectWork.add(container); - assertThat(projectWork.getTaskWorks().size(), equalTo(1)); - } - - @Test - public void testPreservesOrder() throws Exception { - TaskWorkContainer container = new TaskWorkContainer(); - - TaskWorkLeaf[] created = new TaskWorkLeaf[100]; - for (int i = 0; i < created.length; i++) { - created[i] = new TaskWorkLeaf(); - container.add(created[i]); - } - for (int i = 0; i < created.length; i++) { - assertThat(container.getChildren().get(i), - equalTo((TaskWork) created[i])); - } - } -} diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/workorders/services/ProjectWorkServiceTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/workorders/services/ProjectWorkServiceTest.java deleted file mode 100644 index 77ed835aa..000000000 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/workorders/services/ProjectWorkServiceTest.java +++ /dev/null @@ -1,187 +0,0 @@ -package org.navalplanner.business.test.workorders.services; - -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; -import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE; -import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE; - -import java.util.List; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.navalplanner.business.common.OnTransaction; -import org.navalplanner.business.common.exceptions.InstanceNotFoundException; -import org.navalplanner.business.common.exceptions.ValidationException; -import org.navalplanner.business.test.resources.daos.CriterionSatisfactionDAOTest; -import org.navalplanner.business.workorders.entities.ActivityWork; -import org.navalplanner.business.workorders.entities.ProjectWork; -import org.navalplanner.business.workorders.entities.TaskWork; -import org.navalplanner.business.workorders.entities.TaskWorkContainer; -import org.navalplanner.business.workorders.entities.TaskWorkLeaf; -import org.navalplanner.business.workorders.services.IProjectWorkService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.annotation.NotTransactional; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.transaction.annotation.Transactional; - -/** - * Tests for {@link ProjectWork}.
- * @author Óscar González Fernández - */ -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(locations = { BUSINESS_SPRING_CONFIG_FILE, - BUSINESS_SPRING_CONFIG_TEST_FILE }) -@Transactional -public class ProjectWorkServiceTest { - - private static ProjectWork createValidProjectWork() { - ProjectWork projectWork = new ProjectWork(); - projectWork.setDescription("description"); - projectWork.setCustomer("blabla"); - projectWork.setInitDate(CriterionSatisfactionDAOTest.year(2000)); - projectWork.setName("name"); - projectWork.setResponsible("responsible"); - return projectWork; - } - - @Autowired - private IProjectWorkService projectWorkService; - - @Test - public void testCreation() throws ValidationException { - ProjectWork projectWork = createValidProjectWork(); - projectWorkService.save(projectWork); - assertTrue(projectWorkService.exists(projectWork)); - } - - @Test - public void testListing() throws Exception { - List list = projectWorkService.getProjectWorks(); - projectWorkService.save(createValidProjectWork()); - assertThat(projectWorkService.getProjectWorks().size(), equalTo(list - .size() + 1)); - } - - @Test - public void testRemove() throws Exception { - ProjectWork projectWork = createValidProjectWork(); - projectWorkService.save(projectWork); - assertTrue(projectWorkService.exists(projectWork)); - projectWorkService.remove(projectWork); - assertFalse(projectWorkService.exists(projectWork)); - } - - @Test(expected = ValidationException.class) - public void shouldSendValidationExceptionIfEndDateIsBeforeThanStartingDate() - throws ValidationException { - ProjectWork projectWork = createValidProjectWork(); - projectWork.setEndDate(CriterionSatisfactionDAOTest.year(0)); - projectWorkService.save(projectWork); - } - - @Test - public void testFind() throws Exception { - ProjectWork projectWork = createValidProjectWork(); - projectWorkService.save(projectWork); - assertThat(projectWorkService.find(projectWork.getId()), notNullValue()); - } - - @Test - @NotTransactional - public void testOrderPreserved() throws ValidationException, - InstanceNotFoundException { - final ProjectWork projectWork = createValidProjectWork(); - final TaskWork[] containers = new TaskWorkContainer[10]; - for (int i = 0; i < containers.length; i++) { - containers[i] = new TaskWorkContainer(); - containers[i].setName("bla"); - projectWork.add(containers[i]); - } - TaskWorkContainer container = (TaskWorkContainer) containers[0]; - container.setName("container"); - final TaskWork[] tasks = new TaskWork[10]; - for (int i = 0; i < tasks.length; i++) { - TaskWorkLeaf leaf = createValidLeaf("bla"); - tasks[i] = leaf; - container.add(leaf); - } - projectWorkService.save(projectWork); - projectWorkService.onTransaction(new OnTransaction() { - - @Override - public Void execute() { - try { - ProjectWork reloaded = projectWorkService.find(projectWork - .getId()); - List taskWorks = reloaded.getTaskWorks(); - for (int i = 0; i < containers.length; i++) { - assertThat(taskWorks.get(i).getId(), - equalTo(containers[i].getId())); - } - TaskWorkContainer container = (TaskWorkContainer) reloaded - .getTaskWorks().iterator().next(); - List children = container.getChildren(); - for (int i = 0; i < tasks.length; i++) { - assertThat(children.get(i).getId(), equalTo(tasks[i] - .getId())); - } - return null; - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - }); - projectWorkService.remove(projectWork); - } - - private TaskWorkLeaf createValidLeaf(String parameter) { - TaskWorkLeaf result = new TaskWorkLeaf(); - result.setName(parameter); - return result; - } - - @Test - @NotTransactional - public void testAddingTaskWork() throws Exception { - final ProjectWork projectWork = createValidProjectWork(); - TaskWorkContainer container = new TaskWorkContainer(); - container.setName("bla"); - TaskWorkLeaf leaf = new TaskWorkLeaf(); - leaf.setName("leaf"); - container.add(leaf); - projectWork.add(container); - ActivityWork activityWork = new ActivityWork(); - activityWork.setWorkingHours(3); - leaf.addActivity(activityWork); - projectWorkService.save(projectWork); - projectWorkService.onTransaction(new OnTransaction() { - - @Override - public Void execute() { - try { - ProjectWork reloaded = projectWorkService.find(projectWork - .getId()); - assertFalse(projectWork == reloaded); - assertThat(reloaded.getTaskWorks().size(), equalTo(1)); - TaskWorkContainer containerReloaded = (TaskWorkContainer) reloaded - .getTaskWorks().get(0); - assertThat(containerReloaded.getActivities().size(), - equalTo(1)); - assertThat(containerReloaded.getChildren().size(), - equalTo(1)); - TaskWork leaf = containerReloaded.getChildren().get(0); - assertThat(leaf.getActivities().size(), equalTo(1)); - projectWorkService.remove(projectWork); - } catch (InstanceNotFoundException e) { - throw new RuntimeException(e); - } - return null; - } - }); - } -} diff --git a/navalplanner-business/src/test/resources/navalplanner-business-spring-config-test.xml b/navalplanner-business/src/test/resources/navalplanner-business-spring-config-test.xml index 161c5d40a..78946c8fd 100644 --- a/navalplanner-business/src/test/resources/navalplanner-business-spring-config-test.xml +++ b/navalplanner-business/src/test/resources/navalplanner-business-spring-config-test.xml @@ -30,7 +30,7 @@ org/navalplanner/business/resources/entities/Resources.hbm.xml - org/navalplanner/business/workorders/entities/WorkOrders.hbm.xml + org/navalplanner/business/orders/entities/Orders.hbm.xml diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/ProjectWorkConverter.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/ProjectWorkConverter.java index ec915cd42..9c87e0a89 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/ProjectWorkConverter.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/ProjectWorkConverter.java @@ -1,26 +1,26 @@ package org.navalplanner.web.common.converters; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; -import org.navalplanner.business.workorders.entities.ProjectWork; -import org.navalplanner.business.workorders.services.IProjectWorkService; +import org.navalplanner.business.orders.entities.Order; +import org.navalplanner.business.orders.services.IOrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; /** - * A {@link Converter} for {@link ProjectWork}
+ * A {@link Converter} for {@link Order}
* @author Óscar González Fernández */ @Component @Scope(BeanDefinition.SCOPE_SINGLETON) -public class ProjectWorkConverter implements Converter { +public class ProjectWorkConverter implements Converter { @Autowired - private IProjectWorkService projectWorkService; + private IOrderService projectWorkService; @Override - public ProjectWork asObject(String stringRepresentation) { + public Order asObject(String stringRepresentation) { try { return projectWorkService .find(Long.parseLong(stringRepresentation)); @@ -30,18 +30,18 @@ public class ProjectWorkConverter implements Converter { } @Override - public String asString(ProjectWork entity) { + public String asString(Order entity) { return entity.getId() + ""; } @Override public String asStringUngeneric(Object entity) { - return asString((ProjectWork) entity); + return asString((Order) entity); } @Override - public Class getType() { - return ProjectWork.class; + public Class getType() { + return Order.class; } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IOrderModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IOrderModel.java new file mode 100644 index 000000000..85ac102bc --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IOrderModel.java @@ -0,0 +1,31 @@ +package org.navalplanner.web.orders; + +import java.util.List; + +import org.navalplanner.business.common.exceptions.ValidationException; +import org.navalplanner.business.orders.entities.IOrderLineGroup; +import org.navalplanner.business.orders.entities.Order; + +/** + * Contract for {@link OrderModel}
+ * @author Óscar González Fernández + */ +public interface IOrderModel { + + List getOrders(); + + void prepareEditFor(Order order); + + void prepareForCreate(); + + void save() throws ValidationException; + + IOrderLineGroup getOrder(); + + void remove(Order order); + + void prepareForRemove(Order order); + + OrderElementModel getOrderElementTreeModel(); + +} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/ProjectWorkCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java similarity index 65% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/ProjectWorkCRUDController.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java index a6cd5069c..17cf77ba3 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/ProjectWorkCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java @@ -1,10 +1,10 @@ -package org.navalplanner.web.workorders; +package org.navalplanner.web.orders; import java.util.List; import org.navalplanner.business.common.exceptions.ValidationException; -import org.navalplanner.business.workorders.entities.ITaskWorkContainer; -import org.navalplanner.business.workorders.entities.ProjectWork; +import org.navalplanner.business.orders.entities.IOrderLineGroup; +import org.navalplanner.business.orders.entities.Order; import org.navalplanner.web.common.IMessagesForUser; import org.navalplanner.web.common.Level; import org.navalplanner.web.common.MessagesForUser; @@ -18,9 +18,9 @@ import org.zkoss.zul.api.Window; * Controller for CRUD actions
* @author Óscar González Fernández */ -public class ProjectWorkCRUDController extends GenericForwardComposer { +public class OrderCRUDController extends GenericForwardComposer { - private IProjectWorkModel projectWorkModel; + private IOrderModel orderModel; private IMessagesForUser messagesForUser; @@ -36,8 +36,8 @@ public class ProjectWorkCRUDController extends GenericForwardComposer { private Window confirmRemove; - public List getProjects() { - return projectWorkModel.getProjects(); + public List getOrders() { + return orderModel.getOrders(); } private OnlyOneVisible getVisibility() { @@ -48,14 +48,14 @@ public class ProjectWorkCRUDController extends GenericForwardComposer { return cachedOnlyOneVisible; } - public ITaskWorkContainer getProject() { - return projectWorkModel.getProject(); + public IOrderLineGroup getOrder() { + return orderModel.getOrder(); } public void save() { try { - projectWorkModel.save(); - messagesForUser.showMessage(Level.INFO, "proxecto gardado"); + orderModel.save(); + messagesForUser.showMessage(Level.INFO, "order saved"); goToList(); } catch (ValidationException e) { messagesForUser.showInvalidValues(e); @@ -71,8 +71,8 @@ public class ProjectWorkCRUDController extends GenericForwardComposer { goToList(); } - public void confirmRemove(ProjectWork project) { - projectWorkModel.prepareForRemove(project); + public void confirmRemove(Order order) { + orderModel.prepareForRemove(order); showConfirmingWindow(); } @@ -103,22 +103,22 @@ public class ProjectWorkCRUDController extends GenericForwardComposer { } } - public void goToEditForm(ProjectWork project) { - projectWorkModel.prepareEditFor(project); + public void goToEditForm(Order order) { + orderModel.prepareEditFor(order); getVisibility().showOnly(editWindow); Util.reloadBindings(editWindow); } - public void remove(ProjectWork projectWork) { - projectWorkModel.remove(projectWork); + public void remove(Order order) { + orderModel.remove(order); hideConfirmingWindow(); Util.reloadBindings(listWindow); messagesForUser.showMessage(Level.INFO, "removed " - + projectWork.getName()); + + order.getName()); } public void goToCreateForm() { - projectWorkModel.prepareForCreate(); + orderModel.prepareForCreate(); getVisibility().showOnly(createWindow); Util.reloadBindings(createWindow); } @@ -130,20 +130,22 @@ public class ProjectWorkCRUDController extends GenericForwardComposer { comp.setVariable("controller", this, true); getVisibility().showOnly(listWindow); - TaskWorkController taskWorkController = new TaskWorkController(); - taskWorkController.doAfterCompose(comp.getFellow("editTaskWorkPopup")); + OrderElementController orderElementController = new OrderElementController(); + orderElementController.doAfterCompose(comp + .getFellow("editOrderElementPopup")); - setupTaskTreeController(comp, "editWindow", taskWorkController); - setupTaskTreeController(comp, "createWindow", taskWorkController); + setupOrderElementTreeController(comp, "editWindow", orderElementController); + setupOrderElementTreeController(comp, "createWindow", orderElementController); } - private void setupTaskTreeController(Component comp, String window, - TaskWorkController taskWorkController) + private void setupOrderElementTreeController(Component comp, String window, + OrderElementController orderElementController) throws Exception { - TaskWorksTreeController controller = new TaskWorksTreeController( - projectWorkModel, taskWorkController); + OrderElementTreeController controller = new OrderElementTreeController( + orderModel, orderElementController); controller - .doAfterCompose(comp.getFellow(window).getFellow("tasksTree")); + .doAfterCompose(comp.getFellow(window).getFellow( + "orderElementTree")); } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/TaskWorkController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementController.java similarity index 66% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/TaskWorkController.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementController.java index aada6923c..4fb926d7e 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/TaskWorkController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementController.java @@ -1,16 +1,16 @@ -package org.navalplanner.web.workorders; +package org.navalplanner.web.orders; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Set; -import org.navalplanner.business.workorders.entities.ActivityWork; -import org.navalplanner.business.workorders.entities.ProjectWork; -import org.navalplanner.business.workorders.entities.TaskWork; -import org.navalplanner.business.workorders.entities.TaskWorkContainer; -import org.navalplanner.business.workorders.entities.TaskWorkLeaf; -import org.navalplanner.business.workorders.entities.ActivityWork.HoursPolicies; +import org.navalplanner.business.orders.entities.HoursGroup; +import org.navalplanner.business.orders.entities.Order; +import org.navalplanner.business.orders.entities.OrderElement; +import org.navalplanner.business.orders.entities.OrderLine; +import org.navalplanner.business.orders.entities.OrderLineGroup; +import org.navalplanner.business.orders.entities.HoursGroup.HoursPolicies; import org.navalplanner.web.common.Util; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; @@ -29,47 +29,47 @@ import org.zkoss.zul.Popup; import org.zkoss.zul.Textbox; /** - * Controller for {@link TaskWork} view of {@link ProjectWork} entities
+ * Controller for {@link OrderElement} view of {@link Order} entities
* * @author Manuel Rego Casasnovas */ -public class TaskWorkController extends GenericForwardComposer { +public class OrderElementController extends GenericForwardComposer { /** - * {@link TaskWork} that is managed + * {@link OrderElement} that is managed */ - private TaskWork taskWork; + private OrderElement orderElement; /** - * {@link Popup} where {@link TaskWork} edition form is showed + * {@link Popup} where {@link OrderElement} edition form is showed */ private Popup popup; /** - * Model of the {@link ActivityWork} list + * Model of the {@link HoursGroup} list */ - private List activityWorksModel; + private List hoursGroupsModel; /** - * {@link Listitem} for every {@link ActivityWork} + * {@link Listitem} for every {@link HoursGroup} */ - private AcitivyWorkListitemRender renderer = new AcitivyWorkListitemRender(); + private HoursGroupListitemRender renderer = new HoursGroupListitemRender(); /** - * {@link Listbox} where {@link ActivityWork} are shown + * {@link Listbox} where {@link HoursGroup} are shown */ - private Listbox activityWorksListbox; + private Listbox hoursGroupsListbox; - public TaskWork getTaskWork() { - return taskWork; + public OrderElement getOrderElement() { + return orderElement; } - public List getActivityWorksModel() { - return activityWorksModel; + public List getHoursGroupsModel() { + return hoursGroupsModel; } - public AcitivyWorkListitemRender getRenderer() { + public HoursGroupListitemRender getRenderer() { return renderer; } @@ -77,43 +77,43 @@ public class TaskWorkController extends GenericForwardComposer { @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); - comp.setVariable("taskWorkController", this, true); + comp.setVariable("orderElementController", this, true); popup = (Popup) comp; } /** - * Open the popup to edit a {@link TaskWork}. If it's a - * {@link TaskWorkContainer} less fields will be enabled. + * Open the popup to edit a {@link OrderElement}. If it's a + * {@link OrderLineGroup} less fields will be enabled. * - * @param taskWork - * The {@link TaskWork} to be edited + * @param orderElement + * The {@link OrderElement} to be edited */ - public void openPopup(TaskWork taskWork) { - this.taskWork = taskWork; + public void openPopup(OrderElement orderElement) { + this.orderElement = orderElement; - this.activityWorksModel = taskWork.getActivities(); + this.hoursGroupsModel = orderElement.getHoursGroups(); // If is a container - if (taskWork instanceof TaskWorkContainer) { - // Disable fields just used in the TaskWorkLeaf + if (orderElement instanceof OrderLineGroup) { + // Disable fields just used in the OrderLine ((Textbox) popup.getFellow("totalHours")).setDisabled(true); // Hide not needed buttons popup.getFellow("manageCriterions").setVisible(false); - popup.getFellow("addActivityWork").setVisible(false); - popup.getFellow("deleteActivityWork").setVisible(false); + popup.getFellow("addHoursGroup").setVisible(false); + popup.getFellow("deleteHoursGroup").setVisible(false); } else { - // Enable fields just used in the TaskWorkLeaf + // Enable fields just used in the OrderLine ((Textbox) popup.getFellow("totalHours")).setDisabled(false); // Show needed buttons popup.getFellow("manageCriterions").setVisible(true); - popup.getFellow("addActivityWork").setVisible(true); - popup.getFellow("deleteActivityWork").setVisible(true); + popup.getFellow("addHoursGroup").setVisible(true); + popup.getFellow("deleteHoursGroup").setVisible(true); } - fillFixedHoursCheckbox(taskWork); + fillFixedHoursCheckbox(orderElement); Util.reloadBindings(popup); @@ -124,13 +124,13 @@ public class TaskWorkController extends GenericForwardComposer { * Private method that just fills the Div with id "fixedHoursCheckbox" in * the .zul. * - * If the parameter is a {@link TaskWorkLeaf} the method adds the needed + * If the parameter is a {@link OrderLine} the method adds the needed * checkbox. * - * @param taskWork - * {@link TaskWork} that is been rendered + * @param orderElement + * {@link OrderElement} that is been rendered */ - private void fillFixedHoursCheckbox(final TaskWork taskWork) { + private void fillFixedHoursCheckbox(final OrderElement orderElement) { // Get the Div with id "fixedHoursCheckbox" Component fixedHoursCheckbox = popup.getFellow("fixedHoursCheckbox"); @@ -144,20 +144,20 @@ public class TaskWorkController extends GenericForwardComposer { } // If is a leaf - if (taskWork instanceof TaskWorkLeaf) { + if (orderElement instanceof OrderLine) { // Add specific fields fixedHoursCheckbox.appendChild(Util.bind(new Checkbox(), new Util.Getter() { @Override public Boolean get() { - return ((TaskWorkLeaf) taskWork).isFixedHours(); + return ((OrderLine) orderElement).isFixedHours(); } }, new Util.Setter() { @Override public void set(Boolean value) { - ((TaskWorkLeaf) taskWork).setFixedHours(value); + ((OrderLine) orderElement).setFixedHours(value); } })); fixedHoursCheckbox.appendChild(new Label("Fixed hours")); @@ -181,48 +181,48 @@ public class TaskWorkController extends GenericForwardComposer { } /** - * Adds a new {@link ActivityWork} to the current {@link TaskWork} + * Adds a new {@link HoursGroup} to the current {@link OrderElement} * - * The {@link TaskWork} should be a {@link TaskWorkLeaf} + * The {@link OrderElement} should be a {@link OrderLine} */ - public void addActivityWork() { - ActivityWork activity = new ActivityWork(); + public void addHoursGroup() { + HoursGroup hoursGroup = new HoursGroup(); - ((TaskWorkLeaf) taskWork).addActivity(activity); + ((OrderLine) orderElement).addHoursGroup(hoursGroup); - this.activityWorksModel = taskWork.getActivities(); + this.hoursGroupsModel = orderElement.getHoursGroups(); Util.reloadBindings(popup); } /** - * Deletes the selected {@link ActivityWork} for the current - * {@link TaskWork} + * Deletes the selected {@link HoursGroup} for the current + * {@link OrderElement} * - * The {@link TaskWork} should be a {@link TaskWorkLeaf} + * The {@link OrderElement} should be a {@link OrderLine} */ - public void deleteActivityWorks() { - Set selectedItems = activityWorksListbox.getSelectedItems(); + public void deleteHoursGroups() { + Set selectedItems = hoursGroupsListbox.getSelectedItems(); for (Listitem item : selectedItems) { - ((TaskWorkLeaf) taskWork).deleteActivity((ActivityWork) item + ((OrderLine) orderElement).deleteHoursGroup((HoursGroup) item .getValue()); } - this.activityWorksModel = taskWork.getActivities(); + this.hoursGroupsModel = orderElement.getHoursGroups(); Util.reloadBindings(popup); } /** - * Represents every {@link AcitivyWork} with an edition form if needed + * Represents every {@link HoursGroup} with an edition form if needed * * @author Manuel Rego Casasnovas */ - public class AcitivyWorkListitemRender implements ListitemRenderer { + public class HoursGroupListitemRender implements ListitemRenderer { @Override public void render(Listitem item, Object data) throws Exception { - final ActivityWork activity = (ActivityWork) data; + final HoursGroup hoursGroup = (HoursGroup) data; - item.setValue(activity); + item.setValue(hoursGroup); Listcell cellWorkingHours = new Listcell(); cellWorkingHours.setParent(item); @@ -244,7 +244,7 @@ public class TaskWorkController extends GenericForwardComposer { } // If is a container - if (taskWork instanceof TaskWorkContainer) { + if (orderElement instanceof OrderLineGroup) { // Just getters are needed // Working hours @@ -253,7 +253,7 @@ public class TaskWorkController extends GenericForwardComposer { @Override public Integer get() { - return activity.getWorkingHours(); + return hoursGroup.getWorkingHours(); } })); @@ -263,12 +263,12 @@ public class TaskWorkController extends GenericForwardComposer { @Override public BigDecimal get() { - return activity.getPercentage(); + return hoursGroup.getPercentage(); } })); // Hours policy - hoursPolicyListBox.setSelectedIndex(activity.getHoursPolicy() + hoursPolicyListBox.setSelectedIndex(hoursGroup.getHoursPolicy() .ordinal()); hoursPolicyListBox.setDisabled(true); cellHoursPolicy.appendChild(hoursPolicyListBox); @@ -280,13 +280,13 @@ public class TaskWorkController extends GenericForwardComposer { @Override public Integer get() { - return activity.getWorkingHours(); + return hoursGroup.getWorkingHours(); } }, new Util.Setter() { @Override public void set(Integer value) { - activity.setWorkingHours(value); + hoursGroup.setWorkingHours(value); } }); @@ -295,18 +295,18 @@ public class TaskWorkController extends GenericForwardComposer { @Override public BigDecimal get() { - return activity.getPercentage(); + return hoursGroup.getPercentage(); } }, new Util.Setter() { @Override public void set(BigDecimal value) { - activity.setPercentage(value); + hoursGroup.setPercentage(value); } }); // Hours policy - hoursPolicyListBox.setSelectedIndex(activity.getHoursPolicy() + hoursPolicyListBox.setSelectedIndex(hoursGroup.getHoursPolicy() .ordinal()); hoursPolicyListBox.addEventListener(Events.ON_SELECT, new EventListener() { @@ -315,7 +315,7 @@ public class TaskWorkController extends GenericForwardComposer { public void onEvent(Event event) throws Exception { HoursPolicies policy = (HoursPolicies) hoursPolicyListBox .getSelectedItem().getValue(); - activity.setHoursPolicy(policy); + hoursGroup.setHoursPolicy(policy); // Disable components depending on the policy disableComponents(workingHours, percentage, diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/TaskTreeModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java similarity index 50% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/TaskTreeModel.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java index 8b6dcbb3d..a36447f37 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/TaskTreeModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java @@ -1,89 +1,90 @@ -package org.navalplanner.web.workorders; +package org.navalplanner.web.orders; import java.util.ArrayList; import java.util.List; -import org.navalplanner.business.workorders.entities.ITaskWorkContainer; -import org.navalplanner.business.workorders.entities.ProjectWork; -import org.navalplanner.business.workorders.entities.TaskWork; -import org.navalplanner.business.workorders.entities.TaskWorkContainer; -import org.navalplanner.business.workorders.entities.TaskWorkLeaf; +import org.navalplanner.business.orders.entities.IOrderLineGroup; +import org.navalplanner.business.orders.entities.Order; +import org.navalplanner.business.orders.entities.OrderElement; +import org.navalplanner.business.orders.entities.OrderLine; +import org.navalplanner.business.orders.entities.OrderLineGroup; import org.zkoss.zul.SimpleTreeModel; import org.zkoss.zul.SimpleTreeNode; /** - * Model for a the tasks tree for a project
+ * Model for a the {@link OrderElement} tree for a {@link Order}
+ * * @author Lorenzo Tilve Álvaro */ -public class TaskTreeModel extends SimpleTreeModel { +public class OrderElementModel extends SimpleTreeModel { - private static List asNodes(List taskWorks) { + private static List asNodes(List orderElements) { ArrayList result = new ArrayList(); - for (TaskWork taskWork : taskWorks) { - result.add(asNode(taskWork)); + for (OrderElement orderElement : orderElements) { + result.add(asNode(orderElement)); } return result; } - private static SimpleTreeNode asNode(TaskWork taskWork) { - taskWork.forceLoadActivities(); - return new SimpleTreeNode(taskWork, asNodes(taskWork.getChildren())); + private static SimpleTreeNode asNode(OrderElement orderElement) { + orderElement.forceLoadHourGroups(); + return new SimpleTreeNode(orderElement, asNodes(orderElement.getChildren())); } private static SimpleTreeNode createRootNodeAndDescendants( - ProjectWork project) { - return new SimpleTreeNode(project, asNodes(project.getTaskWorks())); + Order order) { + return new SimpleTreeNode(order, asNodes(order.getOrderElements())); } - public TaskTreeModel(ProjectWork projectWork) { - super(createRootNodeAndDescendants(projectWork)); + public OrderElementModel(Order order) { + super(createRootNodeAndDescendants(order)); } - public void reloadFromProjectWork() { - ProjectWork root = getRootAsProject(); + public void reloadFromOrder() { + Order root = getRootAsOrder(); SimpleTreeNode rootAsNode = getRootAsNode(); rootAsNode.getChildren().clear(); - rootAsNode.getChildren().addAll(asNodes(root.getTaskWorks())); + rootAsNode.getChildren().addAll(asNodes(root.getOrderElements())); } - public void addTask() { - addTaskAtImpl(getRootAsNode()); - reloadFromProjectWork(); + public void addOrderElement() { + addOrderElementAtImpl(getRootAsNode()); + reloadFromOrder(); } - private TaskWork createNewTask() { - TaskWork newTask = new TaskWorkLeaf(); - newTask.setName("Nova Tarefa"); - return newTask; + private OrderElement createNewOrderElement() { + OrderElement newOrderElement = new OrderLine(); + newOrderElement.setName("New Order Element"); + return newOrderElement; } - public void addTaskAt(SimpleTreeNode node) { - addTaskAtImpl(node); - reloadFromProjectWork(); + public void addOrderElementAt(SimpleTreeNode node) { + addOrderElementAtImpl(node); + reloadFromOrder(); } - private void addTaskAtImpl(SimpleTreeNode node) { - addTaskAtImpl(node, createNewTask()); + private void addOrderElementAtImpl(SimpleTreeNode node) { + addOrderElementAtImpl(node, createNewOrderElement()); } - private void addTaskAtImpl(SimpleTreeNode node, TaskWork task) { - addTaskAtImpl(node, task, node.getChildCount()); + private void addOrderElementAtImpl(SimpleTreeNode node, OrderElement orderElement) { + addOrderElementAtImpl(node, orderElement, node.getChildCount()); } - private void addTaskAtImpl(SimpleTreeNode destinationNode, TaskWork task, + private void addOrderElementAtImpl(SimpleTreeNode destinationNode, OrderElement orderElement, int position) { - ITaskWorkContainer container = turnIntoContainerIfNeeded(destinationNode); - container.add(position, task); + IOrderLineGroup container = turnIntoContainerIfNeeded(destinationNode); + container.add(position, orderElement); } - private ITaskWorkContainer turnIntoContainerIfNeeded( + private IOrderLineGroup turnIntoContainerIfNeeded( SimpleTreeNode selectedForTurningIntoContainer) { - ITaskWorkContainer parentContainer = asTaskContainer(getParent(selectedForTurningIntoContainer)); - if (selectedForTurningIntoContainer.getData() instanceof ITaskWorkContainer) - return (ITaskWorkContainer) selectedForTurningIntoContainer + IOrderLineGroup parentContainer = asOrderLineGroup(getParent(selectedForTurningIntoContainer)); + if (selectedForTurningIntoContainer.getData() instanceof IOrderLineGroup) + return (IOrderLineGroup) selectedForTurningIntoContainer .getData(); - TaskWork toBeTurned = asTask(selectedForTurningIntoContainer); - TaskWorkContainer asContainer = toBeTurned.asContainer(); + OrderElement toBeTurned = asOrderLine(selectedForTurningIntoContainer); + OrderLineGroup asContainer = toBeTurned.asContainer(); parentContainer.replace(toBeTurned, asContainer); return asContainer; } @@ -124,7 +125,7 @@ public class TaskTreeModel extends SimpleTreeModel { SimpleTreeNode destination = (SimpleTreeNode) parentOfSelected .getChildren().get(position - 1); moveImpl(nodeToIndent, destination, destination.getChildCount()); - reloadFromProjectWork(); + reloadFromOrder(); } public void unindent(SimpleTreeNode nodeToUnindent) { @@ -135,12 +136,12 @@ public class TaskTreeModel extends SimpleTreeModel { SimpleTreeNode destination = getParent(parent); moveImpl(nodeToUnindent, destination, destination.getChildren() .indexOf(parent) + 1); - reloadFromProjectWork(); + reloadFromOrder(); } public void move(SimpleTreeNode toBeMoved, SimpleTreeNode destination) { moveImpl(toBeMoved, destination, destination.getChildCount()); - reloadFromProjectWork(); + reloadFromOrder(); } private void moveImpl(SimpleTreeNode toBeMoved, SimpleTreeNode destination, @@ -149,7 +150,7 @@ public class TaskTreeModel extends SimpleTreeModel { return;// it's already moved } removeNodeImpl(toBeMoved); - addTaskAtImpl(destination, asTask(toBeMoved), position); + addOrderElementAtImpl(destination, asOrderLine(toBeMoved), position); } public int[] getPath(SimpleTreeNode destination) { @@ -158,27 +159,27 @@ public class TaskTreeModel extends SimpleTreeModel { } public void up(SimpleTreeNode node) { - ITaskWorkContainer taskWorkContainer = asTaskContainer(getParent(node)); - taskWorkContainer.up(asTask(node)); - reloadFromProjectWork(); + IOrderLineGroup orderLineGroup = asOrderLineGroup(getParent(node)); + orderLineGroup.up(asOrderLine(node)); + reloadFromOrder(); } public void down(SimpleTreeNode node) { - ITaskWorkContainer taskWorkContainer = asTaskContainer(getParent(node)); - taskWorkContainer.down(asTask(node)); - reloadFromProjectWork(); + IOrderLineGroup orderLineGroup = asOrderLineGroup(getParent(node)); + orderLineGroup.down(asOrderLine(node)); + reloadFromOrder(); } - private ProjectWork getRootAsProject() { - return (ProjectWork) getRootAsNode().getData(); + private Order getRootAsOrder() { + return (Order) getRootAsNode().getData(); } - private static TaskWork asTask(SimpleTreeNode node) { - return (TaskWork) node.getData(); + private static OrderElement asOrderLine(SimpleTreeNode node) { + return (OrderElement) node.getData(); } - private static ITaskWorkContainer asTaskContainer(SimpleTreeNode node) { - return (ITaskWorkContainer) node.getData(); + private static IOrderLineGroup asOrderLineGroup(SimpleTreeNode node) { + return (IOrderLineGroup) node.getData(); } private SimpleTreeNode getRootAsNode() { @@ -187,14 +188,14 @@ public class TaskTreeModel extends SimpleTreeModel { public void removeNode(SimpleTreeNode value) { removeNodeImpl(value); - reloadFromProjectWork(); + reloadFromOrder(); } private void removeNodeImpl(SimpleTreeNode value) { if (value == getRootAsNode()) return; - ITaskWorkContainer taskContainer = asTaskContainer(getParent(value)); - taskContainer.remove(asTask(value)); + IOrderLineGroup orderLineGroup = asOrderLineGroup(getParent(value)); + orderLineGroup.remove(asOrderLine(value)); } } \ No newline at end of file diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/TaskWorksTreeController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java similarity index 76% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/TaskWorksTreeController.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java index 9515f14e0..037e1a766 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/TaskWorksTreeController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java @@ -1,4 +1,4 @@ -package org.navalplanner.web.workorders; +package org.navalplanner.web.orders; import java.util.Date; import java.util.HashMap; @@ -8,9 +8,9 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.navalplanner.business.workorders.entities.ProjectWork; -import org.navalplanner.business.workorders.entities.TaskWork; -import org.navalplanner.business.workorders.entities.TaskWorkLeaf; +import org.navalplanner.business.orders.entities.Order; +import org.navalplanner.business.orders.entities.OrderElement; +import org.navalplanner.business.orders.entities.OrderLine; import org.navalplanner.web.common.Util; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.DropEvent; @@ -29,49 +29,49 @@ import org.zkoss.zul.Treerow; import org.zkoss.zul.api.Tree; /** - * Controller for {@link WorkOrganization} view of WorkOrder entities
+ * Controller for {@link OrderElement} tree view of {@link Order} entities
* * @author Lorenzo Tilve Álvaro * @author Manuel Rego Casasnovas */ -public class TaskWorksTreeController extends GenericForwardComposer { +public class OrderElementTreeController extends GenericForwardComposer { private Tree tree; - private TaskWorkTreeitemRenderer renderer = new TaskWorkTreeitemRenderer(); + private OrderElementTreeitemRenderer renderer = new OrderElementTreeitemRenderer(); private TreeViewStateSnapshot snapshotOfOpenedNodes; - private final IProjectWorkModel projectWorkModel; + private final IOrderModel orderModel; - private final TaskWorkController taskWorkController; + private final OrderElementController orderElementController; - public TaskWorkTreeitemRenderer getRenderer() { + public OrderElementTreeitemRenderer getRenderer() { return renderer; } - public TaskWorksTreeController(IProjectWorkModel projectWorkModel, - TaskWorkController taskWorkController) { - this.projectWorkModel = projectWorkModel; - this.taskWorkController = taskWorkController; + public OrderElementTreeController(IOrderModel orderModel, + OrderElementController orderElementController) { + this.orderModel = orderModel; + this.orderElementController = orderElementController; } public void indent() { snapshotOfOpenedNodes = TreeViewStateSnapshot.snapshotOpened(tree); if (tree.getSelectedCount() == 1) { - getTasksTreeModel().indent(getSelectedNode()); + getOrderElementTreeModel().indent(getSelectedNode()); Util.reloadBindings(tree); } } - public TaskTreeModel getTasksTreeModel() { - return projectWorkModel.getTasksTreeModel(); + public OrderElementModel getOrderElementTreeModel() { + return orderModel.getOrderElementTreeModel(); } public void unindent() { snapshotOfOpenedNodes = TreeViewStateSnapshot.snapshotOpened(tree); if (tree.getSelectedCount() == 1) { - getTasksTreeModel().unindent(getSelectedNode()); + getOrderElementTreeModel().unindent(getSelectedNode()); Util.reloadBindings(tree); } } @@ -79,7 +79,7 @@ public class TaskWorksTreeController extends GenericForwardComposer { public void up() { snapshotOfOpenedNodes = TreeViewStateSnapshot.snapshotOpened(tree); if (tree.getSelectedCount() == 1) { - getTasksTreeModel().up(getSelectedNode()); + getOrderElementTreeModel().up(getSelectedNode()); Util.reloadBindings(tree); } } @@ -87,7 +87,7 @@ public class TaskWorksTreeController extends GenericForwardComposer { public void down() { snapshotOfOpenedNodes = TreeViewStateSnapshot.snapshotOpened(tree); if (tree.getSelectedCount() == 1) { - getTasksTreeModel().down(getSelectedNode()); + getOrderElementTreeModel().down(getSelectedNode()); Util.reloadBindings(tree); } } @@ -104,16 +104,16 @@ public class TaskWorksTreeController extends GenericForwardComposer { .getValue(); SimpleTreeNode toNode = (SimpleTreeNode) ((Treeitem) to.getParent()) .getValue(); - getTasksTreeModel().move(fromNode, toNode); + getOrderElementTreeModel().move(fromNode, toNode); Util.reloadBindings(tree); } - public void addTaskWork() { + public void addOrderElement() { snapshotOfOpenedNodes = TreeViewStateSnapshot.snapshotOpened(tree); if (tree.getSelectedCount() == 1) { - getTasksTreeModel().addTaskAt(getSelectedNode()); + getOrderElementTreeModel().addOrderElementAt(getSelectedNode()); } else { - getTasksTreeModel().addTask(); + getOrderElementTreeModel().addOrderElement(); } Util.reloadBindings(tree); } @@ -162,86 +162,86 @@ public class TaskWorksTreeController extends GenericForwardComposer { } } - public void removeTaskWork() { + public void removeOrderElement() { Set selectedItems = tree.getSelectedItems(); for (Treeitem treeItem : selectedItems) { SimpleTreeNode value = (SimpleTreeNode) treeItem.getValue(); - getTasksTreeModel().removeNode(value); + getOrderElementTreeModel().removeNode(value); } Util.reloadBindings(tree); } - void doEditFor(ProjectWork projectWork) { + void doEditFor(Order order) { Util.reloadBindings(tree); } @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); - comp.setVariable("tasksTreeController", this, true); + comp.setVariable("orderElementTreeController", this, true); } - public class TaskWorkTreeitemRenderer implements TreeitemRenderer { + public class OrderElementTreeitemRenderer implements TreeitemRenderer { private Map map = new HashMap(); - public void TaskWorkTreeitemRenderer() { + public OrderElementTreeitemRenderer() { } @Override public void render(Treeitem item, Object data) throws Exception { final SimpleTreeNode t = (SimpleTreeNode) data; item.setValue(data); - final TaskWork taskWork = (TaskWork) t.getData(); + final OrderElement orderElement = (OrderElement) t.getData(); if (snapshotOfOpenedNodes != null) { snapshotOfOpenedNodes.openIfRequired(item); } - // Contruct treecells - int[] path = getTasksTreeModel().getPath(t); + // Construct treecells + int[] path = getOrderElementTreeModel().getPath(t); Treecell cellForName = new Treecell(pathAsString(path)); cellForName.appendChild(Util.bind(new Textbox(), new Util.Getter() { @Override public String get() { - return taskWork.getName(); + return orderElement.getName(); } }, new Util.Setter() { @Override public void set(String value) { - taskWork.setName(value); + orderElement.setName(value); } })); Treecell cellForHours = new Treecell(); Intbox intboxHours = new Intbox(); map.put(t, intboxHours); - if (taskWork instanceof TaskWorkLeaf) { + if (orderElement instanceof OrderLine) { // If it's a leaf hours cell is editable cellForHours.appendChild(Util.bind(intboxHours, new Util.Getter() { @Override public Integer get() { - return taskWork.getWorkHours(); + return orderElement.getWorkHours(); } }, new Util.Setter() { @Override public void set(Integer value) { - ((TaskWorkLeaf) taskWork).setWorkHours(value); + ((OrderLine) orderElement).setWorkHours(value); - List parentNodes = getTasksTreeModel() + List parentNodes = getOrderElementTreeModel() .getParents(t); - // Remove the last element becuase it's a - // ProjectWork node, not a TaskWork + // Remove the last element becuase it's an + // Order node, not an OrderElement parentNodes.remove(parentNodes.size() - 1); for (SimpleTreeNode node : parentNodes) { Intbox intbox = map.get(node); - TaskWork parentTaskWork = (TaskWork) node + OrderElement parentOrderElement = (OrderElement) node .getData(); - intbox.setValue(parentTaskWork + intbox.setValue(parentOrderElement .getWorkHours()); } } @@ -253,7 +253,7 @@ public class TaskWorksTreeController extends GenericForwardComposer { @Override public Integer get() { - return taskWork.getWorkHours(); + return orderElement.getWorkHours(); } })); } @@ -263,13 +263,13 @@ public class TaskWorksTreeController extends GenericForwardComposer { @Override public Date get() { - return taskWork.getInitDate(); + return orderElement.getInitDate(); } }, new Util.Setter() { @Override public void set(Date value) { - taskWork.setInitDate(value); + orderElement.setInitDate(value); } })); Treecell tcDateEnd = new Treecell(); @@ -278,13 +278,13 @@ public class TaskWorksTreeController extends GenericForwardComposer { @Override public Date get() { - return taskWork.getEndDate(); + return orderElement.getEndDate(); } }, new Util.Setter() { @Override public void set(Date value) { - taskWork.setEndDate(value); + orderElement.setEndDate(value); } })); @@ -326,7 +326,7 @@ public class TaskWorksTreeController extends GenericForwardComposer { @Override public void onEvent(Event event) throws Exception { - taskWorkController.openPopup(taskWork); + orderElementController.openPopup(orderElement); } }); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java new file mode 100644 index 000000000..e0f38e98e --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java @@ -0,0 +1,102 @@ +package org.navalplanner.web.orders; + +import java.util.Date; +import java.util.List; + +import org.apache.commons.lang.Validate; +import org.hibernate.validator.ClassValidator; +import org.hibernate.validator.InvalidValue; +import org.navalplanner.business.common.exceptions.InstanceNotFoundException; +import org.navalplanner.business.common.exceptions.ValidationException; +import org.navalplanner.business.orders.entities.IOrderLineGroup; +import org.navalplanner.business.orders.entities.Order; +import org.navalplanner.business.orders.services.IOrderService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * Model for UI operations related to {@link Order}.
+ * @author Óscar González Fernández + */ +@Component +@Scope(BeanDefinition.SCOPE_PROTOTYPE) +public class OrderModel implements IOrderModel { + + private final IOrderService orderService; + + private Order order; + + private ClassValidator orderValidator = new ClassValidator( + Order.class); + + private OrderElementModel orderElementTreeModel; + + @Autowired + public OrderModel(IOrderService orderService) { + Validate.notNull(orderService); + this.orderService = orderService; + } + + @Override + @Transactional(readOnly = true) + public List getOrders() { + return orderService.getOrders(); + } + + @Override + @Transactional(readOnly = true) + public void prepareEditFor(Order order) { + Validate.notNull(order); + try { + this.order = orderService.find(order.getId()); + this.orderElementTreeModel = new OrderElementModel(this.order); + } catch (InstanceNotFoundException e) { + throw new RuntimeException(e); + } + } + + @Override + public void prepareForCreate() { + this.order = new Order(); + this.orderElementTreeModel = new OrderElementModel(this.order); + this.order.setInitDate(new Date()); + } + + @Override + @Transactional + public void save() throws ValidationException { + InvalidValue[] invalidValues = orderValidator + .getInvalidValues(order); + if (invalidValues.length > 0) + throw new ValidationException(invalidValues); + this.orderService.save(order); + } + + @Override + public IOrderLineGroup getOrder() { + return order; + } + + @Override + public void remove(Order order) { + try { + this.orderService.remove(order); + } catch (InstanceNotFoundException e) { + throw new RuntimeException(e); + } + } + + @Override + public void prepareForRemove(Order order) { + this.order = order; + } + + @Override + public OrderElementModel getOrderElementTreeModel() { + return orderElementTreeModel; + } + +} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/IProjectWorkModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/IProjectWorkModel.java deleted file mode 100644 index 277dc36c2..000000000 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/IProjectWorkModel.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.navalplanner.web.workorders; - -import java.util.List; - -import org.navalplanner.business.common.exceptions.ValidationException; -import org.navalplanner.business.workorders.entities.ITaskWorkContainer; -import org.navalplanner.business.workorders.entities.ProjectWork; - -/** - * Contract for {@link ProjectWorkModel}
- * @author Óscar González Fernández - */ -public interface IProjectWorkModel { - - List getProjects(); - - void prepareEditFor(ProjectWork project); - - void prepareForCreate(); - - void save() throws ValidationException; - - ITaskWorkContainer getProject(); - - void remove(ProjectWork projectWork); - - void prepareForRemove(ProjectWork project); - - TaskTreeModel getTasksTreeModel(); - -} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/ProjectWorkModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/ProjectWorkModel.java deleted file mode 100644 index d0791f707..000000000 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/ProjectWorkModel.java +++ /dev/null @@ -1,102 +0,0 @@ -package org.navalplanner.web.workorders; - -import java.util.Date; -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.hibernate.validator.ClassValidator; -import org.hibernate.validator.InvalidValue; -import org.navalplanner.business.common.exceptions.InstanceNotFoundException; -import org.navalplanner.business.common.exceptions.ValidationException; -import org.navalplanner.business.workorders.entities.ITaskWorkContainer; -import org.navalplanner.business.workorders.entities.ProjectWork; -import org.navalplanner.business.workorders.services.IProjectWorkService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; - -/** - * Model for UI operations related to {@link ProjectWork}.
- * @author Óscar González Fernández - */ -@Component -@Scope(BeanDefinition.SCOPE_PROTOTYPE) -public class ProjectWorkModel implements IProjectWorkModel { - - private final IProjectWorkService projectService; - - private ProjectWork project; - - private ClassValidator projectValidator = new ClassValidator( - ProjectWork.class); - - private TaskTreeModel tasksTreeModel; - - @Autowired - public ProjectWorkModel(IProjectWorkService projectService) { - Validate.notNull(projectService); - this.projectService = projectService; - } - - @Override - @Transactional(readOnly = true) - public List getProjects() { - return projectService.getProjectWorks(); - } - - @Override - @Transactional(readOnly = true) - public void prepareEditFor(ProjectWork project) { - Validate.notNull(project); - try { - this.project = projectService.find(project.getId()); - this.tasksTreeModel = new TaskTreeModel(this.project); - } catch (InstanceNotFoundException e) { - throw new RuntimeException(e); - } - } - - @Override - public void prepareForCreate() { - this.project = new ProjectWork(); - this.tasksTreeModel = new TaskTreeModel(this.project); - this.project.setInitDate(new Date()); - } - - @Override - @Transactional - public void save() throws ValidationException { - InvalidValue[] invalidValues = projectValidator - .getInvalidValues(project); - if (invalidValues.length > 0) - throw new ValidationException(invalidValues); - this.projectService.save(project); - } - - @Override - public ITaskWorkContainer getProject() { - return project; - } - - @Override - public void remove(ProjectWork projectWork) { - try { - this.projectService.remove(projectWork); - } catch (InstanceNotFoundException e) { - throw new RuntimeException(e); - } - } - - @Override - public void prepareForRemove(ProjectWork project) { - this.project = project; - } - - @Override - public TaskTreeModel getTasksTreeModel() { - return tasksTreeModel; - } - -} diff --git a/navalplanner-webapp/src/main/webapp/WEB-INF/i3-label.properties b/navalplanner-webapp/src/main/webapp/WEB-INF/i3-label.properties index 763c2febc..287427d58 100644 --- a/navalplanner-webapp/src/main/webapp/WEB-INF/i3-label.properties +++ b/navalplanner-webapp/src/main/webapp/WEB-INF/i3-label.properties @@ -29,5 +29,5 @@ mainmenu.help=Axuda mainmenu.about=Acerca de mainmenu.aclunaga=Aclunaga mainmenu.manage_criterions=Administrar criterios -mainmenu.workorders=Traballos -mainmenu.list_projects=Proxectos \ No newline at end of file +mainmenu.orders=Pedidos +mainmenu.list_orders=Lista de pedidos \ No newline at end of file diff --git a/navalplanner-webapp/src/main/webapp/WEB-INF/i3-label_en_US.properties b/navalplanner-webapp/src/main/webapp/WEB-INF/i3-label_en_US.properties index 9136891e7..6b0b7ba6d 100644 --- a/navalplanner-webapp/src/main/webapp/WEB-INF/i3-label_en_US.properties +++ b/navalplanner-webapp/src/main/webapp/WEB-INF/i3-label_en_US.properties @@ -29,5 +29,5 @@ mainmenu.help=Help mainmenu.about=About mainmenu.aclunaga=Aclunaga mainmenu.manage_criterions=Manage criterions -mainmenu.workorders=Work -mainmenu.list_projects=Projects \ No newline at end of file +mainmenu.orders=Orders +mainmenu.list_orders=Orders list \ No newline at end of file diff --git a/navalplanner-webapp/src/main/webapp/common/layout/template.zul b/navalplanner-webapp/src/main/webapp/common/layout/template.zul index 2a7ebcd72..50b561b2b 100644 --- a/navalplanner-webapp/src/main/webapp/common/layout/template.zul +++ b/navalplanner-webapp/src/main/webapp/common/layout/template.zul @@ -36,10 +36,10 @@ - + - + diff --git a/navalplanner-webapp/src/main/webapp/workorders/_editTaskWork.zul b/navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul similarity index 57% rename from navalplanner-webapp/src/main/webapp/workorders/_editTaskWork.zul rename to navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul index 948e283ec..9e5ec2b5c 100644 --- a/navalplanner-webapp/src/main/webapp/workorders/_editTaskWork.zul +++ b/navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul @@ -5,19 +5,19 @@