Deprecate getCharacterData method in service layer
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / FeatureTreeServiceImpl.java
index 83f8edb3b080078f340774f68eb90171776159a3..6a7a1ce77af3c16c7c5021887665a85d835bf93a 100644 (file)
 *\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
 \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.Propagation;\r
 import org.springframework.transaction.annotation.Transactional;\r
 \r
-import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
-import eu.etaxonomy.cdm.model.common.VocabularyEnum;\r
-import eu.etaxonomy.cdm.model.description.Feature;\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(propagation = Propagation.SUPPORTS, 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
-       private IVocabularyService vocabularyService;\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
-               dao.loadNodes(featureTree.getRoot(),nodePaths);\r
-               return featureTree;\r
-       }\r
-       \r
-       /* (non-Javadoc)\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
-               if (dao.count() == 0){\r
-                       return createDefaultFeatureTree();\r
-               }\r
-               return super.load(uuid, propertyPaths);\r
-       }\r
-       \r
-       /**\r
-        * \r
-        */\r
-       private FeatureTree createDefaultFeatureTree() {\r
-               \r
-               TermVocabulary featureVocabulary = vocabularyService.getVocabulary(VocabularyEnum.Feature);\r
-               \r
-               List<Feature> featureList = new ArrayList<Feature>(featureVocabulary.getTerms());\r
-                               \r
-               FeatureTree featureTree = FeatureTree.NewInstance(DefaultFeatureTreeUuid);\r
-               save(featureTree);\r
-               logger.info("Default feature tree created.");\r
-               return featureTree;\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