Adding factory method create an HoursGroup in order to mark just created HoursGroup with newObject = true.

It has been neccessary to do a hack to avoid exception at OrderServiceTest#removingOrderWithAssociatedTasksDeletesThem.
This commit is contained in:
Óscar González Fernández 2009-08-02 19:22:21 +02:00
parent b11c8fb101
commit 82055b7497
9 changed files with 75 additions and 82 deletions

View file

@ -2,7 +2,6 @@ package org.navalplanner.business.common;
/**
* TODO
*
* @author Manuel Rego Casasnovas <mrego@igalia.com>
*/
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. <br />
*/
public void dontPoseAsTransientObjectAnymore() {
setNewObject(false);
}
}

View file

@ -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;
}
}

View file

@ -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<HoursGroup> getTransientHoursGroups() {
// FIXME Review reattachment
Set<HoursGroup> transientHoursGroups = new HashSet<HoursGroup>();
for (HoursGroup hoursGroup : getHoursGroups()) {
if (hoursGroup.isTransient()) {
transientHoursGroups.add(hoursGroup);
}
}
return transientHoursGroups;
}
public Set<TaskElement> getTaskElements() {
return Collections.unmodifiableSet(taskElements);
}

View file

@ -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);
}

View file

@ -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;

View file

@ -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);

View file

@ -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<TaskElement> 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);

View file

@ -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);

View file

@ -56,8 +56,6 @@ public class OrderElementModel implements IOrderElementModel {
public void setCurrent(OrderElement orderElement, OrderModel order) {
// FIXME Review reattachment
boolean wasTransient = orderElement.isTransient();
Set<HoursGroup> 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;
}