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
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
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
\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
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
\r
\r
\r
+ @Override\r
public T replace(T x, T y) {\r
if(x.equals(y)) {\r
return y;\r
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
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
}\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
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
}\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
\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
\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
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
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
return bean;\r
}\r
\r
+ @Override\r
public Boolean exists(UUID uuid) {\r
if (findByUuid(uuid)==null){\r
return false;\r
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
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
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
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
}\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
}\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
\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
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
return result;\r
}\r
\r
+ @Override\r
public Class<T> getType() {\r
return type;\r
}\r
}\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
}\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
\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
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