Adapted CriterionAdminController to extend BaseCRUDController.

FEA: ItEr75S14ShowInformationEditedEntity
This commit is contained in:
Manuel Rego Casasnovas 2011-07-21 09:11:24 +02:00
parent fa457a0e0e
commit fe288512c6
5 changed files with 89 additions and 141 deletions

View file

@ -35,6 +35,7 @@ import org.hibernate.validator.NotEmpty;
import org.hibernate.validator.NotNull;
import org.hibernate.validator.Valid;
import org.navalplanner.business.advance.entities.AdvanceAssignment;
import org.navalplanner.business.common.IHumanIdentifiable;
import org.navalplanner.business.common.IntegrationEntity;
import org.navalplanner.business.common.Registry;
import org.navalplanner.business.common.entities.EntitySequence;
@ -49,7 +50,7 @@ import org.springframework.stereotype.Component;
*/
@Component
public class CriterionType extends IntegrationEntity implements
ICriterionType<Criterion> {
ICriterionType<Criterion>, IHumanIdentifiable {
public static CriterionType create() {
return create(new CriterionType());
@ -556,4 +557,9 @@ public class CriterionType extends IntegrationEntity implements
return name;
}
@Override
public String getHumanId() {
return name;
}
}

View file

@ -28,33 +28,29 @@ import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.validator.InvalidValue;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.resources.entities.ICriterionType;
import org.navalplanner.business.resources.entities.ResourceEnum;
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.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;
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;
/**
* Controller for Criterions <br />
*/
public class CriterionAdminController extends GenericForwardComposer {
public class CriterionAdminController extends BaseCRUDController<CriterionType> {
private static final Log LOG = LogFactory
.getLog(CriterionAdminController.class);
@ -62,97 +58,17 @@ public class CriterionAdminController extends GenericForwardComposer {
@Autowired
private ICriterionsModel criterionsModel;
private Component messagesContainer;
private IMessagesForUser messagesForUser;
private Window listing;
private Window editWindow;
private Checkbox cbHierarchy;
private OnlyOneVisible onlyOneVisible;
private CriterionTreeController editionTree;
@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.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.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) {
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);
}
private void showConfirmRemoveWindow(CriterionType criterionType) {
try {
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.confirmRemove(criterionType);
Util.reloadBindings(listing);
messagesForUser.showMessage(
Level.INFO, _("Removed {0}", criterionType.getName()));
}
public void confirmDisabledHierarchy() {
if (!cbHierarchy.isChecked()){
showConfirmingHierarchyWindow();
@ -197,7 +113,7 @@ public class CriterionAdminController extends GenericForwardComposer {
Level.INFO,
_("Tree {0} sucessfully flattened", criterionsModel
.getCriterionType().getName()));
Util.reloadBindings(listing);
Util.reloadBindings(listWindow);
}
public void changeEnabled(Checkbox checkbox) {
@ -208,49 +124,6 @@ public class CriterionAdminController extends GenericForwardComposer {
return editionTree;
}
public void saveAndClose(){
try {
clearUserMessages();
save();
close();
} catch (ValidationException e) {
}
}
public void close() {
onlyOneVisible.showOnly(listing);
Util.reloadBindings(listing);
}
private void save() throws ValidationException {
try {
criterionsModel.saveCriterionType();
messagesForUser.showMessage(Level.INFO,
_("CriterionType and its criteria saved"));
} catch (ValidationException e) {
for (InvalidValue invalidValue : e.getInvalidValues()) {
String message = invalidValue.getPropertyName() + " : "
+ _(invalidValue.getMessage());
messagesForUser.showMessage(Level.ERROR, message);
}
throw e;
}
}
private void clearUserMessages() {
messagesForUser.clearMessages();
}
public void saveAndContinue() {
try{
save();
reloadCriterionType();
} catch (ValidationException e) {
}
}
private void reloadCriterionType() {
Tree tree = (Tree) editWindow.getFellowIfAny("tree");
criterionsModel.reloadCriterionType();
@ -285,8 +158,8 @@ public class CriterionAdminController extends GenericForwardComposer {
CriterionType criterionType = (CriterionType) getCriterionType();
for (Object object : combo.getItems()) {
Comboitem item = (Comboitem) object;
if(criterionType != null &&
item.getValue().equals(criterionType.getResource())) {
if (criterionType != null
&& item.getValue().equals(criterionType.getResource())) {
combo.setSelectedItem(item);
}
}
@ -322,4 +195,71 @@ public class CriterionAdminController extends GenericForwardComposer {
editionTree.reloadTree();
}
@Override
protected String getEntityType() {
return "Criterion Type";
}
@Override
protected String getPluralEntityType() {
return "Criterion Types";
}
@Override
protected void initCreate() {
criterionsModel.prepareForCreate();
try {
setupCriterionTreeController(editWindow);
} catch (Exception e) {
LOG.error(
_("Error setting up creationg form for Criterion Type with id}"),
e);
}
setResourceComboboxValue((Combobox) editWindow
.getFellowIfAny("resourceCombobox"));
}
@Override
protected void initEdit(CriterionType criterionType) {
criterionsModel.prepareForEdit(criterionType);
try {
setupCriterionTreeController(editWindow);
} catch (Exception e) {
LOG.error(
_("Error setting up edition form for Criterion Type with id: {0}",
criterionType.getId()), e);
}
setResourceComboboxValue((Combobox) editWindow
.getFellowIfAny("resourceCombobox"));
}
@Override
protected void save() throws ValidationException {
criterionsModel.saveCriterionType();
reloadCriterionType();
}
@Override
protected CriterionType getEntityBeingEdited() {
return (CriterionType) criterionsModel.getCriterionType();
}
@Override
protected void delete(CriterionType criterionType)
throws InstanceNotFoundException {
criterionsModel.confirmRemove(criterionType);
}
@Override
protected boolean beforeDeleting(CriterionType criterionType) {
if (!criterionsModel.canRemove(criterionType)) {
messagesForUser
.showMessage(
Level.WARNING,
_("This criterion type cannot be deleted because it has assignments to projects or resources"));
return false;
}
return true;
}
}

View file

@ -21,7 +21,7 @@
<?component name="criterionsTree" inline="true" macroURI="_criterionsTree.zul"?>
<window id="${arg.id}" title="${arg.title}">
<window id="${arg.id}">
<tabbox>
<tabs>
<tab label="${i18n:_('Edit')}" width="850"></tab>
@ -36,7 +36,8 @@
<rows>
<row>
<label value="${i18n:_('Name')}" />
<textbox width="390px" value="@{controller.criterionType.name}"/>
<textbox width="390px" value="@{controller.criterionType.name}"
onBlur="controller.updateWindowTitle()" />
</row>
<row>
<label value="${i18n:_('Type')}" />
@ -84,11 +85,11 @@
</tabpanels>
</tabbox>
<hbox>
<button id="save" onClick="controller.saveAndClose();"
<button id="save" onClick="controller.saveAndExit();"
label="${i18n:_('Save')}" sclass="save-button global-action" />
<button id="save_and_continue" onClick="controller.saveAndContinue();"
label="${i18n:_('Save &amp; Continue')}" sclass="saveandcontinue-button global-action"/>
<button id="close" onClick="controller.close();"
<button id="close" onClick="controller.cancelForm();"
label="${i18n:_('Cancel')}" sclass="cancel-button global-action"/>
</hbox>
</window>

View file

@ -19,7 +19,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<window id="listing" title="${i18n:_('Criterion Type List')}">
<window id="listWindow" title="${i18n:_('Criterion Type List')}">
<newdatasortablegrid model="@{controller.criterionTypes}" fixedLayout="true" sclass="clickable-rows">
<columns>
<newdatasortablecolumn label="${i18n:_('Name')}" sort="auto(lower(name))" sortDirection="ascending" />
@ -42,7 +42,8 @@
</button>
<button sclass="icono" image="/common/img/ico_borrar1.png"
hoverImage="/common/img/ico_borrar.png"
tooltiptext="${i18n:_('Delete')}" disabled="@{criterionType.immutable}" onClick="controller.confirmRemove(self.parent.parent.value);">
tooltiptext="${i18n:_('Delete')}" disabled="@{criterionType.immutable}"
onClick="controller.confirmDelete(self.parent.parent.value);">
</button>
</hbox>
</row>

View file

@ -39,7 +39,7 @@
<vbox id="messagesContainer" />
<list top_id="listWindow" />
<list id="listWindow" />
<edition id="editWindow"
save_button_label="${i18n:_('Save')}"