From e4f09962072eb38ba7245aaa6fbb3fd7a6fc2e91 Mon Sep 17 00:00:00 2001 From: Diego Pino Garcia Date: Mon, 10 Jan 2011 11:32:00 +0100 Subject: [PATCH] [Bug #798] Refactor 'Remove Criterion' window, change it for a MessageBox window * Change hierarchy window to MessageBox too FEA: ItEr67S04BugFixing --- .../criterion/CriterionAdminController.java | 220 ++++++++---------- .../resources/criterion/CriterionsModel.java | 27 +-- .../resources/criterion/ICriterionsModel.java | 6 +- .../webapp/resources/criterions/_edition.zul | 8 +- .../resources/criterions/criterions.zul | 59 ++--- 5 files changed, 131 insertions(+), 189 deletions(-) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionAdminController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionAdminController.java index 35cdb73e0..02b782d55 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionAdminController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionAdminController.java @@ -38,6 +38,7 @@ import org.navalplanner.web.common.Level; import org.navalplanner.web.common.MessagesForUser; import org.navalplanner.web.common.OnlyOneVisible; import org.navalplanner.web.common.Util; +import org.springframework.beans.factory.annotation.Autowired; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.CheckEvent; import org.zkoss.zk.ui.event.Event; @@ -45,6 +46,7 @@ import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Checkbox; import org.zkoss.zul.Combobox; import org.zkoss.zul.Comboitem; +import org.zkoss.zul.Messagebox; import org.zkoss.zul.Tree; import org.zkoss.zul.Window; @@ -53,10 +55,11 @@ import org.zkoss.zul.Window; */ public class CriterionAdminController extends GenericForwardComposer { - private static final Log log = LogFactory + private static final Log LOG = LogFactory .getLog(CriterionAdminController.class); - private ICriterionsModel criterionsModel_V2; + @Autowired + private ICriterionsModel criterionsModel; private Component messagesContainer; @@ -64,110 +67,95 @@ public class CriterionAdminController extends GenericForwardComposer { private Window listing; - private Checkbox checkboxHierarchy; + private Window editWindow; - private Window confirmRemove; - - private boolean confirmingRemove = false; - - private Window confirmDisabledHierarchy; - - private boolean confirmingDisabledHierarchy = false; - - private Component editComponent; - - private Component createComponent; + private Checkbox cbHierarchy; private OnlyOneVisible onlyOneVisible; - private Component workersComponent; - private CriterionTreeController editionTree; - public CriterionAdminController() { - + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + onlyOneVisible = new OnlyOneVisible(listing, editWindow, editWindow); + onlyOneVisible.showOnly(listing); + comp.setVariable("controller", this, false); + messagesForUser = new MessagesForUser(messagesContainer); + cbHierarchy = (Checkbox) editWindow.getFellow("cbHierarchy"); + setupResourceCombobox((Combobox) editWindow.getFellowIfAny("resourceCombobox")); } public void goToCreateForm() { - try{ - criterionsModel_V2.prepareForCreate(); - setupCriterionTreeController(createComponent); - onlyOneVisible.showOnly(createComponent); - setResourceComboboxValue((Combobox) createComponent.getFellowIfAny("resourceCombobox")); - Util.reloadBindings(createComponent); - }catch(Exception e){ - messagesForUser.showMessage( - Level.ERROR, _("Error setting up creation form.")); - log.error(_("Error setting up creation form for Criterion Type"), e ); + try { + criterionsModel.prepareForCreate(); + setupCriterionTreeController(editWindow); + showEditWindow(_("Create Criterion type")); + } catch (Exception e) { + messagesForUser.showMessage(Level.ERROR, + _("Error setting up creation form.")); + LOG.error(_("Error setting up creation form for Criterion Type"), e); } } + private void showEditWindow(String title) { + editWindow.setTitle(title); + onlyOneVisible.showOnly(editWindow); + setResourceComboboxValue((Combobox) editWindow.getFellowIfAny("resourceCombobox")); + Util.reloadBindings(editWindow); + } + public void goToEditForm(CriterionType criterionType) { - try{ - criterionsModel_V2.prepareForEdit(criterionType); - setupCriterionTreeController(editComponent); - onlyOneVisible.showOnly(editComponent); - setResourceComboboxValue((Combobox) editComponent.getFellowIfAny("resourceCombobox")); - Util.reloadBindings(editComponent); - }catch(Exception e){ - messagesForUser.showMessage( - Level.ERROR, _("Error setting up edition form.")); - log.error(_("Error setting up edition form for Criterion Type with id: {0}", - criterionType.getId()), e ); + try { + criterionsModel.prepareForEdit(criterionType); + setupCriterionTreeController(editWindow); + showEditWindow(_("Edit Criterion type")); + } catch (Exception e) { + messagesForUser.showMessage(Level.ERROR, + _("Error setting up edition form.")); + LOG.error( + _("Error setting up edition form for Criterion Type with id: {0}", + criterionType.getId()), e); } } public void confirmRemove(CriterionType criterionType) { - criterionsModel_V2.prepareForRemove(criterionType); - if (criterionsModel_V2.isDeletable(criterionType)) { - showConfirmingWindow(); - } else { + if (!criterionsModel.canRemove(criterionType)) { messagesForUser .showMessage( Level.WARNING, _("This criterion type cannot be deleted because it has assignments to projects or resources")); + return; } + showConfirmRemoveWindow(criterionType); } - public void cancelRemove() { - confirmingRemove = false; - confirmRemove.setVisible(false); - Util.reloadBindings(confirmRemove); - } - - public boolean isConfirmingRemove() { - return confirmingRemove; - } - - private void hideConfirmingWindow() { - confirmingRemove = false; - Util.reloadBindings(confirmRemove); - } - - private void showConfirmingWindow() { - confirmingRemove = true; + private void showConfirmRemoveWindow(CriterionType criterionType) { try { - Util.reloadBindings(confirmRemove); - confirmRemove.doModal(); - } catch (Exception e) { - throw new RuntimeException(e); + int status = Messagebox.show( + _("Confirm deleting {0}. Are you sure?", + criterionType.getName()), _("Delete"), + Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION); + if (Messagebox.OK == status) { + remove(criterionType); + } + + } catch (InterruptedException e) { + messagesForUser.showMessage(Level.ERROR, e.getMessage()); } } public void remove(CriterionType criterionType) { - criterionsModel_V2.remove(criterionType); - hideConfirmingWindow(); + criterionsModel.confirmRemove(criterionType); Util.reloadBindings(listing); messagesForUser.showMessage( Level.INFO, _("Removed {0}", criterionType.getName())); } - public void confirmDisabledHierarchy(Checkbox checkbox) { - checkboxHierarchy = checkbox; - if(!checkboxHierarchy.isChecked()){ + public void confirmDisabledHierarchy() { + if (!cbHierarchy.isChecked()){ showConfirmingHierarchyWindow(); } - editionTree.reloadTree(); } public boolean allowRemove(CriterionType criterionType){ @@ -185,38 +173,30 @@ public class CriterionAdminController extends GenericForwardComposer { return true; } - public void cancelDisEnabledHierarchy() { - confirmingDisabledHierarchy = false; - confirmDisabledHierarchy.setVisible(false); - checkboxHierarchy.setChecked(true); - Util.reloadBindings(confirmDisabledHierarchy); - } - - public boolean isConfirmingDisEnabledHierarchy() { - return confirmingDisabledHierarchy; - } - - private void hideConfirmingHierarchtWindow() { - confirmingDisabledHierarchy = false; - Util.reloadBindings(confirmDisabledHierarchy); - } - private void showConfirmingHierarchyWindow() { - this.confirmingDisabledHierarchy = true; try { - Util.reloadBindings(this.confirmDisabledHierarchy); - confirmDisabledHierarchy.doModal(); - } catch (Exception e) { - throw new RuntimeException(e); + int status = Messagebox + .show(_("Disable hierarchy will cause criteria tree to be flattened. Are you sure?"), + "Question", Messagebox.OK | Messagebox.CANCEL, + Messagebox.QUESTION); + if (Messagebox.OK == status) { + disableHierarchy(); + editionTree.reloadTree(); + } else { + cbHierarchy.setChecked(true); + } + } catch (InterruptedException e) { + messagesForUser.showMessage(Level.ERROR, e.getMessage()); } } - public void okDisEnabledHierarchy() { + public void disableHierarchy() { editionTree.disabledHierarchy(); - hideConfirmingHierarchtWindow(); + messagesForUser.showMessage( + Level.INFO, + _("Tree {0} sucessfully flattened", criterionsModel + .getCriterionType().getName())); Util.reloadBindings(listing); - messagesForUser.showMessage(Level.INFO, _("Fattened Tree {0}", - criterionsModel_V2.getCriterionType().getName())); } public void changeEnabled(Checkbox checkbox) { @@ -244,7 +224,7 @@ public class CriterionAdminController extends GenericForwardComposer { private void save() throws ValidationException { try { - criterionsModel_V2.saveCriterionType(); + criterionsModel.saveCriterionType(); messagesForUser.showMessage(Level.INFO, _("CriterionType and its criteria saved")); } catch (ValidationException e) { @@ -271,46 +251,30 @@ public class CriterionAdminController extends GenericForwardComposer { } private void reloadCriterionType() { - Tree tree = (Tree) getCurrentWindow().getFellowIfAny("tree"); - criterionsModel_V2.reloadCriterionType(); + Tree tree = (Tree) editWindow.getFellowIfAny("tree"); + criterionsModel.reloadCriterionType(); Util.reloadBindings(tree); } - private Component getCurrentWindow() { - return (editComponent.isVisible()) ? editComponent : createComponent; - } - public List getCriterionTypes() { - List types = criterionsModel_V2.getTypes(); + List types = criterionsModel.getTypes(); return types; } public ICriterionType getCriterionType() { - return criterionsModel_V2.getCriterionType(); + return criterionsModel.getCriterionType(); } public ICriterionTreeModel getCriterionTreeModel() { - return criterionsModel_V2.getCriterionTreeModel(); + return criterionsModel.getCriterionTreeModel(); } public Criterion getCriterion() { - return criterionsModel_V2.getCriterion(); - } - - @Override - public void doAfterCompose(Component comp) throws Exception { - super.doAfterCompose(comp); - onlyOneVisible = new OnlyOneVisible(listing, editComponent, - createComponent, workersComponent); - onlyOneVisible.showOnly(listing); - comp.setVariable("controller", this, false); - messagesForUser = new MessagesForUser(messagesContainer); - setupResourceCombobox((Combobox) createComponent.getFellowIfAny("resourceCombobox")); - setupResourceCombobox((Combobox) editComponent.getFellowIfAny("resourceCombobox")); + return criterionsModel.getCriterion(); } private void setupResourceCombobox(Combobox combo) { - for(ResourceEnum resource : ResourceEnum.values()) { + for (ResourceEnum resource : ResourceEnum.values()) { Comboitem item = combo.appendItem(_(resource.getDisplayName())); item.setValue(resource); } @@ -318,7 +282,7 @@ public class CriterionAdminController extends GenericForwardComposer { private void setResourceComboboxValue(Combobox combo) { CriterionType criterionType = (CriterionType) getCriterionType(); - for(Object object : combo.getItems()) { + for (Object object : combo.getItems()) { Comboitem item = (Comboitem) object; if(criterionType != null && item.getValue().equals(criterionType.getResource())) { @@ -333,13 +297,12 @@ public class CriterionAdminController extends GenericForwardComposer { } } - private void setupCriterionTreeController(Component comp)throws Exception { - editionTree = new CriterionTreeController(criterionsModel_V2); - editionTree.setCriterionCodeEditionDisabled( -((CriterionType) criterionsModel_V2 + private void setupCriterionTreeController(Component comp) throws Exception { + editionTree = new CriterionTreeController(criterionsModel); + editionTree + .setCriterionCodeEditionDisabled(((CriterionType) criterionsModel .getCriterionType()).isCodeAutogenerated()); - editionTree.doAfterCompose(comp.getFellow( - "criterionsTree")); + editionTree.doAfterCompose(comp.getFellow("criterionsTree")); } public void onCheckGenerateCode(Event e) { @@ -347,14 +310,15 @@ public class CriterionAdminController extends GenericForwardComposer { if (ce.isChecked()) { try { // we have to auto-generate the code for new objects - criterionsModel_V2.setCodeAutogenerated(ce.isChecked()); + criterionsModel.setCodeAutogenerated(ce.isChecked()); } catch (ConcurrentModificationException err) { messagesForUser.showMessage(Level.ERROR, err.getMessage()); } - Util.reloadBindings(createComponent); + Util.reloadBindings(editWindow); } //disable code field in criterion tree controller editionTree.setCriterionCodeEditionDisabled(ce.isChecked()); editionTree.reloadTree(); } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionsModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionsModel.java index 2899e4b43..6d4a2dca7 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionsModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionsModel.java @@ -48,16 +48,19 @@ import org.navalplanner.web.common.concurrentdetection.OnConcurrentModification; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * Model for criterions.
+ * * @author Óscar González Fernández + * @author Diego Pino García */ -@Component("criterionsModel_V2") + +@Service @Scope(BeanDefinition.SCOPE_PROTOTYPE) -@OnConcurrentModification(goToPage = "/resources/criterions/criterions-V2.zul") +@OnConcurrentModification(goToPage = "/resources/criterions/criterions.zul") public class CriterionsModel extends IntegrationEntityModel implements ICriterionsModel { private static final Log log = LogFactory.getLog(CriterionsModel.class); @@ -136,14 +139,6 @@ public class CriterionsModel extends IntegrationEntityModel implements ICriterio .createCriterionWithoutNameYet(); } - @Override - @Transactional - public void prepareForRemove(CriterionType criterionType) { - this.criterionType = criterionType; - criterionTypeDAO.reattach(criterionType); - criterionType.getCriterions().size(); - } - @Override @Transactional(readOnly = true) public void prepareForEdit(CriterionType criterionType) { @@ -155,7 +150,7 @@ public class CriterionsModel extends IntegrationEntityModel implements ICriterio @Override @Transactional - public void remove(CriterionType criterionType) { + public void confirmRemove(CriterionType criterionType) { try { criterionTypeDAO.remove(criterionType.getId()); } catch (InstanceNotFoundException e) { @@ -271,7 +266,8 @@ public class CriterionsModel extends IntegrationEntityModel implements ICriterio @Override @Transactional(readOnly = true) - public boolean isDeletable(CriterionType criterionType) { + public boolean canRemove(CriterionType criterionType) { + reattachCriterions(criterionType); for (Criterion each : criterionType.getCriterions()) { if (numberOfRelatedEntities(each) != 0) { return false; @@ -280,6 +276,11 @@ public class CriterionsModel extends IntegrationEntityModel implements ICriterio return true; } + private void reattachCriterions(CriterionType criterionType) { + criterionTypeDAO.reattach(criterionType); + criterionType.getCriterions().size(); + } + public EntityNameEnum getEntityName() { return EntityNameEnum.CRITERION; } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/ICriterionsModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/ICriterionsModel.java index 3f35df1a8..84441176e 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/ICriterionsModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/ICriterionsModel.java @@ -66,8 +66,6 @@ public interface ICriterionsModel extends IIntegrationEntityModel { public void prepareForEdit(CriterionType criterionType); - public void prepareForRemove(CriterionType criterionType); - /** * Reloads {@link CriterionType} from DB and all its criterions * This method should be call after saveAndContinue() from controller to @@ -75,7 +73,7 @@ public interface ICriterionsModel extends IIntegrationEntityModel { */ void reloadCriterionType(); - public void remove(CriterionType criterionType); + public void confirmRemove(CriterionType criterionType); void saveCriterionType() throws ValidationException; @@ -83,7 +81,7 @@ public interface ICriterionsModel extends IIntegrationEntityModel { boolean isDeletable(Criterion criterion); - boolean isDeletable(CriterionType criterionType); + boolean canRemove(CriterionType criterionType); void addForRemoval(Criterion criterion); } diff --git a/navalplanner-webapp/src/main/webapp/resources/criterions/_edition.zul b/navalplanner-webapp/src/main/webapp/resources/criterions/_edition.zul index 43a37735e..49f73faed 100644 --- a/navalplanner-webapp/src/main/webapp/resources/criterions/_edition.zul +++ b/navalplanner-webapp/src/main/webapp/resources/criterions/_edition.zul @@ -19,7 +19,8 @@ --> - + + @@ -49,8 +50,9 @@