moving all beaninitializer classes to new package 'eu.etaxonomy.cdm.persistence.dao...
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / persistence / dao / hibernate / common / CdmEntityDaoBase.java
index 3727c93731cc165a30dd517f4edc0b01d6a50f02..c802dcf8de96d941e5add64971ca691e76817c60 100644 (file)
@@ -50,12 +50,12 @@ import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Repository;\r
 import org.springframework.util.ReflectionUtils;\r
 \r
+import eu.etaxonomy.cdm.config.Configuration;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.cdm.model.common.User;\r
 import eu.etaxonomy.cdm.model.common.VersionableEntity;\r
-import eu.etaxonomy.cdm.persistence.dao.IBeanInitializer;\r
 import eu.etaxonomy.cdm.persistence.dao.common.ICdmEntityDao;\r
-import eu.etaxonomy.cdm.persistence.dao.hibernate.AlternativeSpellingSuggestionParser;\r
+import eu.etaxonomy.cdm.persistence.dao.initializer.IBeanInitializer;\r
 import eu.etaxonomy.cdm.persistence.hibernate.replace.ReferringObjectMetadata;\r
 import eu.etaxonomy.cdm.persistence.hibernate.replace.ReferringObjectMetadataFactory;\r
 import eu.etaxonomy.cdm.persistence.query.Grouping;\r
@@ -74,10 +74,8 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
     protected int flushAfterNo = 1000; //large numbers may cause synchronisation errors when commiting the session !!\r
 \r
     protected Class<T> type;\r
-    \r
-    //preliminary\r
-    protected Version version = AlternativeSpellingSuggestionParser.version;\r
-    \r
+\r
+    protected Version version = Configuration.luceneVersion;\r
 \r
     @Autowired\r
 //     @Qualifier("defaultBeanInitializer")\r
@@ -96,10 +94,12 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
         logger.debug("Creating DAO of type [" + type.getSimpleName() + "]");\r
     }\r
 \r
+    @Override\r
     public void lock(T t, LockMode lockMode) {\r
         getSession().lock(t, lockMode);\r
     }\r
 \r
+    @Override\r
     public void refresh(T t, LockMode lockMode, List<String> propertyPaths) {\r
         getSession().refresh(t, lockMode);\r
         defaultBeanInitializer.initialize(t, propertyPaths);\r
@@ -119,6 +119,7 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
 \r
     //TODO: Use everywhere CdmEntityDaoBase.saveAll() instead of ServiceBase.saveCdmObjectAll()?\r
     //TODO: why does this use saveCdmObject_ which actually savesOrUpdateds data ?\r
+    @Override\r
     public Map<UUID, T> saveAll(Collection<T> cdmObjCollection){\r
         int types = cdmObjCollection.getClass().getTypeParameters().length;\r
         if (types > 0){\r
@@ -156,6 +157,7 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
         return cdmObj.getUuid();\r
     }\r
 \r
+    @Override\r
     public Map<UUID, T> saveOrUpdateAll(Collection<T> cdmObjCollection){\r
         int types = cdmObjCollection.getClass().getTypeParameters().length;\r
         if (types > 0){\r
@@ -191,6 +193,7 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
 \r
 \r
 \r
+    @Override\r
     public T replace(T x, T y) {\r
         if(x.equals(y)) {\r
             return y;\r
@@ -229,16 +232,19 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
         return y;\r
     }\r
 \r
+    @Override\r
     public Session getSession() throws DataAccessException {\r
         return super.getSession();\r
     }\r
 \r
+    @Override\r
     public void clear() throws DataAccessException {\r
         Session session = getSession();\r
         session.clear();\r
         if (logger.isDebugEnabled()){logger.debug("dao clear end");}\r
     }\r
 \r
+    @Override\r
     public T merge(T transientObject) throws DataAccessException {\r
         Session session = getSession();\r
         T persistentObject = (T)session.merge(transientObject);\r
@@ -246,6 +252,7 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
         return persistentObject;\r
     }\r
 \r
+    @Override\r
     public UUID saveOrUpdate(T transientObject) throws DataAccessException  {\r
         try {\r
             if (logger.isDebugEnabled()){logger.debug("dao saveOrUpdate start...");}\r
@@ -278,21 +285,25 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
         }\r
     }\r
 \r
+    @Override\r
     public UUID save(T newInstance) throws DataAccessException {\r
         getSession().save(newInstance);\r
         return newInstance.getUuid();\r
     }\r
 \r
+    @Override\r
     public UUID update(T transientObject) throws DataAccessException {\r
         getSession().update(transientObject);\r
         return transientObject.getUuid();\r
     }\r
 \r
+    @Override\r
     public UUID refresh(T persistentObject) throws DataAccessException {\r
         getSession().refresh(persistentObject);\r
         return persistentObject.getUuid();\r
     }\r
 \r
+    @Override\r
     public UUID delete(T persistentObject) throws DataAccessException {\r
         if (persistentObject == null){\r
             logger.warn(type.getName() + " was 'null'");\r
@@ -309,11 +320,13 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
         return persistentObject.getUuid();\r
     }\r
 \r
+    @Override\r
     public T findById(int id) throws DataAccessException {\r
         return (T) getSession().get(type, id);\r
     }\r
 \r
 \r
+    @Override\r
     public T findByUuid(UUID uuid) throws DataAccessException{\r
         Session session = getSession();\r
         Criteria crit = session.createCriteria(type);\r
@@ -330,6 +343,7 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
         }\r
     }\r
 \r
+    @Override\r
     public List<T> listByIds(Collection<Integer> ids,  Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) throws DataAccessException {\r
 \r
         if (ids.isEmpty()) {\r
@@ -340,17 +354,18 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
 \r
         logger.debug(criteria.toString());\r
 \r
-         List<T> result = (List<T>)criteria.list();\r
+         List<T> result = criteria.list();\r
          defaultBeanInitializer.initializeAll(result, propertyPaths);\r
          return result;\r
      }\r
 \r
 \r
+    @Override\r
     public List<T> list(Collection<UUID> uuids, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) throws DataAccessException {\r
 \r
        Criteria criteria = prepareList(uuids, pageSize, pageNumber, orderHints, "uuid");\r
 \r
-        List<T> result = (List<T>)criteria.list();\r
+        List<T> result = criteria.list();\r
         defaultBeanInitializer.initializeAll(result, propertyPaths);\r
         return result;\r
     }\r
@@ -420,11 +435,12 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
 \r
         addOrder(criteria, orderHints);\r
 \r
-        List<T> result = (List<T>)criteria.list();\r
+        List<T> result = criteria.list();\r
         defaultBeanInitializer.initializeAll(result, propertyPaths);\r
         return result;\r
     }\r
 \r
+    @Override\r
     public T load(UUID uuid) {\r
         T bean = findByUuid(uuid);\r
         if(bean == null){\r
@@ -435,6 +451,7 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
         return bean;\r
     }\r
 \r
+    @Override\r
     public T load(int id, List<String> propertyPaths){\r
         T bean = findById(id);\r
         if(bean == null){\r
@@ -445,6 +462,7 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
         return bean;\r
     }\r
 \r
+    @Override\r
     public T load(UUID uuid, List<String> propertyPaths){\r
         T bean = findByUuid(uuid);\r
         if(bean == null){\r
@@ -455,6 +473,7 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
         return bean;\r
     }\r
 \r
+    @Override\r
     public Boolean exists(UUID uuid) {\r
         if (findByUuid(uuid)==null){\r
             return false;\r
@@ -462,10 +481,12 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
         return true;\r
     }\r
 \r
+    @Override\r
     public int count() {\r
         return count(type);\r
     }\r
 \r
+    @Override\r
     public int count(Class<? extends T> clazz) {\r
         Session session = getSession();\r
         Criteria criteria = null;\r
@@ -475,16 +496,18 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
             criteria = session.createCriteria(clazz);\r
         }\r
         criteria.setProjection(Projections.projectionList().add(Projections.rowCount()));\r
-        \r
+\r
         //since hibernate 4 (or so) uniqueResult returns Long, not Integer, therefore needs\r
         //to be casted. Think about returning long rather then int!\r
         return ((Number) criteria.uniqueResult()).intValue();\r
     }\r
 \r
+    @Override\r
     public List<T> list(Integer limit, Integer start) {\r
         return list(limit, start, null);\r
     }\r
 \r
+    @Override\r
     public List<Object[]> group(Class<? extends T> clazz,Integer limit, Integer start, List<Grouping> groups, List<String> propertyPaths) {\r
 \r
         Criteria criteria = null;\r
@@ -501,7 +524,7 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
             criteria.setMaxResults(limit);\r
         }\r
 \r
-        List<Object[]> result = (List<Object[]>)criteria.list();\r
+        List<Object[]> result = criteria.list();\r
 \r
         if(propertyPaths != null && !propertyPaths.isEmpty()) {\r
           for(Object[] objects : result) {\r
@@ -581,7 +604,7 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
     protected void addOrder(FullTextQuery fullTextQuery, List<OrderHint> orderHints) {\r
         //FIXME preliminary hardcoded type:\r
        int type = SortField.STRING;\r
-       \r
+\r
        if(orderHints != null && !orderHints.isEmpty()) {\r
             org.apache.lucene.search.Sort sort = new Sort();\r
             SortField[] sortFields = new SortField[orderHints.size()];\r
@@ -603,10 +626,12 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
         }\r
     }\r
 \r
+    @Override\r
     public List<T> list(Integer limit, Integer start, List<OrderHint> orderHints) {\r
         return list(limit,start,orderHints,null);\r
     }\r
 \r
+    @Override\r
     public List<T> list(Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {\r
         Criteria criteria = getSession().createCriteria(type);\r
         if(limit != null) {\r
@@ -615,12 +640,13 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
         }\r
 \r
         addOrder(criteria,orderHints);\r
-        List<T> results = (List<T>)criteria.list();\r
+        List<T> results = criteria.list();\r
 \r
         defaultBeanInitializer.initializeAll(results, propertyPaths);\r
         return results;\r
     }\r
 \r
+    @Override\r
     public List<T> list(Class<? extends T> clazz, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {\r
         Criteria criteria = null;\r
         if(clazz == null) {\r
@@ -640,7 +666,7 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
 \r
         addOrder(criteria,orderHints);\r
 \r
-        List<T> results = (List<T>)criteria.list();\r
+        List<T> results = criteria.list();\r
         defaultBeanInitializer.initializeAll(results, propertyPaths);\r
         return results;\r
     }\r
@@ -649,10 +675,12 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
         return list(type,limit,start,orderHints,null);\r
     }\r
 \r
+    @Override\r
     public List<T> list(Class<? extends T> type, Integer limit, Integer start) {\r
         return list(type,limit,start,null,null);\r
     }\r
 \r
+    @Override\r
     public List<T> rows(String tableName, int limit, int start) {\r
         Query query = getSession().createQuery("from " + tableName + " order by uuid");\r
         query.setFirstResult(start);\r
@@ -661,6 +689,7 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
         return result;\r
     }\r
 \r
+    @Override\r
     public Class<T> getType() {\r
         return type;\r
     }\r
@@ -687,6 +716,7 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
         }\r
     }\r
 \r
+    @Override\r
     public int count(T example, Set<String> includeProperties) {\r
         Criteria criteria = getSession().createCriteria(example.getClass());\r
         addExample(criteria,example,includeProperties);\r
@@ -761,6 +791,7 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
     }\r
 \r
 \r
+    @Override\r
     public List<T> list(T example, Set<String> includeProperties, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {\r
         Criteria criteria = getSession().createCriteria(example.getClass());\r
         addExample(criteria,example,includeProperties);\r
@@ -776,14 +807,14 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
 \r
         addOrder(criteria,orderHints);\r
 \r
-        List<T> results = (List<T>)criteria.list();\r
+        List<T> results = criteria.list();\r
         defaultBeanInitializer.initializeAll(results, propertyPaths);\r
         return results;\r
     }\r
 \r
     private class PropertySelectorImpl implements PropertySelector {\r
 \r
-        private Set<String> includeProperties;\r
+        private final Set<String> includeProperties;\r
         /**\r
          *\r
          */\r
@@ -793,6 +824,7 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
             this.includeProperties = includeProperties;\r
         }\r
 \r
+        @Override\r
         public boolean include(Object propertyValue, String propertyName,      Type type) {\r
             if(includeProperties.contains(propertyName)) {\r
                 return true;\r