diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/common/BaseEntity.java b/navalplanner-business/src/main/java/org/navalplanner/business/common/BaseEntity.java index d6c48c7de..3098c32c6 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/common/BaseEntity.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/common/BaseEntity.java @@ -2,7 +2,6 @@ package org.navalplanner.business.common; /** * TODO - * * @author Manuel Rego Casasnovas */ public abstract class BaseEntity { @@ -37,4 +36,13 @@ public abstract class BaseEntity { return newObject; } + /** + * Once the has been really saved in DB (not a readonly transaction), it + * could be necessary to unmark the object as newObject. This is the case if + * you must use the same instance after the transaction.
+ */ + public void dontPoseAsTransientObjectAnymore() { + setNewObject(false); + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java index b68a76705..2a7806db4 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java @@ -11,6 +11,12 @@ import org.navalplanner.business.resources.entities.ICriterionType; public class HoursGroup extends BaseEntity implements Cloneable { + public static HoursGroup create(OrderLine parentOrderLine) { + HoursGroup result = new HoursGroup(parentOrderLine); + result.setNewObject(true); + return result; + } + @NotNull private Integer workingHours = 0; @@ -29,7 +35,7 @@ public class HoursGroup extends BaseEntity implements Cloneable { public HoursGroup() { } - public HoursGroup(OrderLine parentOrderLine) { + private HoursGroup(OrderLine parentOrderLine) { this.parentOrderLine = parentOrderLine; } @@ -147,13 +153,4 @@ public class HoursGroup extends BaseEntity implements Cloneable { return parentOrderLine; } - public void makeTransientAgain() { - // FIXME Review reattachment - setVersion(null); - } - - public boolean isTransient() { - // FIXME Review reattachment - return getVersion() == null; - } } 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 2f930ac37..2637ae712 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 @@ -124,9 +124,6 @@ public abstract class OrderElement { // FIXME Review reattachment id = null; version = null; - for (HoursGroup hoursGroup : getHoursGroups()) { - hoursGroup.makeTransientAgain(); - } } public boolean isTransient() { @@ -134,18 +131,6 @@ public abstract class OrderElement { return id == null; } - public Set getTransientHoursGroups() { - // FIXME Review reattachment - Set transientHoursGroups = new HashSet(); - - for (HoursGroup hoursGroup : getHoursGroups()) { - if (hoursGroup.isTransient()) { - transientHoursGroups.add(hoursGroup); - } - } - return transientHoursGroups; - } - public Set getTaskElements() { return Collections.unmodifiableSet(taskElements); } 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 1dc3940ff..ee42ec430 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 @@ -85,7 +85,7 @@ public class OrderLine extends OrderElement { } if (hoursGroups.isEmpty()) { - HoursGroup hoursGroup = new HoursGroup(this); + HoursGroup hoursGroup = HoursGroup.create(this); hoursGroup.setWorkingHours(workHours); hoursGroup.setPercentage((new BigDecimal(1).setScale(2))); @@ -172,7 +172,7 @@ public class OrderLine extends OrderElement { newTotal = calculateTotalHours(newHoursGroups); if (newTotal.compareTo(workHours) < 0) { // Add a new HourGroup with the remaining hours - HoursGroup hoursGroup = new HoursGroup(this); + HoursGroup hoursGroup = HoursGroup.create(this); hoursGroup.setWorkingHours(workHours - newTotal); newHoursGroups.add(hoursGroup); @@ -307,7 +307,7 @@ public class OrderLine extends OrderElement { // If there's still some remaining hours if (newTotal.compareTo(total) < 0) { // Add a new HourGroup with the remaining hours - HoursGroup hoursGroup = new HoursGroup(this); + HoursGroup hoursGroup = HoursGroup.create(this); hoursGroup.setWorkingHours(total - newTotal); hoursGroups.add(hoursGroup); } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssigmentsToOrderElementTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssigmentsToOrderElementTest.java index 9397e4ffe..3cc347da9 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssigmentsToOrderElementTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssigmentsToOrderElementTest.java @@ -76,7 +76,7 @@ public class AddAdvanceAssigmentsToOrderElementTest { OrderLine result = new OrderLine(); result.setName(name); result.setCode(code); - HoursGroup hoursGroup = new HoursGroup(result); + HoursGroup hoursGroup = HoursGroup.create(result); hoursGroup.setWorkingHours(0); result.addHoursGroup(hoursGroup); return result; diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderLineTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderLineTest.java index 025a9a000..149546a7d 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderLineTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderLineTest.java @@ -76,7 +76,7 @@ public class OrderLineTest { public void testSetWorkHoursHoursGroupNoFixedIncreaseValue() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(100); orderLine.addHoursGroup(hoursGroup); @@ -102,7 +102,7 @@ public class OrderLineTest { public void testSetWorkHoursHoursGroupNoFixedDecreaseValue() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(100); orderLine.addHoursGroup(hoursGroup); @@ -129,7 +129,7 @@ public class OrderLineTest { public void testSetWorkHoursHoursGroupFixedPercentageIncreaseValue() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(100); orderLine.addHoursGroup(hoursGroup); @@ -161,7 +161,7 @@ public class OrderLineTest { public void testSetWorkHoursHoursGroupFixedPercentageDecreaseValue() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(100); orderLine.addHoursGroup(hoursGroup); @@ -194,9 +194,9 @@ public class OrderLineTest { public void testSetWorkHoursTwoHoursGroupNoFixedIncreaseValue() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(100); - HoursGroup hoursGroup2 = new HoursGroup(orderLine); + HoursGroup hoursGroup2 = HoursGroup.create(orderLine); hoursGroup2.setWorkingHours(50); orderLine.addHoursGroup(hoursGroup); orderLine.addHoursGroup(hoursGroup2); @@ -226,9 +226,9 @@ public class OrderLineTest { public void testSetWorkHoursTwoHoursGroupNoFixedDecreaseValue() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(100); - HoursGroup hoursGroup2 = new HoursGroup(orderLine); + HoursGroup hoursGroup2 = HoursGroup.create(orderLine); hoursGroup2.setWorkingHours(50); orderLine.addHoursGroup(hoursGroup); orderLine.addHoursGroup(hoursGroup2); @@ -258,9 +258,9 @@ public class OrderLineTest { public void testSetWorkHoursHoursGroupFixedPercentageAndHoursGroupNoFixedIncreaseValue() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(75); - HoursGroup hoursGroup2 = new HoursGroup(orderLine); + HoursGroup hoursGroup2 = HoursGroup.create(orderLine); hoursGroup2.setWorkingHours(25); orderLine.addHoursGroup(hoursGroup); orderLine.addHoursGroup(hoursGroup2); @@ -295,9 +295,9 @@ public class OrderLineTest { public void testSetWorkHoursHoursGroupFixedPercentageAndHoursGroupNoFixedDecreaseValue() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(75); - HoursGroup hoursGroup2 = new HoursGroup(orderLine); + HoursGroup hoursGroup2 = HoursGroup.create(orderLine); hoursGroup2.setWorkingHours(25); orderLine.addHoursGroup(hoursGroup); orderLine.addHoursGroup(hoursGroup2); @@ -332,9 +332,9 @@ public class OrderLineTest { public void testSetWorkHoursHoursGroupFixedPercentageAndHoursGroupFixedPercentageIncreaseValue() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(75); - HoursGroup hoursGroup2 = new HoursGroup(orderLine); + HoursGroup hoursGroup2 = HoursGroup.create(orderLine); hoursGroup2.setWorkingHours(25); orderLine.addHoursGroup(hoursGroup); orderLine.addHoursGroup(hoursGroup2); @@ -373,9 +373,9 @@ public class OrderLineTest { public void testSetWorkHoursHoursGroupFixedPercentageAndHoursGroupFixedPercentageDecreaseValue() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(75); - HoursGroup hoursGroup2 = new HoursGroup(orderLine); + HoursGroup hoursGroup2 = HoursGroup.create(orderLine); hoursGroup2.setWorkingHours(25); orderLine.addHoursGroup(hoursGroup); orderLine.addHoursGroup(hoursGroup2); @@ -415,11 +415,11 @@ public class OrderLineTest { public void testSetWorkHoursHoursGroupNoFixedAndHoursGroupNoFixedAndHoursGroupFixedPercentageIncreaseValue() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(50); - HoursGroup hoursGroup2 = new HoursGroup(orderLine); + HoursGroup hoursGroup2 = HoursGroup.create(orderLine); hoursGroup2.setWorkingHours(50); - HoursGroup hoursGroup3 = new HoursGroup(orderLine); + HoursGroup hoursGroup3 = HoursGroup.create(orderLine); hoursGroup3.setWorkingHours(100); orderLine.addHoursGroup(hoursGroup); orderLine.addHoursGroup(hoursGroup2); @@ -457,11 +457,11 @@ public class OrderLineTest { public void testSetWorkHoursHoursGroupNoFixedAndHoursGroupNoFixedAndHoursGroupFixedPercentageDecreaseValue() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(40); - HoursGroup hoursGroup2 = new HoursGroup(orderLine); + HoursGroup hoursGroup2 = HoursGroup.create(orderLine); hoursGroup2.setWorkingHours(60); - HoursGroup hoursGroup3 = new HoursGroup(orderLine); + HoursGroup hoursGroup3 = HoursGroup.create(orderLine); hoursGroup3.setWorkingHours(100); orderLine.addHoursGroup(hoursGroup); orderLine.addHoursGroup(hoursGroup2); @@ -499,11 +499,11 @@ public class OrderLineTest { public void testSetWorkHoursHoursGroupNoFixedAndHoursGroupFixedPercentageAndHoursGroupFixedPercentageIncreaseValue() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(50); - HoursGroup hoursGroup2 = new HoursGroup(orderLine); + HoursGroup hoursGroup2 = HoursGroup.create(orderLine); hoursGroup2.setWorkingHours(50); - HoursGroup hoursGroup3 = new HoursGroup(orderLine); + HoursGroup hoursGroup3 = HoursGroup.create(orderLine); hoursGroup3.setWorkingHours(100); orderLine.addHoursGroup(hoursGroup); orderLine.addHoursGroup(hoursGroup2); @@ -545,11 +545,11 @@ public class OrderLineTest { public void testSetWorkHoursHoursGroupNoFixedAndHoursGroupFixedPercentageAndHoursGroupFixedPercentageDecreaseValue() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(50); - HoursGroup hoursGroup2 = new HoursGroup(orderLine); + HoursGroup hoursGroup2 = HoursGroup.create(orderLine); hoursGroup2.setWorkingHours(50); - HoursGroup hoursGroup3 = new HoursGroup(orderLine); + HoursGroup hoursGroup3 = HoursGroup.create(orderLine); hoursGroup3.setWorkingHours(100); orderLine.addHoursGroup(hoursGroup); orderLine.addHoursGroup(hoursGroup2); @@ -590,9 +590,9 @@ public class OrderLineTest { public void testSetWorkHoursHoursGroupNoFixedZeroValue() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(0); - HoursGroup hoursGroup2 = new HoursGroup(orderLine); + HoursGroup hoursGroup2 = HoursGroup.create(orderLine); hoursGroup2.setWorkingHours(0); orderLine.addHoursGroup(hoursGroup); orderLine.addHoursGroup(hoursGroup2); @@ -615,7 +615,7 @@ public class OrderLineTest { @Test public void testAddNewEmptyHoursGroup() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); orderLine.addHoursGroup(hoursGroup); @@ -626,7 +626,7 @@ public class OrderLineTest { @Test public void testSetWorkingHoursIllegal() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); try { hoursGroup.setWorkingHours(-50); @@ -640,9 +640,9 @@ public class OrderLineTest { @Test public void testSetPercentageIllegal() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(50); - HoursGroup hoursGroup2 = new HoursGroup(orderLine); + HoursGroup hoursGroup2 = HoursGroup.create(orderLine); hoursGroup2.setWorkingHours(150); orderLine.addHoursGroup(hoursGroup); @@ -668,9 +668,9 @@ public class OrderLineTest { @Test public void testSetPercentageTwoHoursGroupIncrease() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(50); - HoursGroup hoursGroup2 = new HoursGroup(orderLine); + HoursGroup hoursGroup2 = HoursGroup.create(orderLine); hoursGroup2.setWorkingHours(150); orderLine.addHoursGroup(hoursGroup); @@ -692,9 +692,9 @@ public class OrderLineTest { @Test public void testSetPercentageTwoHoursGroupDecrease() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(50); - HoursGroup hoursGroup2 = new HoursGroup(orderLine); + HoursGroup hoursGroup2 = HoursGroup.create(orderLine); hoursGroup2.setWorkingHours(100); orderLine.addHoursGroup(hoursGroup); @@ -716,11 +716,11 @@ public class OrderLineTest { @Test public void testSetPercentageThreeHoursGroupIncrease() { OrderLine orderLine = new OrderLine(); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(50); - HoursGroup hoursGroup2 = new HoursGroup(orderLine); + HoursGroup hoursGroup2 = HoursGroup.create(orderLine); hoursGroup2.setWorkingHours(150); - HoursGroup hoursGroup3 = new HoursGroup(orderLine); + HoursGroup hoursGroup3 = HoursGroup.create(orderLine); hoursGroup3.setWorkingHours(200); orderLine.addHoursGroup(hoursGroup); 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 06523f8d3..3d9450087 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 @@ -25,6 +25,8 @@ 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.services.IOrderService; +import org.navalplanner.business.planner.entities.Task; +import org.navalplanner.business.planner.entities.TaskElement; import org.navalplanner.business.planner.services.ITaskElementService; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.CriterionType; @@ -111,6 +113,13 @@ public class OrderServiceTest { Order reloaded = orderService.find(order.getId()); OrderElement e = reloaded.getOrderElements().iterator().next(); assertThat(e.getTaskElements().size(), equalTo(1)); + Set taskElements = e.getTaskElements(); + for (TaskElement t : taskElements) { + if (t instanceof Task) { + Task task = (Task) t; + task.getHoursGroup().dontPoseAsTransientObjectAnymore(); + } + } orderService.remove(reloaded); assertFalse(orderService.exists(reloaded)); } @@ -196,7 +205,7 @@ public class OrderServiceTest { result.setName(parameter); result.setCode("000000000"); - HoursGroup hoursGroup = new HoursGroup(result); + HoursGroup hoursGroup = HoursGroup.create(result); hoursGroup.setWorkingHours(0); result.addHoursGroup(hoursGroup); @@ -215,7 +224,7 @@ public class OrderServiceTest { leaf.setCode("000000000"); container.add(leaf); order.add(container); - HoursGroup hoursGroup = new HoursGroup(leaf); + HoursGroup hoursGroup = HoursGroup.create(leaf); hoursGroup.setWorkingHours(3); leaf.addHoursGroup(hoursGroup); orderService.save(order); @@ -254,9 +263,9 @@ public class OrderServiceTest { orderLine.setCode("000000000"); order.add(orderLine); - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); hoursGroup.setWorkingHours(10); - HoursGroup hoursGroup2 = new HoursGroup(orderLine); + HoursGroup hoursGroup2 = HoursGroup.create(orderLine); hoursGroup2.setWorkingHours(5); orderLine.addHoursGroup(hoursGroup); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementController.java index a141a2775..d09806332 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementController.java @@ -272,8 +272,7 @@ public class OrderElementController extends GenericForwardComposer { */ public void addHoursGroup() { OrderLine orderLine = (OrderLine) getOrderElement(); - - HoursGroup hoursGroup = new HoursGroup(orderLine); + HoursGroup hoursGroup = HoursGroup.create(orderLine); orderLine.addHoursGroup(hoursGroup); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java index a7d604a80..0f34f2eb9 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementModel.java @@ -56,8 +56,6 @@ public class OrderElementModel implements IOrderElementModel { public void setCurrent(OrderElement orderElement, OrderModel order) { // FIXME Review reattachment boolean wasTransient = orderElement.isTransient(); - Set transientHoursGroups = orderElement - .getTransientHoursGroups(); orderElementDao.save(orderElement); for (HoursGroup hoursGroup : orderElement.getHoursGroups()) { @@ -67,9 +65,6 @@ public class OrderElementModel implements IOrderElementModel { if (wasTransient) { orderElement.makeTransientAgain(); } - for (HoursGroup hoursGroup : transientHoursGroups) { - hoursGroup.makeTransientAgain(); - } this.orderElement = orderElement; this.order = order; }