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 845b60e33..c1ce158a1 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 @@ -21,6 +21,7 @@ package org.navalplanner.web.common; import static org.navalplanner.web.I18nHelper._; +import org.navalplanner.business.common.BaseEntity; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.api.Window; @@ -38,7 +39,8 @@ import org.zkoss.zul.api.Window; * @author Manuel Rego Casasnovas */ @SuppressWarnings("serial") -public abstract class BaseCRUDController extends GenericForwardComposer { +public abstract class BaseCRUDController extends + GenericForwardComposer { private OnlyOneVisible visibility; @@ -50,6 +52,12 @@ public abstract class BaseCRUDController extends GenericForwardComposer { protected Window editWindow; + private enum CRUCControllerState { + LIST, CREATE, EDIT + }; + + private CRUCControllerState state = CRUCControllerState.LIST; + @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); @@ -71,24 +79,21 @@ public abstract class BaseCRUDController extends GenericForwardComposer { } /** - * Show edit form with edition title + * Show edit form with different title depending on controller state */ protected void showEditWindow() { - showEditWindow(false); - } - - /** - * Show edit form with different title depending on parameter - * - * @param creation - * If true creation title is used - */ - protected void showEditWindow(boolean creation) { getVisibility().showOnly(editWindow); - if (creation) { - editWindow.setTitle(_("Create {0}", getEntityType())); - } else { - editWindow.setTitle(_("Edit {0}", getEntityType())); + switch (state) { + case CREATE: + editWindow.setTitle(_("Create {0}", getEntityType())); + break; + case EDIT: + editWindow.setTitle(_("Edit {0}", getEntityType())); + break; + default: + throw new IllegalStateException( + "BaseCRUDController#goToEditForm or BaseCRUDController#goToCreateForm" + + " must be called first in order to use this method"); } } @@ -106,4 +111,51 @@ public abstract class BaseCRUDController extends GenericForwardComposer { */ protected abstract String getPluralEntityType(); + /** + * Show list window and reload bindings there + */ + public void goToList() { + state = CRUCControllerState.LIST; + showListWindow(); + Util.reloadBindings(listWindow); + } + + /** + * Show create form. Delegate in {@link #initCreate()} that should be + * implemented in subclasses. + */ + public void goToCreateForm() { + state = CRUCControllerState.CREATE; + initCreate(); + showEditWindow(); + Util.reloadBindings(editWindow); + } + + /** + * Performs needed operations to initialize the creation of a new entity. + */ + protected abstract void initCreate(); + + /** + * Show edit form for entity passed as parameter. Delegate in + * {@link #initEdit(entity)} that should be implemented in subclasses. + * + * @param entity + * Entity to be edited + */ + public void goToEditForm(T entity) { + state = CRUCControllerState.EDIT; + initEdit(entity); + showEditWindow(); + Util.reloadBindings(editWindow); + } + + /** + * Performs needed operations to initialize the edition of a new entity. + * + * @param entity + * Entity to be edited + */ + protected abstract void initEdit(T entity); + } 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 7ebd717a5..49b138377 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 @@ -58,7 +58,7 @@ import org.zkoss.zul.api.Rows; * CRUD Controller for {@link LabelType} * @author Diego Pino Garcia */ -public class LabelTypeCRUDController extends BaseCRUDController { +public class LabelTypeCRUDController extends BaseCRUDController { @Autowired private ILabelTypeModel labelTypeModel; @@ -185,25 +185,6 @@ public class LabelTypeCRUDController extends BaseCRUDController { return labelTypeModel.getLabels(); } - /** - * Prepare form for Create - */ - public void goToCreateForm() { - labelTypeModel.initCreate(); - showEditWindow(true); - Util.reloadBindings(editWindow); - } - - /** - * Prepare form for Edit - * @param labelType - */ - public void goToEditForm(LabelType labelType) { - labelTypeModel.initEdit(labelType); - showEditWindow(); - Util.reloadBindings(editWindow); - } - /** * Save current {@link LabelType} and return */ @@ -218,14 +199,6 @@ public class LabelTypeCRUDController extends BaseCRUDController { } } - /** - * Show all {@link LabelType} - */ - private void goToList() { - showListWindow(); - Util.reloadBindings(listWindow); - } - /** * Validates all {@link Textbox} in the form */ @@ -424,4 +397,14 @@ public class LabelTypeCRUDController extends BaseCRUDController { return _("Label Types"); } + @Override + protected void initCreate() { + labelTypeModel.initCreate(); + } + + @Override + protected void initEdit(LabelType labelType) { + labelTypeModel.initEdit(labelType); + } + }