X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/blobdiff_plain/810b7215538c54c7bc9a69b5763fb19c0a5e65c2..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 4b30d7ddd6..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,18 +10,25 @@ 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; @@ -34,8 +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) { @@ -133,17 +136,74 @@ public class PolytomousKeyServiceImpl extends IdentifiableServiceBase polytomousKeys = dao.list(); + for(PolytomousKey polytomousKey : polytomousKeys) { + polytomousKey.getRoot().refreshNodeNumbering(); + } + return result; + } + @Override + public DeleteResult delete(PolytomousKey key){ + //DeleteResult result = new DeleteResult(); + PolytomousKeyNode root = key.getRoot(); + + + DeleteResult result = isDeletable(key, null); + + if (result.isOk()){ + try{ + if (root != null){ + nodeService.delete(root.getUuid(), true); + } + }catch(Exception e){ + result.addException(e); + result.setAbort(); + return result; + } + try{ + dao.delete(key); + }catch(Exception e){ + result.addException(e); + result.setAbort(); + return result; + } + } + return result; + } + + @Override + public DeleteResult isDeletable(PolytomousKey key, DeleteConfiguratorBase config){ + DeleteResult result = new DeleteResult(); + Set 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; + } }