diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/IWorkReportDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/IWorkReportDAO.java index 91aa1e57a..f643767f7 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/IWorkReportDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/IWorkReportDAO.java @@ -20,8 +20,11 @@ package org.navalplanner.business.workreports.daos; +import java.util.List; + import org.navalplanner.business.common.daos.IGenericDAO; import org.navalplanner.business.workreports.entities.WorkReport; +import org.navalplanner.business.workreports.entities.WorkReportType; /** * Dao for {@link WorkReport} @@ -30,4 +33,6 @@ import org.navalplanner.business.workreports.entities.WorkReport; */ public interface IWorkReportDAO extends IGenericDAO { + List getAllByWorkReportType(WorkReportType workReportType); + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/WorkReportDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/WorkReportDAO.java index 44db123b9..7cd885dee 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/WorkReportDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/WorkReportDAO.java @@ -20,8 +20,13 @@ package org.navalplanner.business.workreports.daos; +import java.util.List; + +import org.hibernate.Criteria; +import org.hibernate.criterion.Restrictions; import org.navalplanner.business.common.daos.GenericDAOHibernate; import org.navalplanner.business.workreports.entities.WorkReport; +import org.navalplanner.business.workreports.entities.WorkReportType; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Repository; @@ -36,4 +41,11 @@ import org.springframework.stereotype.Repository; public class WorkReportDAO extends GenericDAOHibernate implements IWorkReportDAO { + @SuppressWarnings("unchecked") + @Override + public List getAllByWorkReportType(WorkReportType workReportType) { + final Criteria criteria = getSession().createCriteria(WorkReport.class); + return criteria.add(Restrictions.eq("workReportType", workReportType)).list(); + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/IWorkReportTypeModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/IWorkReportTypeModel.java index 40d86fb4b..071670458 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/IWorkReportTypeModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/IWorkReportTypeModel.java @@ -25,6 +25,7 @@ import java.util.Set; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.resources.entities.CriterionType; +import org.navalplanner.business.workreports.entities.WorkReport; import org.navalplanner.business.workreports.entities.WorkReportType; /** @@ -62,7 +63,7 @@ public interface IWorkReportTypeModel { * @param workReportType * The object to be removed */ - void remove(WorkReportType workReportType); + void confirmRemove(WorkReportType workReportType); /** * Makes some operations needed before create a new {@link WorkReportType}. @@ -108,4 +109,12 @@ public interface IWorkReportTypeModel { */ boolean isEditing(); + /** + * Check if there is any {@link WorkReport} bound to {@link WorkReportType} + * + * @param workReportType + * @return + */ + boolean thereAreWorkReportsFor(WorkReportType workReportType); + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportTypeCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportTypeCRUDController.java index 1c6c28bec..b8d7384c9 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportTypeCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportTypeCRUDController.java @@ -20,10 +20,13 @@ package org.navalplanner.web.workreports; +import static org.navalplanner.web.I18nHelper._; + import java.util.HashSet; import java.util.List; import java.util.Set; +import org.apache.commons.logging.LogFactory; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.resources.entities.CriterionType; import org.navalplanner.business.workreports.entities.WorkReportType; @@ -37,10 +40,10 @@ import org.navalplanner.web.common.entrypoints.IURLHandlerRegistry; import org.navalplanner.web.common.entrypoints.URLHandler; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.util.GenericForwardComposer; +import org.zkoss.zul.Grid; +import org.zkoss.zul.Messagebox; import org.zkoss.zul.api.Window; -import static org.navalplanner.web.I18nHelper._; - /** * Controller for CRUD actions over a {@link WorkReportType} * @@ -49,16 +52,15 @@ import static org.navalplanner.web.I18nHelper._; public class WorkReportTypeCRUDController extends GenericForwardComposer implements IWorkReportTypeCRUDControllerEntryPoints { + private static final org.apache.commons.logging.Log LOG = LogFactory + .getLog(WorkReportTypeCRUDController.class); + private Window listWindow; private Window createWindow; private Window editWindow; - private Window confirmRemove; - - private boolean confirmingRemove = false; - private IWorkReportTypeModel workReportTypeModel; private OnlyOneVisible visibility; @@ -154,38 +156,39 @@ public class WorkReportTypeCRUDController extends GenericForwardComposer } public void confirmRemove(WorkReportType workReportType) { - workReportTypeModel.prepareForRemove(workReportType); - showConfirmingWindow(); - } + if (thereAreWorkReportsFor(workReportType)) { + try { + Messagebox.show(_("Cannot delete work report type. There are some work reports bound to it."), + _("Warning"), Messagebox.OK, Messagebox.EXCLAMATION); + } catch (InterruptedException e) { + LOG.error(_("Error on showing warning message removing workReportType: ", workReportType.getId()), e); + } + return; + } - public void cancelRemove() { - confirmingRemove = false; - confirmRemove.setVisible(false); - Util.reloadBindings(confirmRemove); - } - - public boolean isConfirmingRemove() { - return confirmingRemove; - } - - private void hideConfirmingWindow() { - confirmingRemove = false; - Util.reloadBindings(confirmRemove); - } - - private void showConfirmingWindow() { - confirmingRemove = true; + // Show remove confirming window try { - Util.reloadBindings(confirmRemove); - confirmRemove.doModal(); - } catch (Exception e) { - throw new RuntimeException(e); + if (Messagebox.show(_("Delete item. Are you sure?"), _("Confirm"), + Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION) == Messagebox.OK) { + workReportTypeModel.confirmRemove(workReportType); + final Grid workReportTypes = (Grid) listWindow.getFellowIfAny("listing"); + if (workReportTypes != null) { + Util.reloadBindings(workReportTypes); + } + } + } catch (InterruptedException e) { + messagesForUser.showMessage( + Level.ERROR, e.getMessage()); + LOG.error(_("Error on removing workReportType: ", workReportType.getId()), e); } } + private boolean thereAreWorkReportsFor(WorkReportType workReportType) { + return workReportTypeModel.thereAreWorkReportsFor(workReportType); + } + public void remove(WorkReportType workReportType) { - workReportTypeModel.remove(workReportType); - hideConfirmingWindow(); + workReportTypeModel.confirmRemove(workReportType); Util.reloadBindings(listWindow); messagesForUser.showMessage( Level.INFO, _("Removed {0}", workReportType.getName())); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportTypeModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportTypeModel.java index d8108a55c..d34561185 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportTypeModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportTypeModel.java @@ -29,7 +29,9 @@ import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.resources.daos.ICriterionTypeDAO; import org.navalplanner.business.resources.entities.CriterionType; +import org.navalplanner.business.workreports.daos.IWorkReportDAO; import org.navalplanner.business.workreports.daos.IWorkReportTypeDAO; +import org.navalplanner.business.workreports.entities.WorkReport; import org.navalplanner.business.workreports.entities.WorkReportType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; @@ -53,6 +55,9 @@ public class WorkReportTypeModel implements IWorkReportTypeModel { @Autowired private IWorkReportTypeDAO workReportTypeDAO; + @Autowired + private IWorkReportDAO workReportDAO; + private WorkReportType workReportType; private boolean editing = false; @@ -62,6 +67,13 @@ public class WorkReportTypeModel implements IWorkReportTypeModel { return this.workReportType; } + @Override + @Transactional(readOnly = true) + public boolean thereAreWorkReportsFor(WorkReportType workReportType) { + final List workReports = workReportDAO.getAllByWorkReportType(workReportType); + return (workReports != null && !workReports.isEmpty()); + } + @Override @Transactional(readOnly = true) public List getWorkReportTypes() { @@ -117,7 +129,7 @@ public class WorkReportTypeModel implements IWorkReportTypeModel { @Override @Transactional - public void remove(WorkReportType workReportType) { + public void confirmRemove(WorkReportType workReportType) { try { workReportTypeDAO.remove(workReportType.getId()); } catch (InstanceNotFoundException e) { diff --git a/navalplanner-webapp/src/main/webapp/workreports/workReportTypes.zul b/navalplanner-webapp/src/main/webapp/workreports/workReportTypes.zul index 0507e8d47..6a411938d 100644 --- a/navalplanner-webapp/src/main/webapp/workreports/workReportTypes.zul +++ b/navalplanner-webapp/src/main/webapp/workreports/workReportTypes.zul @@ -36,20 +36,5 @@ save_button_label="${i18n:_('Save')}" cancel_button_label="${i18n:_('Cancel')}" /> - - - - ¿Do you want to delete - -