From 89e65eaede61eebef42191abf332d541f1fa0fe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Mon, 5 Sep 2011 16:52:02 +0200 Subject: [PATCH] [Bug #1170] Fix bug Guaranteeing that the root of the scheduling state is the order, otherwise errors happen when the real root is left childless. FEA: ItEr75S04BugFixings --- .../orders/entities/OrderElement.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) 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 16d7442d2..f11675166 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 @@ -159,17 +159,34 @@ public abstract class OrderElement extends IntegrationEntity implements public SchedulingState getSchedulingState() { if (schedulingState == null) { - schedulingState = SchedulingState.createSchedulingState( - getSchedulingStateType(), getChildrenStates(), - getCurrentSchedulingData().onTypeChangeListener()); + ensureSchedulingStateInitializedFromTop(); + initializeSchedulingState(); // maybe this order element was added + // later } return schedulingState; } + private void ensureSchedulingStateInitializedFromTop() { + OrderElement current = this; + while (current.getParent() != null) { + current = current.getParent(); + } + current.initializeSchedulingState(); + } + + private SchedulingState initializeSchedulingState() { + if (schedulingState != null) { + return schedulingState; + } + return schedulingState = SchedulingState.createSchedulingState( + getSchedulingStateType(), getChildrenStates(), + getCurrentSchedulingData().onTypeChangeListener()); + } + private List getChildrenStates() { List result = new ArrayList(); for (OrderElement each : getChildren()) { - result.add(each.getSchedulingState()); + result.add(each.initializeSchedulingState()); } return result; }