X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/blobdiff_plain/1995f802501b8ca40481adf35241a91107c3c638..e8302290d4e34ecf7526c3dfb389805e3b36a1d5:/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/VersionableServiceBase.java diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/VersionableServiceBase.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/VersionableServiceBase.java index b0c15bb3c1..91ca7d0d82 100644 --- a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/VersionableServiceBase.java +++ b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/VersionableServiceBase.java @@ -1,22 +1,25 @@ // $Id$ /** * Copyright (C) 2007 EDIT - * European Distributed Institute of Taxonomy + * European Distributed Institute of Taxonomy * http://www.e-taxonomy.eu - * + * * The contents of this file are subject to the Mozilla Public License Version 1.1 * See LICENSE.TXT at the top of this package for the full license terms. */ package eu.etaxonomy.cdm.api.service; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; +import java.util.Set; import org.hibernate.envers.query.criteria.AuditCriterion; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import eu.etaxonomy.cdm.api.service.config.DeleteConfiguratorBase; +import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException; import eu.etaxonomy.cdm.api.service.pager.Pager; import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl; import eu.etaxonomy.cdm.model.common.CdmBase; @@ -29,51 +32,63 @@ import eu.etaxonomy.cdm.persistence.dao.common.IVersionableDao; public abstract class VersionableServiceBase> extends ServiceBase implements IVersionableService { @Autowired protected ICommonService commonService; - @Transactional(readOnly = true) + @Override + @Transactional(readOnly = true) public Pager> pageAuditEvents(T t, Integer pageSize, Integer pageNumber, AuditEventSort sort, List propertyPaths) { Integer numberOfResults = dao.countAuditEvents(t, sort); - + List> results = new ArrayList>(); if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize) results = dao.getAuditEvents(t, pageSize, pageNumber, sort,propertyPaths); } - + return new DefaultPagerImpl>(pageNumber, numberOfResults, pageSize, results); } - @Transactional(readOnly = true) + @Override + @Transactional(readOnly = true) public AuditEventRecord getNextAuditEvent(T t) { return dao.getNextAuditEvent(t); } - @Transactional(readOnly = true) + @Override + @Transactional(readOnly = true) public AuditEventRecord getPreviousAuditEvent(T t) { return dao.getPreviousAuditEvent(t); } - - @Transactional(readOnly = true) + + @Override + @Transactional(readOnly = true) public Pager> pageAuditEvents(Class clazz,AuditEvent from,AuditEvent to, List criteria, Integer pageSize, Integer pageNumber, AuditEventSort sort,List propertyPaths) { Integer numberOfResults = dao.countAuditEvents(clazz, from, to, criteria); - + List> results = new ArrayList>(); if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize) results = dao.getAuditEvents(clazz,from,to,criteria, pageSize, pageNumber, sort,propertyPaths); } - + return new DefaultPagerImpl>(pageNumber, numberOfResults, pageSize, results); } - + /** * the basic isDeletable method return false if the object is referenced from any other object. */ - + @Override - public List isDeletable(T base, DeleteConfiguratorBase config){ - List result = new ArrayList(); - if (commonService.getReferencingObjects(base).size() > 0){ - //TODO + public DeleteResult isDeletable(T base, DeleteConfiguratorBase config){ + DeleteResult result = new DeleteResult(); + Set references = commonService.getReferencingObjectsForDeletion(base); + if (references != null){ + result.addRelatedObjects(references); + Iterator iterator = references.iterator(); + CdmBase ref; + while (iterator.hasNext()){ + ref = iterator.next(); + String message = "An object of " + ref.getClass().getName() + " with ID " + ref.getId() + " is referencing the object" ; + result.addException(new ReferencedObjectUndeletableException(message)); + result.setAbort(); + } } return result; } - }