From 2208f2ac7c837c5110b4f5e5e6b79a6e9648b29e Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Thu, 7 Jul 2011 18:14:11 +0200 Subject: [PATCH] Adapted exception days controller to BaseCRUDController. * Also fixed configured properly to show entity name while editing. FEA: ItEr75S13GenericCRUDController --- .../entities/CalendarExceptionType.java | 9 +- .../web/common/BaseCRUDController.java | 27 ++- .../CalendarExceptionTypeCRUDController.java | 166 +++++------------- .../excetiondays/_editExceptionDayType.zul | 5 +- .../excetiondays/_listExceptionDayTypes.zul | 2 +- 5 files changed, 83 insertions(+), 126 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/CalendarExceptionType.java b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/CalendarExceptionType.java index 1fd468735..fe38f6c73 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/CalendarExceptionType.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/CalendarExceptionType.java @@ -32,6 +32,7 @@ import org.hibernate.NonUniqueResultException; import org.hibernate.validator.AssertTrue; import org.hibernate.validator.NotNull; import org.navalplanner.business.calendars.daos.ICalendarExceptionTypeDAO; +import org.navalplanner.business.common.IHumanIdentifiable; import org.navalplanner.business.common.IntegrationEntity; import org.navalplanner.business.common.Registry; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; @@ -44,7 +45,8 @@ import org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureExcep * * @author Manuel Rego Casasnovas */ -public class CalendarExceptionType extends IntegrationEntity { +public class CalendarExceptionType extends IntegrationEntity implements + IHumanIdentifiable { private String name; @@ -183,4 +185,9 @@ public class CalendarExceptionType extends IntegrationEntity { } } + @Override + public String getHumanId() { + return name; + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/BaseCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/BaseCRUDController.java index 4a96291c5..6723697aa 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/BaseCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/BaseCRUDController.java @@ -292,14 +292,20 @@ public abstract class BaseCRUDController extends } /** - * Shows a dialog asking for confirmation to user and if ok remove entity - * passed as parameter. Delegate in {@link #delete(entity)} that should be - * implemented in subclasses. + * First call {@link #beforeDeleting(entity)} in order to perform some + * checkings before trying to delete if needed. Then show a dialog asking + * for confirmation to user and if ok remove entity passed as parameter. + * Delegate in {@link #delete(entity)} that should be implemented in + * subclasses. * * @param entity * Entity to be removed */ public final void confirmDelete(T entity) { + if (!beforeDeleting(entity)) { + return; + } + try { if (Messagebox.show( _("Delete {0} \"{1}\". Are you sure?", getEntityType(), @@ -318,6 +324,21 @@ public abstract class BaseCRUDController extends } } + /** + * Performs additional operations before deleting (usually check some wrong + * conditions before deleting). + * + * Default behavior do nothing, however it could be overridden if needed. + * + * @param entity + * Entity to be removed + * @return Return true if deletion can carry on + */ + protected boolean beforeDeleting(T entity) { + // Do nothing + return true; + } + /** * Performs actions needed to remove entity passed as parameter * diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/exceptionDays/CalendarExceptionTypeCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/exceptionDays/CalendarExceptionTypeCRUDController.java index e67186dad..b2c1cea9b 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/exceptionDays/CalendarExceptionTypeCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/exceptionDays/CalendarExceptionTypeCRUDController.java @@ -23,16 +23,13 @@ import static org.navalplanner.web.I18nHelper._; import java.util.ConcurrentModificationException; import java.util.List; -import org.apache.commons.logging.LogFactory; import org.navalplanner.business.calendars.entities.CalendarExceptionType; import org.navalplanner.business.calendars.entities.Capacity; import org.navalplanner.business.calendars.entities.PredefinedCalendarExceptionTypes; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; -import org.navalplanner.web.common.IMessagesForUser; +import org.navalplanner.web.common.BaseCRUDController; 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.navalplanner.web.common.Util.Getter; import org.navalplanner.web.common.Util.Setter; @@ -45,33 +42,22 @@ import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.WrongValueException; import org.zkoss.zk.ui.event.CheckEvent; import org.zkoss.zk.ui.event.Event; -import org.zkoss.zk.ui.event.MouseEvent; -import org.zkoss.zk.ui.util.GenericForwardComposer; -import org.zkoss.zul.Button; import org.zkoss.zul.Checkbox; import org.zkoss.zul.Grid; -import org.zkoss.zul.Messagebox; import org.zkoss.zul.Row; import org.zkoss.zul.Textbox; -import org.zkoss.zul.Window; /** * * @author Diego Pino * */ -public class CalendarExceptionTypeCRUDController extends GenericForwardComposer { - - private static final org.apache.commons.logging.Log LOG = LogFactory - .getLog(CalendarExceptionTypeCRUDController.class); +public class CalendarExceptionTypeCRUDController extends + BaseCRUDController { @Autowired private ICalendarExceptionTypeModel calendarExceptionTypeModel; - private Window listWindow; - - private Window editWindow; - private Textbox tbName; private Textbox tbColor; @@ -82,19 +68,10 @@ public class CalendarExceptionTypeCRUDController extends GenericForwardComposer private EffortDurationPicker extraEffort; - private OnlyOneVisible visibility; - - private IMessagesForUser messagesForUser; - - private Component messagesContainer; - @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); - messagesForUser = new MessagesForUser(messagesContainer); - comp.setVariable("controller", this, true); initializeEditWindowComponents(); - showListWindow(); } private void initializeCapacityPicker() { @@ -123,37 +100,16 @@ public class CalendarExceptionTypeCRUDController extends GenericForwardComposer extraEffort = Util.findComponentAt(editWindow, "extraEffort"); } - private void showListWindow() { - showWindow(listWindow); - } - - private void showWindow(Window window) { - getVisibility().showOnly(window); - } - - private OnlyOneVisible getVisibility() { - if (visibility == null) { - visibility = new OnlyOneVisible(listWindow, editWindow); - } - return visibility; - } - - private void showEditWindow() { - initializeCapacityPicker(); - editWindow.setTitle(_("Edit Exception Day Type")); - showWindow(editWindow); - } - - public void goToCreateForm() { + @Override + protected void initCreate() { calendarExceptionTypeModel.initCreate(); - showCreateWindow(); - Util.reloadBindings(editWindow); + initializeCapacityPicker(); } - private void showCreateWindow() { + @Override + protected void initEdit(CalendarExceptionType calendarExceptionType) { + calendarExceptionTypeModel.initEdit(calendarExceptionType); initializeCapacityPicker(); - editWindow.setTitle(_("Create Exception Day Type")); - showWindow(editWindow); } public CalendarExceptionType getExceptionDayType() { @@ -164,9 +120,9 @@ public class CalendarExceptionTypeCRUDController extends GenericForwardComposer return calendarExceptionTypeModel.getExceptionDayTypes(); } - public void cancel() { + @Override + protected void cancel() { clearFields(); - showListWindow(); } private void clearFields() { @@ -174,73 +130,36 @@ public class CalendarExceptionTypeCRUDController extends GenericForwardComposer tbColor.setRawValue(""); } - private boolean save() { - try { - calendarExceptionTypeModel.confirmSave(); - messagesForUser.showMessage(Level.INFO, _("Calendar Exception Type saved")); - return true; - } catch (ValidationException e) { - messagesForUser.showInvalidValues(e); + @Override + protected void save() throws ValidationException { + calendarExceptionTypeModel.confirmSave(); + clearFields(); + } + + @Override + protected boolean beforeDeleting(CalendarExceptionType calendarExceptionType) { + if (PredefinedCalendarExceptionTypes.contains(calendarExceptionType)) { + messagesForUser + .showMessage( + Level.ERROR, + _("Cannot remove the predefined Exception Day Type \"{0}\"", + calendarExceptionType.getHumanId())); return false; } + return true; } - public void saveAndExit() { - boolean couldSave = save(); - if (couldSave) { - clearFields(); - showListWindow(); - Util.reloadBindings(listWindow); - } - } - - public void saveAndContinue() { - boolean couldSave = save(); - if (couldSave) { - calendarExceptionTypeModel.initEdit(calendarExceptionTypeModel - .getExceptionDayType()); - } - } - - public void showRemoveConfirmationMessage(MouseEvent event) { - Button button = (Button) event.getTarget(); - Component comp = (Component) event.getTarget(); - CalendarExceptionType exceptionType = (CalendarExceptionType) ((Row) button - .getParent().getParent()).getValue(); - - if (PredefinedCalendarExceptionTypes.contains(exceptionType)) { - throw new WrongValueException(comp, "Cannot remove a predefined Exception Day Type"); - } else { - showRemoveConfirmationMessage(exceptionType); - } - } - - public void showRemoveConfirmationMessage( - CalendarExceptionType exceptionType) { + @Override + protected void delete(CalendarExceptionType calendarExceptionType) { try { - int status = Messagebox - .show(_("Delete item {0}. Are you sure?", - exceptionType.getName()), _("Delete"), - Messagebox.OK | Messagebox.CANCEL, - Messagebox.QUESTION); - if (Messagebox.OK == status) { - confirmDelete(exceptionType); - Util.reloadBindings(listWindow); - } - } catch (InterruptedException e) { - LOG.error(_("Error on showing delete confirm"), e); - } - } - - public void confirmDelete(CalendarExceptionType exceptionType) { - try { - calendarExceptionTypeModel.confirmDelete(exceptionType); + calendarExceptionTypeModel.confirmDelete(calendarExceptionType); } catch (InstanceNotFoundException e) { - e.printStackTrace(); + throw new RuntimeException(e); } catch (InvalidValueException e) { NewDataSortableGrid listExceptionDayTypes = (NewDataSortableGrid) listWindow .getFellowIfAny("listExceptionDayTypes"); - Row row = findRowByValue(listExceptionDayTypes, exceptionType); + Row row = findRowByValue(listExceptionDayTypes, + calendarExceptionType); throw new WrongValueException(row, e.getMessage()); } } @@ -255,12 +174,6 @@ public class CalendarExceptionTypeCRUDController extends GenericForwardComposer return null; } - public void goToEditForm(CalendarExceptionType exceptionType) { - calendarExceptionTypeModel.initEdit(exceptionType); - showEditWindow(); - Util.reloadBindings(editWindow); - } - public void onCheckGenerateCode(Event e) { CheckEvent ce = (CheckEvent) e; if (ce.isChecked()) { @@ -274,4 +187,19 @@ public class CalendarExceptionTypeCRUDController extends GenericForwardComposer Util.reloadBindings(editWindow); } + @Override + protected String getEntityType() { + return "Exception Day Type"; + } + + @Override + protected String getPluralEntityType() { + return "Exception Day Types"; + } + + @Override + protected CalendarExceptionType getEntityBeingEdited() { + return calendarExceptionTypeModel.getExceptionDayType(); + } + } diff --git a/navalplanner-webapp/src/main/webapp/excetiondays/_editExceptionDayType.zul b/navalplanner-webapp/src/main/webapp/excetiondays/_editExceptionDayType.zul index daf8b00ee..e3d2160b0 100644 --- a/navalplanner-webapp/src/main/webapp/excetiondays/_editExceptionDayType.zul +++ b/navalplanner-webapp/src/main/webapp/excetiondays/_editExceptionDayType.zul @@ -49,7 +49,8 @@