X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/blobdiff_plain/5740535eed2ef356853c9b3e7227af211ab81c61..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 e1cd6dd5be..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 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; + } + }