ItEr34S08ValidacionEProbasFuncionaisItEr33S08: [Bug #86] Remove of work report type causes exception

This commit is contained in:
Diego Pino Garcia 2009-11-07 23:22:21 +01:00 committed by Javier Moran Rua
parent 83bba9ec17
commit 03e15dd68a
6 changed files with 75 additions and 49 deletions

View file

@ -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<WorkReport, Long> {
List<WorkReport> getAllByWorkReportType(WorkReportType workReportType);
}

View file

@ -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<WorkReport, Long>
implements IWorkReportDAO {
@SuppressWarnings("unchecked")
@Override
public List<WorkReport> getAllByWorkReportType(WorkReportType workReportType) {
final Criteria criteria = getSession().createCriteria(WorkReport.class);
return criteria.add(Restrictions.eq("workReportType", workReportType)).list();
}
}

View file

@ -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);
}

View file

@ -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()));

View file

@ -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<WorkReport> workReports = workReportDAO.getAllByWorkReportType(workReportType);
return (workReports != null && !workReports.isEmpty());
}
@Override
@Transactional(readOnly = true)
public List<WorkReportType> 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) {

View file

@ -36,20 +36,5 @@
save_button_label="${i18n:_('Save')}" cancel_button_label="${i18n:_('Cancel')}" />
<edition top_id="editWindow" title="${i18n:_('Edit')}"
save_button_label="${i18n:_('Save')}" cancel_button_label="${i18n:_('Cancel')}" />
<window visible="@{controller.confirmingRemove}"
id="confirmRemove" title="${i18n:_('Confirm')}" width="500px"
position="center">
<vbox>
<hbox>
¿Do you want to delete <label value="@{controller.workReportType.name}"/>?
</hbox>
<hbox>
<button label="${i18n:_('Yes')}"
onClick="controller.remove(controller.workReportType);" />
<button label="${i18n:_('No')}"
onClick="controller.cancelRemove();" />
</hbox>
</vbox>
</window>
</window>
</zk>