X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/blobdiff_plain/d00a3071a67f052f2af91d58514f4ed4d26c9951..700526036218d96a6474b950bdc70cda5b0bba2e:/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/PolytomousKeyServiceImpl.java diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/PolytomousKeyServiceImpl.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/PolytomousKeyServiceImpl.java index f74e10afe7..f586e93d8a 100644 --- a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/PolytomousKeyServiceImpl.java +++ b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/PolytomousKeyServiceImpl.java @@ -10,23 +10,28 @@ package eu.etaxonomy.cdm.api.service; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; +import java.util.Set; import java.util.UUID; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; 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.AbstractPagerImpl; import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl; import eu.etaxonomy.cdm.common.monitor.IProgressMonitor; +import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; +import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.description.PolytomousKey; import eu.etaxonomy.cdm.model.description.PolytomousKeyNode; import eu.etaxonomy.cdm.model.taxon.TaxonBase; import eu.etaxonomy.cdm.persistence.dao.description.IIdentificationKeyDao; import eu.etaxonomy.cdm.persistence.dao.description.IPolytomousKeyDao; -import eu.etaxonomy.cdm.persistence.dao.description.IPolytomousKeyNodeDao; import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonDao; import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy; @@ -36,7 +41,8 @@ public class PolytomousKeyServiceImpl extends IdentifiableServiceBase propertyPaths, List nodePaths) { List list = new ArrayList(); - taxon = taxonDao.findById(taxon.getId()); - Long numberOfResults = identificationKeyDao.countByTaxonomicScope(taxon, PolytomousKey.class); + Long numberOfResults = identificationKeyDao.countByTaxonomicScope(taxon.getUuid(), PolytomousKey.class); if(AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)){ - list = identificationKeyDao.findByTaxonomicScope(taxon, PolytomousKey.class, pageSize, pageNumber, propertyPaths); + list = identificationKeyDao.findByTaxonomicScope(taxon.getUuid(), PolytomousKey.class, pageSize, pageNumber, propertyPaths); } if (nodePaths != null) { for (PolytomousKey polytomousKey : list) { @@ -154,24 +156,54 @@ public class PolytomousKeyServiceImpl extends IdentifiableServiceBase references = commonService.getReferencingObjectsForDeletion(key); + if (references != null){ + Iterator iterator = references.iterator(); + CdmBase ref; + while (iterator.hasNext()){ + ref = iterator.next(); + if ((ref instanceof PolytomousKeyNode) ){ + PolytomousKeyNode node = HibernateProxyHelper.deproxy(ref, PolytomousKeyNode.class); + if (!node.getKey().equals(key)){ + String message = "The key is a subkey of " + node.getKey() + ", referenced in node with id: " + node.getId() + ". Please remove the subkey reference first and then delete the key. " ; + result.addException(new ReferencedObjectUndeletableException(message)); + result.setAbort(); + result.addRelatedObject(ref); + } + } + } + } + return result; + } + }