From 7224d9cc1eaaf4e2999940eb7b37b9564bb430fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Sat, 28 Nov 2009 23:30:57 +0100 Subject: [PATCH] ItEr36S07ValidacionEProbasFuncionaisItEr35S08: Fixing bug. Given a order group with all its children scheduled. If they were unscheduled, a task group still existed. Now it only appears a task. --- .../orders/entities/OrderElement.java | 8 +++- .../business/orders/entities/TaskSource.java | 41 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) 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 a1d937386..e8936012f 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 @@ -162,7 +162,13 @@ public abstract class OrderElement extends BaseEntity { taskSource = TaskSource.create(this, getHoursGroups()); return TaskSource.mustAdd(taskSource); } else { - return taskSource.withCurrentHoursGroup(getHoursGroups()); + if (taskSource.getTask().isLeaf()) { + return taskSource.withCurrentHoursGroup(getHoursGroups()); + } else { + List toBeRemoved = getTaskSourcesFromBottomToTop(); + taskSource = TaskSource.create(this, getHoursGroups()); + return TaskSource.mustReplace(toBeRemoved, taskSource); + } } } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/TaskSource.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/TaskSource.java index dd840afe8..eafd60938 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/TaskSource.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/TaskSource.java @@ -101,6 +101,40 @@ public class TaskSource extends BaseEntity { } } + static class TaskGroupMustBeReplacedByTask extends + TaskSourceSynchronization { + private final List toBeRemovedFromBottomToTop; + + private final TaskSource taskSource; + + private TaskGroupMustBeReplacedByTask( + List toBeRemovedFromBottomToTop, + TaskSource taskSource) { + this.toBeRemovedFromBottomToTop = toBeRemovedFromBottomToTop; + this.taskSource = taskSource; + } + + @Override + public TaskElement apply(ITaskSourceDAO taskSourceDAO) { + for (TaskSource each : toBeRemovedFromBottomToTop) { + remove(taskSourceDAO, each); + } + taskSourceDAO.flush(); + // flush must be done to avoid ERROR: duplicate key value + // violates unique constraint "tasksource_orderelement_key" + return new TaskSourceMustBeAdded(taskSource) + .apply(taskSourceDAO); + } + + private void remove(ITaskSourceDAO taskSourceDAO, TaskSource each) { + try { + taskSourceDAO.remove(each.getId()); + } catch (InstanceNotFoundException e) { + throw new RuntimeException(e); + } + } + } + static abstract class TaskGroupSynchronization extends TaskSourceSynchronization { @@ -205,6 +239,13 @@ public class TaskSource extends BaseEntity { return create(new TaskSource(orderElement)); } + public static TaskSourceSynchronization mustReplace( + final List toBeRemovedFromBottomToTop, + final TaskSource taskSource) { + return new TaskGroupMustBeReplacedByTask(toBeRemovedFromBottomToTop, + taskSource); + } + @NotNull private OrderElement orderElement;