From 65917c3fa43f21c8f45261441893e230524565c2 Mon Sep 17 00:00:00 2001 From: Diego Pino Garcia Date: Mon, 10 Jan 2011 10:06:32 +0100 Subject: [PATCH] [Bug #795] Refactor calendar remove dialog box and change it to a MessageBox FEA: ItEr67S04BugFixing --- .../calendars/BaseCalendarCRUDController.java | 117 ++++++++---------- .../web/calendars/BaseCalendarModel.java | 12 +- .../web/calendars/IBaseCalendarModel.java | 9 +- .../src/main/webapp/calendars/calendars.zul | 36 +++--- .../web/calendars/BaseCalendarModelTest.java | 3 +- 5 files changed, 81 insertions(+), 96 deletions(-) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java index 63dd42079..90a1f7c27 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java @@ -38,8 +38,8 @@ import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Button; -import org.zkoss.zul.Grid; import org.zkoss.zul.Label; +import org.zkoss.zul.Messagebox; import org.zkoss.zul.SimpleTreeNode; import org.zkoss.zul.Treecell; import org.zkoss.zul.Treeitem; @@ -51,6 +51,7 @@ import org.zkoss.zul.api.Window; * Controller for CRUD actions over a {@link BaseCalendar} * * @author Manuel Rego Casasnovas + * @author Diego Pino Garcia */ public class BaseCalendarCRUDController extends GenericForwardComposer { @@ -62,14 +63,8 @@ public class BaseCalendarCRUDController extends GenericForwardComposer { private Window editWindow; - private Window confirmRemove; - private Window createNewVersion; - private Grid gridCalendarInformation; - - private boolean confirmingRemove = false; - private OnlyOneVisible visibility; private IMessagesForUser messagesForUser; @@ -137,62 +132,6 @@ public class BaseCalendarCRUDController extends GenericForwardComposer { } } - public void confirmRemove(BaseCalendar baseCalendar) { - baseCalendarModel.initRemove(baseCalendar); - showConfirmingWindow(); - } - - public void cancelRemove() { - confirmingRemove = false; - baseCalendarModel.cancel(); - confirmRemove.setVisible(false); - Util.reloadBindings(confirmRemove); - } - - public boolean isConfirmingRemove() { - return confirmingRemove; - } - - private void hideConfirmingWindow() { - confirmingRemove = false; - Util.reloadBindings(confirmRemove); - } - - private void showConfirmingWindow() { - confirmingRemove = true; - try { - Util.reloadBindings(confirmRemove); - confirmRemove.doModal(); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - public void remove() { - String name = baseCalendarModel.getBaseCalendar().getName(); - if (baseCalendarModel.isParent()) { - hideConfirmingWindow(); - messagesForUser - .showMessage(Level.ERROR, - _("The calendar was not removed because it still has children. " - + "Some other calendar is derived from this one.")); - } else if (baseCalendarModel.isDefaultCalendar(baseCalendarModel - .getBaseCalendar())) { - hideConfirmingWindow(); - messagesForUser - .showMessage( - Level.ERROR, - _("The default calendar can not be removed. " - + "Please, change the default calendar in the Configuration window before.")); - } else { - baseCalendarModel.confirmRemove(); - hideConfirmingWindow(); - Util.reloadBindings(listWindow); - messagesForUser.showMessage(Level.INFO, _( - "Removed calendar \"{0}\"", name)); - } - } - public void goToCreateForm() { baseCalendarModel.initCreate(); assignCreateController(); @@ -410,6 +349,58 @@ public class BaseCalendarCRUDController extends GenericForwardComposer { } + private void confirmRemove(BaseCalendar calendar) { + + // Has parent? + if (hasParent(calendar)) { + messagesForUser + .showMessage( + Level.ERROR, + _("Calendar cannot be removed because it still has children. " + + "Some other calendar is derived from this one.")); + return; + } + + // Is default calendar? + if (isDefault(calendar)) { + messagesForUser + .showMessage( + Level.ERROR, + _("Default calendar cannot be removed. " + + "Please, change the default calendar in the Configuration window before.")); + return; + } + + try { + int status = Messagebox + .show(_("Confirm deleting {0}. Are you sure?", + calendar.getName()), _("Delete"), Messagebox.OK + | Messagebox.CANCEL, Messagebox.QUESTION); + if (Messagebox.OK == status) { + remove(calendar); + } + + } catch (InterruptedException e) { + messagesForUser.showMessage(Level.ERROR, e.getMessage()); + } + } + + private void remove(BaseCalendar calendar) { + final String name = calendar.getName(); + baseCalendarModel.confirmRemove(calendar); + messagesForUser.showMessage(Level.INFO, + _("Removed calendar \"{0}\"", name)); + Util.reloadBindings(listWindow); + } + + public boolean isDefault(BaseCalendar calendar) { + return baseCalendarModel.isDefaultCalendar(calendar); + } + + public boolean hasParent(BaseCalendar calendar) { + return baseCalendarModel.isParent(calendar); + } + public BaseCalendarEditionController getEditionController() { if (isEditing()) { return editionController; diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarModel.java index eeb962643..01135b206 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarModel.java @@ -59,6 +59,7 @@ import org.springframework.transaction.annotation.Transactional; /** * Model for UI operations related to {@link BaseCalendar}. * @author Manuel Rego Casasnovas + * @author Diego Pino Garcia */ @Service @Scope(BeanDefinition.SCOPE_PROTOTYPE) @@ -384,12 +385,11 @@ public class BaseCalendarModel extends IntegrationEntityModel implements @Override @Transactional(readOnly = true) - public boolean isParent() { - if (getBaseCalendar() == null) { + public boolean isParent(BaseCalendar calendar) { + if (calendar == null) { return false; } - - return !baseCalendarDAO.findByParent(getBaseCalendar()).isEmpty(); + return !baseCalendarDAO.findByParent(calendar).isEmpty(); } @Override @@ -515,9 +515,9 @@ public class BaseCalendarModel extends IntegrationEntityModel implements @Override @Transactional - public void confirmRemove() { + public void confirmRemove(BaseCalendar calendar) { try { - baseCalendarDAO.remove(getBaseCalendar().getId()); + baseCalendarDAO.remove(calendar.getId()); } catch (InstanceNotFoundException e) { throw new RuntimeException(e); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/IBaseCalendarModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/IBaseCalendarModel.java index 581701c30..b3e7f240c 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/IBaseCalendarModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/IBaseCalendarModel.java @@ -26,12 +26,12 @@ import java.util.Set; import org.joda.time.LocalDate; import org.navalplanner.business.calendars.entities.BaseCalendar; +import org.navalplanner.business.calendars.entities.BaseCalendar.DayType; import org.navalplanner.business.calendars.entities.CalendarAvailability; import org.navalplanner.business.calendars.entities.CalendarData; +import org.navalplanner.business.calendars.entities.CalendarData.Days; import org.navalplanner.business.calendars.entities.CalendarException; import org.navalplanner.business.calendars.entities.CalendarExceptionType; -import org.navalplanner.business.calendars.entities.BaseCalendar.DayType; -import org.navalplanner.business.calendars.entities.CalendarData.Days; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.workingday.EffortDuration; import org.navalplanner.web.common.IIntegrationEntityModel; @@ -62,6 +62,7 @@ import org.navalplanner.web.common.IIntegrationEntityModel; * * * @author Manuel Rego Casasnovas + * @author Diego Pino Garcia */ public interface IBaseCalendarModel extends IIntegrationEntityModel { @@ -132,7 +133,7 @@ public interface IBaseCalendarModel extends IIntegrationEntityModel { void setParent(BaseCalendar parent); - boolean isParent(); + boolean isParent(BaseCalendar calendar); Date getExpiringDate(); @@ -191,7 +192,7 @@ public interface IBaseCalendarModel extends IIntegrationEntityModel { void confirmSave() throws ValidationException; - void confirmRemove(); + void confirmRemove(BaseCalendar calendar); void cancel(); diff --git a/navalplanner-webapp/src/main/webapp/calendars/calendars.zul b/navalplanner-webapp/src/main/webapp/calendars/calendars.zul index f3aa9a009..5106aac66 100644 --- a/navalplanner-webapp/src/main/webapp/calendars/calendars.zul +++ b/navalplanner-webapp/src/main/webapp/calendars/calendars.zul @@ -19,48 +19,40 @@ --> + - - + + + - + - + apply="org.navalplanner.web.calendars.BaseCalendarCRUDController"> + + + + + - - - - - - -