Revert "getUuidAndTitleCache of classificationservice does not need the excluded...
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / ServiceBase.java
index 31f7f9a715164a3a84078a2693a05b2e9126c686..f73bf49797a473b1ecb95195df4b7c1776676989 100644 (file)
@@ -29,6 +29,7 @@ import eu.etaxonomy.cdm.api.service.pager.Pager;
 import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.cdm.persistence.dao.common.ICdmEntityDao;\r
+import eu.etaxonomy.cdm.persistence.dto.MergeResult;\r
 import eu.etaxonomy.cdm.persistence.query.Grouping;\r
 import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
 \r
@@ -66,12 +67,32 @@ public abstract class ServiceBase<T extends CdmBase, DAO extends ICdmEntityDao<T
         return dao.count(clazz);\r
     }\r
 \r
+    @Override\r
+    @Transactional(readOnly = false)\r
+    public DeleteResult delete(UUID persistentObjectUUID) {\r
+        T persistentObject = dao.findByUuid(persistentObjectUUID);\r
+        return delete(persistentObject);\r
+    }\r
+\r
+    @Override\r
+    @Transactional(readOnly = false)\r
+    public DeleteResult delete(Collection<UUID> persistentObjectUUIDs) {\r
+        DeleteResult result = new DeleteResult();\r
+        for(UUID persistentObjectUUID : persistentObjectUUIDs) {\r
+            T persistentObject = dao.findByUuid(persistentObjectUUID);\r
+            DeleteResult dr = delete(persistentObject);\r
+            result.includeResult(dr);\r
+        }\r
+        return result;\r
+    }\r
+\r
     @Override\r
     @Transactional(readOnly = false)\r
     public DeleteResult delete(T persistentObject) {\r
        DeleteResult result = new DeleteResult();\r
        try{\r
                dao.delete(persistentObject);\r
+               result.setCdmEntity(persistentObject);\r
        } catch(DataAccessException e){\r
                result.setError();\r
                result.addException(e);\r
@@ -79,11 +100,7 @@ public abstract class ServiceBase<T extends CdmBase, DAO extends ICdmEntityDao<T
         return result;\r
     }\r
 \r
-    @Override\r
-    @Transactional(readOnly = false)\r
-    public DeleteResult delete(UUID uuid) {\r
-        return delete(dao.load(uuid));\r
-    }\r
+\r
 \r
     @Override\r
     @Transactional(readOnly = true)\r
@@ -100,7 +117,13 @@ public abstract class ServiceBase<T extends CdmBase, DAO extends ICdmEntityDao<T
     @Override\r
     @Transactional(readOnly = true)\r
     public List<T> findById(Set<Integer> idSet) {  //can't be called find(Set<Integer>) as this conflicts with find(Set<UUID)\r
-        return dao.listByIds(idSet, null, null, null, null);\r
+        return dao.loadList(idSet, null);\r
+    }\r
+\r
+    @Override\r
+    @Transactional(readOnly = true)\r
+    public List<T> loadByIds(List<Integer> idList, List<String> propertyPaths){\r
+        return dao.loadList(idList, propertyPaths);\r
     }\r
 \r
     @Override\r
@@ -145,18 +168,64 @@ public abstract class ServiceBase<T extends CdmBase, DAO extends ICdmEntityDao<T
         return uuid == null ? null : dao.load(uuid);\r
     }\r
 \r
+    @Override\r
+    @Transactional(readOnly = true)\r
+    public T loadWithUpdate(UUID uuid) {\r
+        return load(uuid);\r
+    }\r
+\r
     @Override\r
     @Transactional(readOnly = true)\r
     public T load(UUID uuid, List<String> propertyPaths){\r
         return uuid == null ? null : dao.load(uuid, propertyPaths);\r
     }\r
 \r
+    @Override\r
+    @Transactional(readOnly = true)\r
+    public List<T> load(List<UUID> uuids, List<String> propertyPaths){\r
+        if(uuids == null) {\r
+            return null;\r
+        }\r
+\r
+        List<T> entities = new ArrayList<T>();\r
+        for(UUID uuid : uuids) {\r
+            entities.add(uuid == null ? null : dao.load(uuid, propertyPaths));\r
+        }\r
+        return entities;\r
+    }\r
+\r
     @Override\r
     @Transactional(readOnly = false)\r
     public T merge(T newInstance) {\r
         return dao.merge(newInstance);\r
     }\r
 \r
+    @Override\r
+    @Transactional(readOnly = false)\r
+    public MergeResult<T> merge(T newInstance, boolean returnTransientEntity) {\r
+        return dao.merge(newInstance, returnTransientEntity);\r
+    }\r
+\r
+    @Override\r
+    @Transactional(readOnly = false)\r
+    public List<T> merge(List<T> detachedObjects) {\r
+        List<T> mergedObjects = new ArrayList<T>();\r
+        for(T obj : detachedObjects) {\r
+            mergedObjects.add(dao.merge(obj));\r
+        }\r
+        return mergedObjects;\r
+    }\r
+\r
+    @Override\r
+    @Transactional(readOnly = false)\r
+    public List<MergeResult<T>> merge(List<T> detachedObjects, boolean returnTransientEntity) {\r
+        List<MergeResult<T>> mergedObjects = new ArrayList<MergeResult<T>>();\r
+        for(T obj : detachedObjects) {\r
+            mergedObjects.add(dao.merge(obj, returnTransientEntity));\r
+        }\r
+        return mergedObjects;\r
+    }\r
+\r
     @Override\r
     @Transactional(readOnly = true)\r
     public  <S extends T> Pager<S> page(Class<S> type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths){\r
@@ -196,7 +265,7 @@ public abstract class ServiceBase<T extends CdmBase, DAO extends ICdmEntityDao<T
 \r
     @Override\r
     @Transactional(readOnly = false)\r
-    public UUID save(T newInstance) {\r
+    public T save(T newInstance) {\r
         return dao.save(newInstance);\r
     }\r
 \r