+/**\r
+* Copyright (C) 2009 EDIT\r
+* European Distributed Institute of Taxonomy\r
+* http://www.e-taxonomy.eu\r
+*\r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
package eu.etaxonomy.cdm.api.service;\r
\r
import java.util.ArrayList;\r
+import java.util.Collection;\r
import java.util.List;\r
+import java.util.Map;\r
import java.util.UUID;\r
\r
+import javax.persistence.EntityNotFoundException;\r
+\r
import org.springframework.beans.factory.annotation.Autowired;\r
import org.springframework.stereotype.Service;\r
import org.springframework.transaction.annotation.Transactional;\r
\r
+import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;\r
import eu.etaxonomy.cdm.model.description.FeatureNode;\r
import eu.etaxonomy.cdm.model.description.FeatureTree;\r
import eu.etaxonomy.cdm.persistence.dao.description.IFeatureNodeDao;\r
import eu.etaxonomy.cdm.persistence.dao.description.IFeatureTreeDao;\r
+import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;\r
\r
@Service\r
-@Transactional(readOnly = true)\r
+@Transactional(readOnly = false)\r
public class FeatureTreeServiceImpl extends IdentifiableServiceBase<FeatureTree, IFeatureTreeDao> implements IFeatureTreeService {\r
\r
- private IFeatureNodeDao featureNodeDao;\r
- \r
- @Autowired\r
- protected void setDao(IFeatureTreeDao dao) {\r
- this.dao = dao;\r
- }\r
- \r
- @Autowired\r
- protected void setFeatureNodeDao(IFeatureNodeDao featureNodeDao) {\r
- this.featureNodeDao = featureNodeDao;\r
- }\r
-\r
- public void generateTitleCache() {\r
- // TODO Auto-generated method stub\r
- }\r
-\r
- public List<FeatureNode> getFeatureNodesAll() {\r
- return featureNodeDao.list();\r
- }\r
-\r
- public FeatureTree loadWithNodes(UUID uuid, List<String> propertyPaths, List<String> nodePaths) {\r
- nodePaths.add("children");\r
- \r
- List<String> rootPaths = new ArrayList<String>();\r
- rootPaths.add("root");\r
- for(String path : nodePaths) {\r
- rootPaths.add("root." + path);\r
- }\r
- \r
- if(propertyPaths != null) { \r
- rootPaths.addAll(propertyPaths);\r
- }\r
- \r
- FeatureTree featureTree = load(uuid, rootPaths);\r
- loadNodes(featureTree.getRoot(),nodePaths);\r
- return featureTree;\r
- }\r
- \r
- private void loadNodes(FeatureNode node, List<String> nodePaths) {\r
- for(FeatureNode child : node.getChildren()) {\r
- FeatureNode featureNode = featureNodeDao.load(child.getUuid(),nodePaths);\r
- loadNodes(featureNode,nodePaths);\r
- }\r
- }\r
+ private IFeatureNodeDao featureNodeDao;\r
+\r
+ @Autowired\r
+ private IVocabularyService vocabularyService;\r
+\r
+ @Override\r
+ @Autowired\r
+ protected void setDao(IFeatureTreeDao dao) {\r
+ this.dao = dao;\r
+ }\r
+\r
+ @Autowired\r
+ protected void setFeatureNodeDao(IFeatureNodeDao featureNodeDao) {\r
+ this.featureNodeDao = featureNodeDao;\r
+ }\r
+\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#updateTitleCache(java.lang.Integer, eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy)\r
+ */\r
+ @Override\r
+ @Transactional(readOnly = false)\r
+ public void updateTitleCache(Class<? extends FeatureTree> clazz, Integer stepSize, IIdentifiableEntityCacheStrategy<FeatureTree> cacheStrategy, IProgressMonitor monitor) {\r
+ if (clazz == null){\r
+ clazz = FeatureTree.class;\r
+ }\r
+ super.updateTitleCacheImpl(clazz, stepSize, cacheStrategy, monitor);\r
+ }\r
+\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.cdm.api.service.IFeatureTreeService#getFeatureNodesAll()\r
+ */\r
+ @Override\r
+ public List<FeatureNode> getFeatureNodesAll() {\r
+ return featureNodeDao.list();\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * @see eu.etaxonomy.cdm.api.service.IFeatureTreeService#saveFeatureNodesAll(java.util.Collection)\r
+ */\r
+ @Override\r
+ public Map<UUID, FeatureNode> saveFeatureNodesAll(Collection<FeatureNode> featureNodeCollection) {\r
+ return featureNodeDao.saveAll(featureNodeCollection);\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.cdm.api.service.IFeatureTreeService#saveOrUpdateFeatureNodesAll(java.util.Collection)\r
+ */\r
+ @Override\r
+ public Map<UUID, FeatureNode> saveOrUpdateFeatureNodesAll(Collection<FeatureNode> featureNodeCollection) {\r
+ return featureNodeDao.saveOrUpdateAll(featureNodeCollection);\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.cdm.api.service.IFeatureTreeService#loadWithNodes(java.util.UUID, java.util.List, java.util.List)\r
+ */\r
+ @Override\r
+ public FeatureTree loadWithNodes(UUID uuid, List<String> propertyPaths, List<String> nodePaths) {\r
+\r
+ if(!nodePaths.contains("children")) {\r
+ nodePaths.add("children");\r
+ }\r
+\r
+ List<String> rootPaths = new ArrayList<String>();\r
+ rootPaths.add("root");\r
+ for(String path : nodePaths) {\r
+ rootPaths.add("root." + path);\r
+ }\r
+\r
+ if(propertyPaths != null) {\r
+ rootPaths.addAll(propertyPaths);\r
+ }\r
+\r
+ FeatureTree featureTree = load(uuid, rootPaths);\r
+ if(featureTree == null){\r
+ throw new EntityNotFoundException("No FeatureTree entity found for " + uuid);\r
+ }\r
+ dao.deepLoadNodes(featureTree.getRoot().getChildNodes() ,nodePaths);\r
+ return featureTree;\r
+ }\r
+\r
+ /**\r
+ * Returns the featureTree specified by the given <code>uuid</code>.\r
+ * The specified featureTree either can be one of those stored in the CDM database or can be the\r
+ * DefaultFeatureTree (contains all Features in use).\r
+ * The uuid of the DefaultFeatureTree is defined in {@link IFeatureTreeService#DefaultFeatureTreeUuid}.\r
+ * The DefaultFeatureTree is also returned if no feature tree at all is stored in the cdm database.\r
+ *\r
+ * @see eu.etaxonomy.cdm.api.service.ServiceBase#load(java.util.UUID, java.util.List)\r
+ */\r
+ @Override\r
+ public FeatureTree load(UUID uuid, List<String> propertyPaths) {\r
+ return super.load(uuid, propertyPaths);\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.cdm.api.service.IFeatureTreeService#createTransientDefaultFeatureTree()\r
+ */\r
+ @Override\r
+ public FeatureTree createTransientDefaultFeatureTree() {\r
+ return load(IFeatureTreeDao.DefaultFeatureTreeUuid);\r
+ }\r
+\r
+\r
+\r
}\r