diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java index 011470870..7b26e3ee4 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java @@ -7,6 +7,7 @@ import java.util.List; import org.hibernate.validator.NotEmpty; import org.hibernate.validator.NotNull; import org.navalplanner.business.planner.entities.TaskElement; +import org.hibernate.validator.Valid; /** * It represents an {@link Order} with its related information.
@@ -25,6 +26,7 @@ public class Order implements IOrderLineGroup { @NotEmpty private String name; + @NotNull private Date initDate; @@ -37,6 +39,7 @@ public class Order implements IOrderLineGroup { // TODO turn into a many to one relationship when Customer entity is defined private String customer; + @Valid private List orderElements = new ArrayList(); public Long getId() { @@ -47,6 +50,7 @@ public class Order implements IOrderLineGroup { return version; } + public String getName() { return name; } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java index 7db05a52d..9cf943eef 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java @@ -6,7 +6,8 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import org.hibernate.validator.NotNull; + +import org.hibernate.validator.NotEmpty; import org.navalplanner.business.planner.entities.TaskElement; public abstract class OrderElement { @@ -15,7 +16,7 @@ public abstract class OrderElement { private Long version; - @NotNull + @NotEmpty private String name; private Date initDate; @@ -28,6 +29,7 @@ public abstract class OrderElement { private String description; + @NotEmpty private String code; private Set taskElements = new HashSet(); @@ -51,10 +53,19 @@ public abstract class OrderElement { return name; } + public void setName(String name) { this.name = name; } + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + public abstract boolean isLeaf(); public abstract List getChildren(); @@ -145,4 +156,12 @@ public abstract class OrderElement { return (getHoursGroups().size() > 0); } + public boolean isFormatCodeValid(String code) { + + if (code.contains("_")) return false; + if (code.equals("")) return false; + return true; + } + + } 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 index 327130692..9679b7f4e 100644 --- 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 @@ -45,12 +45,12 @@ public class OrderLine extends OrderElement { @Override public OrderLineGroup toContainer() { OrderLineGroup result = new OrderLineGroup(); - result.setName(getName()); + result.setCode(getCode()); result.setInitDate(getInitDate()); result.setEndDate(getEndDate()); + this.setCode(""); result.add(this); - return result; } 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 index c793cefa6..06523f8d3 100644 --- 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 @@ -101,6 +101,7 @@ public class OrderServiceTest { Order order = createValidOrder(); OrderLine orderLine = new OrderLine(); orderLine.setName("bla"); + orderLine.setCode("00000000"); orderLine.setWorkHours(10); order.add(orderLine); orderService.save(order); @@ -138,6 +139,7 @@ public class OrderServiceTest { for (int i = 0; i < containers.length; i++) { containers[i] = new OrderLineGroup(); containers[i].setName("bla"); + containers[i].setCode("000000000"); order.add(containers[i]); } OrderLineGroup container = (OrderLineGroup) containers[0]; @@ -192,6 +194,7 @@ public class OrderServiceTest { private OrderLine createValidLeaf(String parameter) { OrderLine result = new OrderLine(); result.setName(parameter); + result.setCode("000000000"); HoursGroup hoursGroup = new HoursGroup(result); hoursGroup.setWorkingHours(0); @@ -206,8 +209,10 @@ public class OrderServiceTest { final Order order = createValidOrder(); OrderLineGroup container = new OrderLineGroup(); container.setName("bla"); + container.setCode("000000000"); OrderLine leaf = new OrderLine(); leaf.setName("leaf"); + leaf.setCode("000000000"); container.add(leaf); order.add(container); HoursGroup hoursGroup = new HoursGroup(leaf); @@ -246,6 +251,7 @@ public class OrderServiceTest { OrderLine orderLine = new OrderLine(); orderLine.setName("Order element"); + orderLine.setCode("000000000"); order.add(orderLine); HoursGroup hoursGroup = new HoursGroup(orderLine); @@ -303,7 +309,7 @@ public class OrderServiceTest { OrderLine orderLine = new OrderLine(); orderLine.setName("foo"); - + orderLine.setCode("000000000"); order.add(orderLine); orderService.save(order); diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/services/TaskElementServiceTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/services/TaskElementServiceTest.java index f68e9fc0c..bcef0fa22 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/services/TaskElementServiceTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/services/TaskElementServiceTest.java @@ -80,6 +80,7 @@ public class TaskElementServiceTest { private OrderLine createOrderLine() { OrderLine orderLine = new OrderLine(); orderLine.setName("bla"); + orderLine.setCode("000000000"); orderLine.addHoursGroup(new HoursGroup()); Order order = new Order(); order.setName("bla"); @@ -176,6 +177,7 @@ public class TaskElementServiceTest { public void aOrderLineGroupIsConvertedToATaskGroup() { OrderLineGroup orderLineGroup = new OrderLineGroup(); orderLineGroup.setName("foo"); + orderLineGroup.setCode("000000000"); TaskElement task = taskElementService .convertToInitialSchedule(orderLineGroup); assertThat(task, is(TaskGroup.class)); @@ -189,6 +191,7 @@ public class TaskElementServiceTest { public void aOrderLineWithOneHourIsConvertedToATask() { OrderLine orderLine = new OrderLine(); orderLine.setName("bla"); + orderLine.setCode("000000000"); HoursGroup hoursGroup = createHoursGroup(30); orderLine.addHoursGroup(hoursGroup); TaskElement taskElement = taskElementService @@ -204,8 +207,10 @@ public class TaskElementServiceTest { public void theSublinesOfAnOrderLineGroupAreConverted() { OrderLineGroup orderLineGroup = new OrderLineGroup(); orderLineGroup.setName("foo"); + orderLineGroup.setCode("000000000"); OrderLine orderLine = new OrderLine(); orderLine.setName("bla"); + orderLine.setCode("000000000"); HoursGroup hoursGroup = createHoursGroup(30); orderLine.addHoursGroup(hoursGroup); orderLineGroup.add(orderLine); @@ -226,6 +231,7 @@ public class TaskElementServiceTest { public void aOrderLineWithNoHoursIsRejected() { OrderLine orderLine = new OrderLine(); orderLine.setName("bla"); + orderLine.setCode("000000000"); taskElementService.convertToInitialSchedule(orderLine); } @@ -239,6 +245,7 @@ public class TaskElementServiceTest { public void aOrderLineWithMoreThanOneHourIsConvertedToATaskGroup() { OrderLine orderLine = new OrderLine(); orderLine.setName("bla"); + orderLine.setCode("000000000"); HoursGroup hours1 = createHoursGroup(30); orderLine.addHoursGroup(hours1); HoursGroup hours2 = createHoursGroup(10); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java index ef5c681ae..82015416c 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java @@ -1,3 +1,4 @@ + package org.navalplanner.web.orders; import java.util.Date; @@ -49,6 +50,7 @@ public class OrderElementTreeController extends GenericForwardComposer { private final OrderElementController orderElementController; + public OrderElementTreeitemRenderer getRenderer() { return renderer; } @@ -117,7 +119,6 @@ public class OrderElementTreeController extends GenericForwardComposer { getOrderElementTreeModel().move(fromNode, toNode); } - Util.reloadBindings(tree); } @@ -125,7 +126,7 @@ public class OrderElementTreeController extends GenericForwardComposer { snapshotOfOpenedNodes = TreeViewStateSnapshot.snapshotOpened(tree); if (tree.getSelectedCount() == 1) { getOrderElementTreeModel().addOrderElementAt(getSelectedNode()); - } else { + }else { getOrderElementTreeModel().addOrderElement(); } Util.reloadBindings(tree); @@ -197,6 +198,7 @@ public class OrderElementTreeController extends GenericForwardComposer { public class OrderElementTreeitemRenderer implements TreeitemRenderer { private Map map = new HashMap(); + private Map mapC = new HashMap(); public OrderElementTreeitemRenderer() { } @@ -212,6 +214,7 @@ public class OrderElementTreeController extends GenericForwardComposer { // Construct treecells int[] path = getOrderElementTreeModel().getPath(t); String cssClass = "depth_"+path.length; + Treecell cellForName = new Treecell(); Label tasknumber = new Label(pathAsString(path)); tasknumber.setSclass("tasknumber"); @@ -233,6 +236,34 @@ public class OrderElementTreeController extends GenericForwardComposer { orderElement.setName(value); } })); + + Textbox textBoxCode = new Textbox(); + mapC.put(t, textBoxCode); + Treecell cellForCode = new Treecell(); + cellForCode.appendChild(Util.bind(textBoxCode, + new Util.Getter() { + + @Override + public String get() { + return orderElement.getCode(); + } + }, new Util.Setter() { + + @Override + public void set(String value) { + orderElement.setCode(value); + } + })); + + textBoxCode.setConstraint(new Constraint() { + + @Override + public void validate(Component comp, Object value) throws WrongValueException{ + if (!orderElement.isFormatCodeValid((String)value)){ + throw new WrongValueException(comp,"Value not is valid.\n The code can not contain chars like '_' \n and not must be empty"); } + } + }); + Treecell cellForHours = new Treecell(); Intbox intboxHours = new Intbox(); map.put(t, intboxHours); @@ -293,6 +324,7 @@ public class OrderElementTreeController extends GenericForwardComposer { } })); } + Treecell tcDateStart = new Treecell(); tcDateStart.appendChild(Util.bind(new Datebox(), new Util.Getter() { @@ -342,6 +374,7 @@ public class OrderElementTreeController extends GenericForwardComposer { tr.setDroppable("true"); cellForName.setParent(tr); + cellForCode.setParent(tr); tcDateStart.setParent(tr); tcDateEnd.setParent(tr); cellForHours.setParent(tr); diff --git a/navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul b/navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul index c5229e3fd..8f25b3ec1 100644 --- a/navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul +++ b/navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul @@ -10,8 +10,16 @@ + + +