Added more generic methods to BaseCRUDController.

* New methods:
  * goToList
  * goToCreateForm
  * goToEditForm
* Variable to save current state of controller

FEA: ItEr75S13GenericCRUDController
This commit is contained in:
Manuel Rego Casasnovas 2011-07-06 10:26:06 +02:00
parent a01adb0b61
commit d0e1d0e91b
2 changed files with 79 additions and 44 deletions

View file

@ -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 <rego@igalia.com>
*/
@SuppressWarnings("serial")
public abstract class BaseCRUDController extends GenericForwardComposer {
public abstract class BaseCRUDController<T extends BaseEntity> 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);
}

View file

@ -58,7 +58,7 @@ import org.zkoss.zul.api.Rows;
* CRUD Controller for {@link LabelType}
* @author Diego Pino Garcia <dpino@igalia.com>
*/
public class LabelTypeCRUDController extends BaseCRUDController {
public class LabelTypeCRUDController extends BaseCRUDController<LabelType> {
@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);
}
}