X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/blobdiff_plain/b87400664551bc86e4653aa3af7b0306b9e91320..45546a913cf144912d383d54758aa51c81367ec9:/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/FeatureTreeServiceImpl.java diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/FeatureTreeServiceImpl.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/FeatureTreeServiceImpl.java index 6d3c36b23a..6a7a1ce77a 100644 --- a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/FeatureTreeServiceImpl.java +++ b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/FeatureTreeServiceImpl.java @@ -5,7 +5,7 @@ * * 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; @@ -15,102 +15,128 @@ import java.util.List; import java.util.Map; import java.util.UUID; +import javax.persistence.EntityNotFoundException; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -import eu.etaxonomy.cdm.model.common.TermVocabulary; -import eu.etaxonomy.cdm.model.common.VocabularyEnum; -import eu.etaxonomy.cdm.model.description.Feature; +import eu.etaxonomy.cdm.common.monitor.IProgressMonitor; import eu.etaxonomy.cdm.model.description.FeatureNode; import eu.etaxonomy.cdm.model.description.FeatureTree; import eu.etaxonomy.cdm.persistence.dao.description.IFeatureNodeDao; import eu.etaxonomy.cdm.persistence.dao.description.IFeatureTreeDao; +import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy; @Service -@Transactional(propagation = Propagation.SUPPORTS, readOnly = false) +@Transactional(readOnly = false) public class FeatureTreeServiceImpl extends IdentifiableServiceBase implements IFeatureTreeService { - private IFeatureNodeDao featureNodeDao; - - @Autowired - private IVocabularyService vocabularyService; - - @Autowired - protected void setDao(IFeatureTreeDao dao) { - this.dao = dao; - } - - @Autowired - protected void setFeatureNodeDao(IFeatureNodeDao featureNodeDao) { - this.featureNodeDao = featureNodeDao; - } - - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#updateTitleCache() - */ - @Override - public void updateTitleCache() { - Class clazz = FeatureTree.class; - super.updateTitleCache(clazz, null, null); - } - - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.IFeatureTreeService#getFeatureNodesAll() - */ - public List getFeatureNodesAll() { - return featureNodeDao.list(); - } - - /* - * (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.IFeatureTreeService#saveFeatureNodesAll(java.util.Collection) - */ - public Map saveFeatureNodesAll(Collection featureNodeCollection) { - return featureNodeDao.saveAll(featureNodeCollection); - } - - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.IFeatureTreeService#saveOrUpdateFeatureNodesAll(java.util.Collection) - */ - public Map saveOrUpdateFeatureNodesAll(Collection featureNodeCollection) { - return featureNodeDao.saveOrUpdateAll(featureNodeCollection); - } - - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.IFeatureTreeService#loadWithNodes(java.util.UUID, java.util.List, java.util.List) - */ - public FeatureTree loadWithNodes(UUID uuid, List propertyPaths, List nodePaths) { - nodePaths.add("children"); - - List rootPaths = new ArrayList(); - rootPaths.add("root"); - for(String path : nodePaths) { - rootPaths.add("root." + path); - } - - if(propertyPaths != null) { - rootPaths.addAll(propertyPaths); - } - - FeatureTree featureTree = load(uuid, rootPaths); - dao.loadNodes(featureTree.getRoot(),nodePaths); - return featureTree; - } - - /** - * Returns the featureTree specified by the given uuid. - * The specified featureTree either can be one of those stored in the CDM database or can be the - * DefaultFeatureTree (contains all Features in use). - * The uuid of the DefaultFeatureTree is defined in {@link IFeatureTreeService#DefaultFeatureTreeUuid}. - * The DefaultFeatureTree is also returned if no feature tree at all is stored in the cdm database. - * - * @see eu.etaxonomy.cdm.api.service.ServiceBase#load(java.util.UUID, java.util.List) - */ - @Override - public FeatureTree load(UUID uuid, List propertyPaths) { - return super.load(uuid, propertyPaths); - } - + private IFeatureNodeDao featureNodeDao; + + @Autowired + private IVocabularyService vocabularyService; + + @Override + @Autowired + protected void setDao(IFeatureTreeDao dao) { + this.dao = dao; + } + + @Autowired + protected void setFeatureNodeDao(IFeatureNodeDao featureNodeDao) { + this.featureNodeDao = featureNodeDao; + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#updateTitleCache(java.lang.Integer, eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy) + */ + @Override + @Transactional(readOnly = false) + public void updateTitleCache(Class clazz, Integer stepSize, IIdentifiableEntityCacheStrategy cacheStrategy, IProgressMonitor monitor) { + if (clazz == null){ + clazz = FeatureTree.class; + } + super.updateTitleCacheImpl(clazz, stepSize, cacheStrategy, monitor); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IFeatureTreeService#getFeatureNodesAll() + */ + @Override + public List getFeatureNodesAll() { + return featureNodeDao.list(); + } + + /* + * (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IFeatureTreeService#saveFeatureNodesAll(java.util.Collection) + */ + @Override + public Map saveFeatureNodesAll(Collection featureNodeCollection) { + return featureNodeDao.saveAll(featureNodeCollection); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IFeatureTreeService#saveOrUpdateFeatureNodesAll(java.util.Collection) + */ + @Override + public Map saveOrUpdateFeatureNodesAll(Collection featureNodeCollection) { + return featureNodeDao.saveOrUpdateAll(featureNodeCollection); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IFeatureTreeService#loadWithNodes(java.util.UUID, java.util.List, java.util.List) + */ + @Override + public FeatureTree loadWithNodes(UUID uuid, List propertyPaths, List nodePaths) { + + if(!nodePaths.contains("children")) { + nodePaths.add("children"); + } + + List rootPaths = new ArrayList(); + rootPaths.add("root"); + for(String path : nodePaths) { + rootPaths.add("root." + path); + } + + if(propertyPaths != null) { + rootPaths.addAll(propertyPaths); + } + + FeatureTree featureTree = load(uuid, rootPaths); + if(featureTree == null){ + throw new EntityNotFoundException("No FeatureTree entity found for " + uuid); + } + dao.deepLoadNodes(featureTree.getRoot().getChildNodes() ,nodePaths); + return featureTree; + } + + /** + * Returns the featureTree specified by the given uuid. + * The specified featureTree either can be one of those stored in the CDM database or can be the + * DefaultFeatureTree (contains all Features in use). + * The uuid of the DefaultFeatureTree is defined in {@link IFeatureTreeService#DefaultFeatureTreeUuid}. + * The DefaultFeatureTree is also returned if no feature tree at all is stored in the cdm database. + * + * @see eu.etaxonomy.cdm.api.service.ServiceBase#load(java.util.UUID, java.util.List) + */ + @Override + public FeatureTree load(UUID uuid, List propertyPaths) { + return super.load(uuid, propertyPaths); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IFeatureTreeService#createTransientDefaultFeatureTree() + */ + @Override + public FeatureTree createTransientDefaultFeatureTree() { + return load(IFeatureTreeDao.DefaultFeatureTreeUuid); + } + + + }