From d62ef32102983b297aecd602ea7fa7fd3c7cdfd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Thu, 21 Jan 2010 01:28:35 +0100 Subject: [PATCH] ItEr44S10CUGravacionModelosUnidadesTraballoItEr43S12: Specifying some undefined behaviour on SchedulingState --- .../orders/entities/SchedulingState.java | 12 +++++++++- .../orders/entities/SchedulingStateTest.java | 22 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SchedulingState.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SchedulingState.java index b5f4ae096..3865c3aca 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SchedulingState.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SchedulingState.java @@ -162,11 +162,21 @@ public class SchedulingState { } public void add(SchedulingState child) { - child.parent = this; children.add(child); + child.changingParentTo(this); setType(calculateTypeFromChildren()); } + private void changingParentTo(SchedulingState parent) { + this.parent = parent; + if (parent.getType().belongsToSchedulingPoint()) { + setTypeWithoutNotifyingParent(Type.SCHEDULED_SUBELEMENT); + for (SchedulingState each : getDescendants()) { + each.setTypeWithoutNotifyingParent(Type.SCHEDULED_SUBELEMENT); + } + } + } + public SchedulingState getParent() { return parent; } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/SchedulingStateTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/SchedulingStateTest.java index 495dd8568..55de7cf25 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/SchedulingStateTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/SchedulingStateTest.java @@ -314,6 +314,28 @@ public class SchedulingStateTest { assertThat(root, hasType(Type.NO_SCHEDULED)); } + @Test + public void addingAChildToASchedulingPointMakesItAScheduledSubelementAndAllItsDescendants() { + childA.schedule(); + SchedulingState newChild = new SchedulingState(); + SchedulingState grandChild = new SchedulingState(); + newChild.add(grandChild); + childA.add(newChild); + assertThat(newChild, hasType(Type.SCHEDULED_SUBELEMENT)); + assertThat(grandChild, hasType(Type.SCHEDULED_SUBELEMENT)); + } + + @Test + public void addingAChildToAScheduledSubelementMakesItAScheduledSubelementAndAllItsDescendants() { + childA.schedule(); + SchedulingState newChild = new SchedulingState(); + SchedulingState grandChild = new SchedulingState(); + newChild.add(grandChild); + grandChildA1.add(newChild); + assertThat(newChild, hasType(Type.SCHEDULED_SUBELEMENT)); + assertThat(grandChild, hasType(Type.SCHEDULED_SUBELEMENT)); + } + abstract static class SchedulingStateMatcher extends BaseMatcher { @Override