From e6e9793a38c04f9a537d183c4fa48b4ce1284854 Mon Sep 17 00:00:00 2001 From: Diego Pino Garcia Date: Fri, 15 Apr 2011 14:42:57 +0200 Subject: [PATCH] [Bug #986] Prevent removing a label type that is being used by and orderelement FEA: ItEr74S04BugFixing --- .../web/labels/LabelTypeCRUDController.java | 58 +++++++++++++++++-- .../web/labels/LabelTypeModel.java | 26 ++++++--- 2 files changed, 69 insertions(+), 15 deletions(-) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/labels/LabelTypeCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/labels/LabelTypeCRUDController.java index dcbf7c9b3..1e8ae450d 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/labels/LabelTypeCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/labels/LabelTypeCRUDController.java @@ -48,6 +48,7 @@ import org.zkoss.zul.Button; import org.zkoss.zul.Column; import org.zkoss.zul.Constraint; import org.zkoss.zul.Grid; +import org.zkoss.zul.Hbox; import org.zkoss.zul.ListModelExt; import org.zkoss.zul.Messagebox; import org.zkoss.zul.Row; @@ -94,7 +95,7 @@ public class LabelTypeCRUDController extends GenericForwardComposer { messagesEditWindow = new MessagesForUser(editWindow .getFellowIfAny("messagesContainer")); initializeLabelsGrid(); - gridLabelTypes = (Grid) listWindow.getFellowIfAny("gridLabelTypes"); + initializeLabelTypesGrid(); showListWindow(); newLabelTextbox = (Textbox) editWindow .getFellowIfAny("newLabelTextbox"); @@ -123,14 +124,59 @@ public class LabelTypeCRUDController extends GenericForwardComposer { } } } + + private boolean canRemoveLabel(Label label) { + if (label.isNewObject()) { + return true; + } + return label.getOrderElements().isEmpty(); + } + }); } - private boolean canRemoveLabel(Label label) { - if (label.isNewObject()) { - return true; - } - return label.getOrderElements().isEmpty(); + private void initializeLabelTypesGrid() { + gridLabelTypes = (Grid) listWindow.getFellowIfAny("labelTypes"); + + gridLabelTypes.addEventListener("onInitRender", new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + gridLabelTypes.renderAll(); + + final Rows rows = gridLabelTypes.getRows(); + for (Iterator i = rows.getChildren().iterator(); i.hasNext();) { + final Row row = (Row) i.next(); + final LabelType labelType = (LabelType) row.getValue(); + Hbox hbox = (Hbox) row.getChildren().get(2); + Button btnDelete = (Button) hbox.getChildren().get(1); + if (!canRemoveLabelType(labelType)) { + btnDelete.setDisabled(true); + btnDelete.setImage("/common/img/ico_borrar_out.png"); + btnDelete + .setHoverImage("/common/img/ico_borrar_out.png"); + btnDelete.setTooltiptext(""); + } + } + } + + private boolean canRemoveLabelType(LabelType labelType) { + boolean canRemove = true; + if (labelType.isNewObject()) { + return canRemove; + } + // If at least one of its labels is being used by and + // orderelement, cannot remove labelType + for (Label each: labelType.getLabels()) { + if (!each.getOrderElements().isEmpty()) { + canRemove = false; + break; + } + } + return canRemove; + } + + }); } private void showListWindow() { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/labels/LabelTypeModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/labels/LabelTypeModel.java index d7e0dcd2a..8171076a0 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/labels/LabelTypeModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/labels/LabelTypeModel.java @@ -73,7 +73,23 @@ public class LabelTypeModel extends IntegrationEntityModel implements @Override @Transactional(readOnly=true) public List getLabelTypes() { - return labelTypeDAO.getAll(); + List result = labelTypeDAO.getAll(); + initializeLabelTypes(result); + return result; + } + + private void initializeLabelTypes(List labelTypes) { + for (LabelType each: labelTypes) { + initializeLabels(each.getLabels()); + } + } + + private Set