remove deprecated method
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / CommonServiceImpl.java
index 8fdb153e038c5406ddae44d8dcfcc1581226afae..c407b9fd3cfe4acaeb466caf0ad5ed61e2d41570 100644 (file)
@@ -1,3 +1,4 @@
+// $Id$\r
 /**\r
 * Copyright (C) 2007 EDIT\r
 * European Distributed Institute of Taxonomy \r
 /**\r
 * Copyright (C) 2007 EDIT\r
 * European Distributed Institute of Taxonomy \r
 \r
 package eu.etaxonomy.cdm.api.service;\r
 \r
 \r
 package eu.etaxonomy.cdm.api.service;\r
 \r
+import java.util.Collection;\r
+import java.util.HashMap;\r
+import java.util.Iterator;\r
 import java.util.List;\r
 import java.util.List;\r
+import java.util.Map;\r
+import java.util.Set;\r
 \r
 import org.apache.log4j.Logger;\r
 \r
 import org.apache.log4j.Logger;\r
+import org.hibernate.collection.spi.PersistentCollection;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
-import org.springframework.beans.factory.annotation.Qualifier;\r
 import org.springframework.stereotype.Service;\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.CdmBase;\r
 import eu.etaxonomy.cdm.model.common.ISourceable;\r
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
 import org.springframework.transaction.annotation.Transactional;\r
 \r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.cdm.model.common.ISourceable;\r
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
-import eu.etaxonomy.cdm.model.common.OriginalSource;\r
-import eu.etaxonomy.cdm.persistence.dao.common.ICdmEntityDao;\r
+import eu.etaxonomy.cdm.model.common.OriginalSourceBase;\r
+import eu.etaxonomy.cdm.model.metadata.CdmMetaData;\r
+import eu.etaxonomy.cdm.model.metadata.CdmMetaData.MetaDataPropertyName;\r
+import eu.etaxonomy.cdm.persistence.dao.common.ICdmGenericDao;\r
 import eu.etaxonomy.cdm.persistence.dao.common.IOriginalSourceDao;\r
 import eu.etaxonomy.cdm.persistence.dao.common.IOriginalSourceDao;\r
+import eu.etaxonomy.cdm.strategy.match.DefaultMatchStrategy;\r
+import eu.etaxonomy.cdm.strategy.match.IMatchStrategy;\r
+import eu.etaxonomy.cdm.strategy.match.IMatchable;\r
+import eu.etaxonomy.cdm.strategy.match.MatchException;\r
+import eu.etaxonomy.cdm.strategy.merge.DefaultMergeStrategy;\r
+import eu.etaxonomy.cdm.strategy.merge.IMergable;\r
+import eu.etaxonomy.cdm.strategy.merge.IMergeStrategy;\r
+import eu.etaxonomy.cdm.strategy.merge.MergeException;\r
 \r
 \r
 @Service\r
 @Transactional(readOnly = true)\r
 \r
 \r
 @Service\r
 @Transactional(readOnly = true)\r
-public class CommonServiceImpl extends ServiceBase<OriginalSource,IOriginalSourceDao> implements ICommonService {\r
+public class CommonServiceImpl extends ServiceBase<OriginalSourceBase,IOriginalSourceDao> implements ICommonService {\r
        @SuppressWarnings("unused")\r
        private static final Logger logger = Logger.getLogger(CommonServiceImpl.class);\r
        \r
        @Autowired\r
        IOriginalSourceDao originalSourceDao;\r
        \r
        @SuppressWarnings("unused")\r
        private static final Logger logger = Logger.getLogger(CommonServiceImpl.class);\r
        \r
        @Autowired\r
        IOriginalSourceDao originalSourceDao;\r
        \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.ICommonService#getSourcedObjectById(java.lang.String, java.lang.String)\r
-        */\r
+       @Autowired\r
+       ICdmGenericDao genericDao;\r
+\r
+\r
+       @Autowired\r
+       protected void setDao(IOriginalSourceDao dao) {\r
+               this.dao = dao;\r
+       }\r
+       \r
+       @Override\r
+       public CdmBase find(Class<? extends CdmBase> clazz, int id){\r
+               return genericDao.find(clazz, id);\r
+       }\r
+       \r
+\r
+       @Override\r
+       public Map<String, ? extends ISourceable> getSourcedObjectsByIdInSource(Class clazz, Set<String> idInSourceSet, String idNamespace) {\r
+               Map<String, ? extends ISourceable> list = originalSourceDao.findOriginalSourcesByIdInSource(clazz, idInSourceSet, idNamespace);\r
+               return list;\r
+       }\r
+       \r
+       @Override\r
        public ISourceable getSourcedObjectByIdInSource(Class clazz, String idInSource, String idNamespace) {\r
                ISourceable result = null;\r
        public ISourceable getSourcedObjectByIdInSource(Class clazz, String idInSource, String idNamespace) {\r
                ISourceable result = null;\r
-//             List<OriginalSource> originalSource = originalSourceDao.findOriginalSourceByIdInSource(idInSource, idNamespace);\r
-//             if (! originalSource.isEmpty()){\r
-//                     result = originalSource.get(0).getSourcedObj();\r
-//             }\r
                List<IdentifiableEntity> list = originalSourceDao.findOriginalSourceByIdInSource(clazz, idInSource, idNamespace);\r
                if (! list.isEmpty()){\r
                        result = list.get(0);\r
                }return result;\r
        }\r
                List<IdentifiableEntity> list = originalSourceDao.findOriginalSourceByIdInSource(clazz, idInSource, idNamespace);\r
                if (! list.isEmpty()){\r
                        result = list.get(0);\r
                }return result;\r
        }\r
+       \r
+       \r
+       @Override\r
+       public Set<CdmBase> getReferencingObjects(CdmBase referencedCdmBase){\r
+               return this.genericDao.getReferencingObjects(referencedCdmBase);\r
+       }       \r
+//             try {\r
+//                     Set<Class<? extends CdmBase>> allCdmClasses = genericDao.getAllCdmClasses(false); //findAllCdmClasses();\r
+//                     \r
+//                     referencedCdmBase = (CdmBase)HibernateProxyHelper.deproxy(referencedCdmBase);\r
+//                     Class referencedClass = referencedCdmBase.getClass();\r
+//                     Set<CdmBase> result = new HashSet<CdmBase>();\r
+//                     logger.debug("Referenced Class: " + referencedClass.getName());\r
+//                     \r
+//                     for (Class<? extends CdmBase> cdmClass : allCdmClasses){\r
+//                             Set<Field> fields = getFields(cdmClass);\r
+//                             for (Field field: fields){\r
+//                                     Class<?> type = field.getType();\r
+//                                     //class\r
+//                                     if (! type.isInterface()){\r
+//                                             if (referencedClass.isAssignableFrom(type)|| \r
+//                                                             type.isAssignableFrom(referencedClass) && CdmBase.class.isAssignableFrom(type)){\r
+//                                                     handleSingleClass(referencedClass, type, field, cdmClass, result, referencedCdmBase, false);\r
+//                                             }\r
+//                                     //interface\r
+//                                     }else if (type.isAssignableFrom(referencedClass)){\r
+//                                                     handleSingleClass(referencedClass, type, field, cdmClass, result, referencedCdmBase, false);\r
+//                                     }else if (Collection.class.isAssignableFrom(type)){\r
+//                                             \r
+//                                             if (checkIsSetOfType(field, referencedClass, type) == true){\r
+//                                                     handleSingleClass(referencedClass, type, field, cdmClass, result, referencedCdmBase, true);     \r
+//                                             }\r
+//                                     }\r
+////                           Class[] interfaces = referencedClass.getInterfaces();\r
+////                           for (Class interfaze: interfaces){\r
+////                                   if (interfaze == type){\r
+//////                                 if(interfaze.isAssignableFrom(returnType)){\r
+////                                           handleSingleClass(interfaze, type, field, cdmClass, result, referencedCdmBase);\r
+////                                   }\r
+////                           }\r
+//                             }       \r
+//                     }\r
+//                     return result;\r
+//             } catch (Exception e) {\r
+//                     e.printStackTrace();\r
+//                     throw new RuntimeException(e);\r
+//             }\r
+//             \r
+//     }\r
+//     \r
+//     private boolean checkIsSetOfType(Field field, Class referencedClass, Class<?> type){\r
+//             Type genericType = (ParameterizedTypeImpl)field.getGenericType();\r
+//             if (genericType instanceof ParameterizedTypeImpl){\r
+//                     ParameterizedTypeImpl paraType = (ParameterizedTypeImpl)genericType;\r
+//                     paraType.getRawType();\r
+//                     Type[] arguments = paraType.getActualTypeArguments();\r
+//                     //logger.debug(arguments.length);\r
+//                     if (arguments.length == 1){\r
+//                             Class collectionClass;\r
+//                             try {\r
+//                                     if (arguments[0] instanceof Class){\r
+//                                             collectionClass = (Class)arguments[0];\r
+//                                     }else if(arguments[0] instanceof TypeVariableImpl){\r
+//                                             TypeVariableImpl typeVariable = (TypeVariableImpl)arguments[0];\r
+//                                             GenericDeclaration genericDeclaration = typeVariable.getGenericDeclaration();\r
+//                                             collectionClass = (Class)genericDeclaration;\r
+//                                     }else{\r
+//                                             logger.warn("Unknown Type");\r
+//                                             return false;\r
+//                                     }\r
+//                                     if (CdmBase.class.isAssignableFrom(collectionClass) && collectionClass.isAssignableFrom(referencedClass)  ){\r
+//                                             return true;\r
+//                                     }\r
+//                             } catch (Exception e) {\r
+//                                     logger.warn(e.getMessage());\r
+//                             }\r
+//                     }else{\r
+//                             logger.warn("Length of arguments <> 1");\r
+//                     }\r
+//             }else{\r
+//                     logger.warn("Not a generic type of type ParameterizedTypeImpl");\r
+//             }\r
+//             return false;\r
+//     }\r
+//     \r
+//     \r
+//     \r
+//     \r
+//     private boolean handleSingleClass(Class itemClass, Class type, Field field, Class cdmClass, Set<CdmBase> result,CdmBase value, boolean isCollection){\r
+//             if (! Modifier.isStatic(field.getModifiers())){\r
+//                     String methodName = StringUtils.rightPad(field.getName(), 30);\r
+//                     String className = StringUtils.rightPad(cdmClass.getSimpleName(), 30);\r
+//                     String returnTypeName = StringUtils.rightPad(type.getSimpleName(), 30);\r
+//                     \r
+//                     logger.debug(methodName +   "\t\t" + className + "\t\t" + returnTypeName);\r
+////                   result_old.add(method);\r
+//                     result.addAll(getCdmBasesByFieldAndClass(field, itemClass, cdmClass, value, isCollection));\r
+//             }\r
+//             return true;\r
+//     }\r
+//     \r
+//     private Set<Field> getFields(Class clazz){\r
+//             Set<Field> result = new HashSet<Field>();\r
+//             for (Field field: clazz.getDeclaredFields()){\r
+//                     if (!Modifier.isStatic(field.getModifiers())){\r
+//                             result.add(field);      \r
+//                     }\r
+//             }\r
+//             Class superclass = clazz.getSuperclass();\r
+//             if (CdmBase.class.isAssignableFrom(superclass)){\r
+//                     result.addAll(getFields(superclass));\r
+//             }\r
+//             return result;\r
+//     }\r
+//     \r
+//     private Set<CdmBase> getCdmBasesByFieldAndClass(Field field, Class itemClass, Class otherClazz, CdmBase item, boolean isCollection){\r
+//             Set<CdmBase> result = new HashSet<CdmBase>();\r
+//             if (isCollection){\r
+//                     result.addAll(genericDao.getCdmBasesWithItemInCollection(itemClass, otherClazz, field.getName(), item));\r
+//             }else{\r
+//                     result.addAll(genericDao.getCdmBasesByFieldAndClass(otherClazz, field.getName(), item));\r
+//             }\r
+//             return result;\r
+//     }\r
+       \r
+       @Override\r
+       public List getHqlResult(String hqlQuery){\r
+               return genericDao.getHqlResult(hqlQuery);\r
+       }\r
 \r
 \r
-       @Autowired\r
-       protected void setDao(IOriginalSourceDao dao) {\r
-               this.dao = dao;\r
+       @Override\r
+       public <T extends IMergable> void merge(T mergeFirst, T mergeSecond, IMergeStrategy mergeStrategy) throws MergeException {\r
+               if (mergeStrategy == null){\r
+                       mergeStrategy = DefaultMergeStrategy.NewInstance(((CdmBase)mergeFirst).getClass());\r
+               }\r
+               genericDao.merge((CdmBase)mergeFirst, (CdmBase)mergeSecond, mergeStrategy);\r
+       }\r
+\r
+\r
+       @Override\r
+       public <T extends IMatchable> List<T> findMatching(T objectToMatch, IMatchStrategy matchStrategy) throws MatchException {\r
+               if (matchStrategy == null){\r
+                       matchStrategy = DefaultMatchStrategy.NewInstance(((objectToMatch).getClass()));\r
+               }\r
+               return genericDao.findMatching(objectToMatch, matchStrategy);\r
        }\r
        \r
        }\r
        \r
+       \r
+       \r
+//     /* (non-Javadoc)\r
+//      * @see eu.etaxonomy.cdm.api.service.IService#list(java.lang.Class, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)\r
+//      */\r
+//     @Override\r
+//     public <TYPE extends OriginalSourceBase> Pager<TYPE> list(Class<TYPE> type,\r
+//                     Integer pageSize, Integer pageNumber, List<OrderHint> orderHints,\r
+//                     List<String> propertyPaths) {\r
+//             logger.warn("Not yet implemented");\r
+//             return null;\r
+//     }\r
+\r
+       @Transactional(readOnly = false)\r
+       @Override\r
+       public void saveAllMetaData(Collection<CdmMetaData> metaData) {\r
+               Iterator<CdmMetaData> iterator = metaData.iterator();\r
+               while(iterator.hasNext()){\r
+                       CdmMetaData cdmMetaData = iterator.next();\r
+                       genericDao.saveMetaData(cdmMetaData);\r
+               }\r
+       }\r
+\r
+       @Override\r
+       public Map<MetaDataPropertyName, CdmMetaData> getCdmMetaData() {\r
+               Map<MetaDataPropertyName, CdmMetaData> result = new HashMap<MetaDataPropertyName, CdmMetaData>();\r
+               List<CdmMetaData> metaDataList = genericDao.getMetaData();\r
+               for (CdmMetaData metaData : metaDataList){\r
+                       MetaDataPropertyName propertyName = metaData.getPropertyName();\r
+                       result.put(propertyName, metaData);\r
+               }\r
+               return result;\r
+       }\r
+\r
+    @Override\r
+    public PersistentCollection initializeCollection(PersistentCollection col) {\r
+            return genericDao.initializeCollection(col);\r
+\r
+    }\r
+    \r
+    @Override\r
+    public boolean isEmpty(PersistentCollection col) {\r
+            return genericDao.isEmpty(col);\r
+\r
+    }\r
+    \r
+    @Override\r
+       public int size(PersistentCollection col) {\r
+       return genericDao.size(col);\r
+    }\r
+    \r
+    @Override\r
+    public Object get(PersistentCollection col, int index) {\r
+       return genericDao.get(col, index);\r
+    }\r
+    \r
+    @Override\r
+    public boolean contains(PersistentCollection col, Object element) {\r
+       return genericDao.contains(col, element);\r
+    }\r
+    \r
+    @Override    \r
+    public boolean containsKey(PersistentCollection col, Object key) {\r
+       return genericDao.containsKey(col, key);\r
+    }\r
+    \r
+    @Override\r
+    public boolean containsValue(PersistentCollection col, Object element) {\r
+       return genericDao.containsValue(col, element);\r
+    }\r
+\r
 }\r
 }\r