From a1f4ece458d217ccb1acf8067cd25b178a768cf1 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Mon, 12 Nov 2012 22:32:38 +0100 Subject: [PATCH] Disable new, new from template, up, down, indent and unindent buttons in WBS Depending on selected node and if it's or not updated from templates the different buttons are enabled or disabled accordingly. FEA: ItEr77S12AdaptPlanningAccordingTimesheets --- .../orders/entities/OrderElement.java | 10 +++ .../orders/entities/OrderLineGroup.java | 5 ++ .../entities/OrderElementTemplate.java | 5 ++ .../entities/OrderLineGroupTemplate.java | 5 ++ .../libreplan/business/trees/ITreeNode.java | 2 + .../orders/OrderElementTreeController.java | 10 --- .../templates/TemplatesTreeController.java | 6 -- .../libreplan/web/tree/TreeController.java | 63 +++++++++++++++---- .../orders/components/_orderElementTree.zul | 2 +- 9 files changed, 80 insertions(+), 28 deletions(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java index 55de35a24..e3f1ae11f 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java +++ b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java @@ -1606,4 +1606,14 @@ public abstract class OrderElement extends IntegrationEntity implements return sumChargedEffort.isFinishedTimesheets(); } + @Override + public boolean isUpdatedFromTimesheets() { + TaskElement taskElement = getTaskElement(); + if (taskElement == null) { + return false; + } + + return taskElement.isUpdatedFromTimesheets(); + } + } diff --git a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderLineGroup.java b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderLineGroup.java index b201fe655..faf62a494 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderLineGroup.java +++ b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderLineGroup.java @@ -158,6 +158,11 @@ public class OrderLineGroup extends OrderElement implements return false; } + @Override + public boolean isUpdatedFromTimesheets() { + return getThis().isUpdatedFromTimesheets(); + } + } public static OrderLineGroup create() { diff --git a/libreplan-business/src/main/java/org/libreplan/business/templates/entities/OrderElementTemplate.java b/libreplan-business/src/main/java/org/libreplan/business/templates/entities/OrderElementTemplate.java index 2d350f74a..8152b32ea 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/templates/entities/OrderElementTemplate.java +++ b/libreplan-business/src/main/java/org/libreplan/business/templates/entities/OrderElementTemplate.java @@ -590,4 +590,9 @@ public abstract class OrderElementTemplate extends BaseEntity implements public abstract boolean isOrderTemplate(); + @Override + public boolean isUpdatedFromTimesheets() { + return false; + } + } diff --git a/libreplan-business/src/main/java/org/libreplan/business/templates/entities/OrderLineGroupTemplate.java b/libreplan-business/src/main/java/org/libreplan/business/templates/entities/OrderLineGroupTemplate.java index cf8b62b7d..16e020a3c 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/templates/entities/OrderLineGroupTemplate.java +++ b/libreplan-business/src/main/java/org/libreplan/business/templates/entities/OrderLineGroupTemplate.java @@ -100,6 +100,11 @@ public class OrderLineGroupTemplate extends OrderElementTemplate implements return false; } + @Override + public boolean isUpdatedFromTimesheets() { + return false; + } + } public static OrderLineGroupTemplate createNew() { diff --git a/libreplan-business/src/main/java/org/libreplan/business/trees/ITreeNode.java b/libreplan-business/src/main/java/org/libreplan/business/trees/ITreeNode.java index f27bb8d54..bd6facd23 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/trees/ITreeNode.java +++ b/libreplan-business/src/main/java/org/libreplan/business/trees/ITreeNode.java @@ -60,4 +60,6 @@ public interface ITreeNode> { */ boolean isEmptyLeaf(); + boolean isUpdatedFromTimesheets(); + } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java index 2a8e41928..f4d1d7f8e 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java @@ -41,7 +41,6 @@ import org.libreplan.business.orders.entities.OrderElement; import org.libreplan.business.orders.entities.OrderLine; import org.libreplan.business.orders.entities.OrderLineGroup; import org.libreplan.business.orders.entities.SchedulingState; -import org.libreplan.business.planner.entities.TaskElement; import org.libreplan.business.requirements.entities.CriterionRequirement; import org.libreplan.business.templates.entities.OrderElementTemplate; import org.libreplan.business.users.entities.UserRole; @@ -519,15 +518,6 @@ public class OrderElementTreeController extends TreeController { super.removeCodeTextbox(key); } - @Override - protected boolean isUpdatedFromTimesheets(OrderElement currentElement) { - TaskElement taskElement = currentElement.getTaskElement(); - if (taskElement != null) { - return taskElement.isUpdatedFromTimesheets(); - } - return false; - } - } @Override diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/templates/TemplatesTreeController.java b/libreplan-webapp/src/main/java/org/libreplan/web/templates/TemplatesTreeController.java index 352b5b85a..f86df4495 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/templates/TemplatesTreeController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/templates/TemplatesTreeController.java @@ -169,12 +169,6 @@ public class TemplatesTreeController extends return currentElement.getSchedulingState(); } - @Override - protected boolean isUpdatedFromTimesheets( - OrderElementTemplate currentElement) { - return false; - } - } public TemplatesTreeController(IOrderTemplatesModel model, diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/tree/TreeController.java b/libreplan-webapp/src/main/java/org/libreplan/web/tree/TreeController.java index 4c76fe68b..f8681f3a0 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/tree/TreeController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/tree/TreeController.java @@ -116,6 +116,7 @@ public abstract class TreeController> extends viewStateSnapshot = TreeViewStateSnapshot.takeSnapshot(tree); getModel().indent(element); filterByPredicateIfAny(); + updateControlButtons(); } public TreeModel getTreeModel() { @@ -140,6 +141,7 @@ public abstract class TreeController> extends viewStateSnapshot = TreeViewStateSnapshot.takeSnapshot(tree); getModel().unindent(element); filterByPredicateIfAny(); + updateControlButtons(); } public void up() { @@ -153,6 +155,7 @@ public abstract class TreeController> extends viewStateSnapshot = TreeViewStateSnapshot.takeSnapshot(tree); getModel().up(element); filterByPredicateIfAny(); + updateControlButtons(); } public void down() { @@ -165,6 +168,7 @@ public abstract class TreeController> extends viewStateSnapshot = TreeViewStateSnapshot.takeSnapshot(tree); getModel().down(element); filterByPredicateIfAny(); + updateControlButtons(); } public T getSelectedNode() { @@ -350,6 +354,15 @@ public abstract class TreeController> extends private List columns; + private Button btnNewFromTemplate; + + private Button downButton; + + private Button upButton; + + private Button leftButton; + + private Button rightButton; protected TreeViewStateSnapshot getSnapshotOfOpenedNodes() { return viewStateSnapshot; @@ -357,6 +370,13 @@ public abstract class TreeController> extends private void resetControlButtons() { btnNew.setDisabled(isNewButtonDisabled()); + btnNewFromTemplate.setDisabled(isNewButtonDisabled()); + + boolean disabled = readOnly || isPredicateApplied(); + downButton.setDisabled(disabled); + upButton.setDisabled(disabled); + leftButton.setDisabled(disabled); + rightButton.setDisabled(disabled); } protected abstract boolean isNewButtonDisabled(); @@ -763,7 +783,7 @@ public abstract class TreeController> extends SchedulingStateToggler schedulingStateToggler = new SchedulingStateToggler( schedulingState); schedulingStateToggler.setReadOnly(readOnly - || isUpdatedFromTimesheets(currentElement)); + || currentElement.isUpdatedFromTimesheets()); final Treecell cell = addCell( getDecorationFromState(getSchedulingStateFrom(currentElement)), schedulingStateToggler); @@ -1143,8 +1163,6 @@ public abstract class TreeController> extends } - protected abstract boolean isUpdatedFromTimesheets(T currentElement); - } public void setColumns(List columns) { @@ -1192,17 +1210,40 @@ public abstract class TreeController> extends /** * Disable control buttons (new, up, down, indent, unindent, delete) */ - public void updateControlButtons(Event event) { - updateControlButtons((Tree) event.getTarget()); - } - - public void updateControlButtons(Tree tree) { - final Treeitem item = tree.getSelectedItem(); - if (item == null) { + public void updateControlButtons() { + T element = getSelectedNode(); + if (element == null) { resetControlButtons(); return; } - btnNew.setDisabled(false); + Treeitem item = tree.getSelectedItem(); + + btnNew.setDisabled(isNewButtonDisabled() + || element.isUpdatedFromTimesheets()); + btnNewFromTemplate.setDisabled(isNewButtonDisabled() + || element.isUpdatedFromTimesheets()); + + boolean disabled = readOnly || isPredicateApplied(); + downButton.setDisabled(disabled || isLastItem(element)); + upButton.setDisabled(disabled || isFirstItem(element)); + + disabled |= element.isUpdatedFromTimesheets(); + leftButton.setDisabled(disabled + || isFirstLevelElement(item) + || element.getParent().isUpdatedFromTimesheets()); + + boolean previousSiblingIsUpdatedFromTimesheets = false; + try { + Treeitem previousItem = (Treeitem) item.getParent() + .getChildren().get(item.getIndex() - 1); + T previousSibling = type.cast(previousItem.getValue()); + previousSiblingIsUpdatedFromTimesheets = previousSibling + .isUpdatedFromTimesheets(); + } catch (IndexOutOfBoundsException e) { + // Do nothing + } + rightButton.setDisabled(disabled || isFirstItem(element) + || previousSiblingIsUpdatedFromTimesheets); } protected abstract boolean isPredicateApplied(); diff --git a/libreplan-webapp/src/main/webapp/orders/components/_orderElementTree.zul b/libreplan-webapp/src/main/webapp/orders/components/_orderElementTree.zul index ca0ca9c8d..17c919d3c 100644 --- a/libreplan-webapp/src/main/webapp/orders/components/_orderElementTree.zul +++ b/libreplan-webapp/src/main/webapp/orders/components/_orderElementTree.zul @@ -82,7 +82,7 @@