minor
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / persistence / dao / hibernate / name / TaxonNameDaoHibernateImpl.java
index 6096402d5d41f7146eee60cfd2afdf0f3ed4706f..58d50fe578b61208e7ef8429b749c9bdff1eb52b 100644 (file)
@@ -29,6 +29,7 @@ import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Repository;\r
 \r
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.cdm.model.common.RelationshipBase;\r
 import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;\r
 import eu.etaxonomy.cdm.model.name.BacterialName;\r
@@ -303,6 +304,7 @@ extends IdentifiableDaoBase<TaxonNameBase> implements ITaxonNameDao {
                AuditEvent auditEvent = getAuditEventFromContext();\r
                if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {\r
                        Criteria criteria = getSession().createCriteria(NameRelationship.class);\r
+//                     if (name != null)\r
                        criteria.add(Restrictions.eq(direction.toString(), name));\r
                        if(type != null) {\r
                                criteria.add(Restrictions.eq("type", type));\r
@@ -343,21 +345,35 @@ extends IdentifiableDaoBase<TaxonNameBase> implements ITaxonNameDao {
                        return results;\r
                }\r
        }\r
-\r
-       public List<TypeDesignationBase> getTypeDesignations(TaxonNameBase name, \r
-                       TypeDesignationStatusBase status, Integer pageSize, Integer pageNumber) {\r
-               return getTypeDesignations(name, status, pageSize, pageNumber, null);\r
+       \r
+       public List<TypeDesignationBase> getTypeDesignations(TaxonNameBase name, TypeDesignationStatusBase status, Integer pageSize, Integer pageNumber,        List<String> propertyPaths){\r
+               return getTypeDesignations(name, null, status, pageSize, pageNumber, propertyPaths);\r
        }\r
        \r
-       public List<TypeDesignationBase> getTypeDesignations(TaxonNameBase name,TypeDesignationStatusBase status, Integer pageSize, Integer pageNumber, List<String> propertyPaths){\r
+       public <T extends TypeDesignationBase> List<T> getTypeDesignations(TaxonNameBase name, \r
+                               Class<T> type,\r
+                               TypeDesignationStatusBase status, Integer pageSize, Integer pageNumber,\r
+                               List<String> propertyPaths){\r
                checkNotInPriorView("getTypeDesignations(TaxonNameBase name,TypeDesignationStatusBase status, Integer pageSize, Integer pageNumber,     List<String> propertyPaths)");\r
                Query query = null;\r
-               if(status == null) {\r
-                       query = getSession().createQuery("select designation from TypeDesignationBase designation join designation.typifiedNames name where name = :name");\r
-               } else {\r
-                       query = getSession().createQuery("select designation from TypeDesignationBase designation join designation.typifiedNames name where name = :name and designation.typeStatus = :status");\r
+               String queryString = "select designation from TypeDesignationBase designation join designation.typifiedNames name where name = :name";\r
+\r
+               if(status != null) {\r
+                       queryString +=  " and designation.typeStatus = :status";\r
+               }\r
+               if(type != null){\r
+                       queryString +=  " and designation.class = :type";\r
+               }\r
+\r
+               query = getSession().createQuery(queryString);\r
+               \r
+               if(status != null) {            \r
                        query.setParameter("status", status);\r
                }\r
+               if(type != null){\r
+                       query.setParameter("type", type.getSimpleName());\r
+               }\r
+               \r
                query.setParameter("name",name);\r
 \r
                if(pageSize != null) {\r
@@ -368,7 +384,7 @@ extends IdentifiableDaoBase<TaxonNameBase> implements ITaxonNameDao {
                                query.setFirstResult(0);\r
                        }\r
                }\r
-               return defaultBeanInitializer.initializeAll((List<TypeDesignationBase>)query.list(), propertyPaths);\r
+               return defaultBeanInitializer.initializeAll((List<T>)query.list(), propertyPaths);\r
        }\r
 \r
        \r
@@ -611,7 +627,13 @@ extends IdentifiableDaoBase<TaxonNameBase> implements ITaxonNameDao {
                List<? extends TaxonNameBase<?,?>> results = criteria.list();\r
                if (results.size() == 1) {\r
                        defaultBeanInitializer.initializeAll(results, null);\r
-                       return (ZoologicalName) results.iterator().next();\r
+                       TaxonNameBase<?, ?> taxonName = results.iterator().next();\r
+                       if (taxonName.isInstanceOf(ZoologicalName.class)) {\r
+                               ZoologicalName zoologicalName = CdmBase.deproxy(taxonName, ZoologicalName.class);\r
+                               return zoologicalName;\r
+                       } else {\r
+                               logger.warn("This UUID (" + uuid + ") does not belong to a ZoologicalName. It belongs to: " + taxonName.getUuid() + " (" + taxonName.getTitleCache() + ")");\r
+                       }\r
                } else if (results.size() > 1) {\r
                        logger.warn("Multiple results for UUID: " + uuid);\r
                } else if (results.size() == 0) {\r