cleanup
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / persistence / dao / hibernate / occurrence / OccurrenceDaoHibernateImpl.java
index a84e089424c1aa9c1d0493ddab15bfc693b7572b..6c33f68e1f6e260f3e905cd7c204ec968d52995e 100644 (file)
@@ -57,6 +57,7 @@ import eu.etaxonomy.cdm.persistence.dao.name.IHomotypicalGroupDao;
 import eu.etaxonomy.cdm.persistence.dao.name.ITaxonNameDao;\r
 import eu.etaxonomy.cdm.persistence.dao.occurrence.IOccurrenceDao;\r
 import eu.etaxonomy.cdm.persistence.dto.SpecimenNodeWrapper;\r
+import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;\r
 import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;\r
 import eu.etaxonomy.cdm.persistence.query.MatchMode;\r
 import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
@@ -70,7 +71,6 @@ public class OccurrenceDaoHibernateImpl
           extends IdentifiableDaoBase<SpecimenOrObservationBase>\r
           implements IOccurrenceDao {\r
 \r
-    @SuppressWarnings("unused")\r
     private static final Logger logger = Logger.getLogger(TaxonDaoHibernateImpl.class);\r
 \r
     @Autowired\r
@@ -133,7 +133,7 @@ public class OccurrenceDaoHibernateImpl
     @Override\r
     public long countMedia(SpecimenOrObservationBase occurence) {\r
         checkNotInPriorView("OccurrenceDaoHibernateImpl.countMedia(SpecimenOrObservationBase occurence)");\r
-        Query query = getSession().createQuery("select count(media) from SpecimenOrObservationBase occurence join occurence.media media where occurence = :occurence");\r
+        Query query = getSession().createQuery("SELECT count(media) FROM SpecimenOrObservationBase occurence JOIN occurence.media media WHERE occurence = :occurence");\r
         query.setParameter("occurence", occurence);\r
 \r
         return (Long)query.uniqueResult();\r
@@ -142,7 +142,7 @@ public class OccurrenceDaoHibernateImpl
     @Override\r
     public List<DerivationEvent> getDerivationEvents(SpecimenOrObservationBase occurence, Integer pageSize,Integer pageNumber, List<String> propertyPaths) {\r
         checkNotInPriorView("OccurrenceDaoHibernateImpl.getDerivationEvents(SpecimenOrObservationBase occurence, Integer pageSize,Integer pageNumber)");\r
-        Query query = getSession().createQuery("select distinct derivationEvent from DerivationEvent derivationEvent join derivationEvent.originals occurence where occurence = :occurence");\r
+        Query query = getSession().createQuery("SELECT DISTINCT derivationEvent FROM DerivationEvent derivationEvent JOIN derivationEvent.originals occurence WHERE occurence = :occurence");\r
         query.setParameter("occurence", occurence);\r
 \r
         addPageSizeAndNumber(query, pageSize, pageNumber);\r
@@ -154,7 +154,8 @@ public class OccurrenceDaoHibernateImpl
     }\r
 \r
     @Override\r
-    public List<DeterminationEvent> getDeterminations(SpecimenOrObservationBase occurrence, TaxonBase taxonBase, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {\r
+    public List<DeterminationEvent> getDeterminations(SpecimenOrObservationBase occurrence,\r
+            TaxonBase taxonBase, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {\r
         AuditEvent auditEvent = getAuditEventFromContext();\r
         if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {\r
             Criteria criteria = getSession().createCriteria(DeterminationEvent.class);\r
@@ -191,7 +192,8 @@ public class OccurrenceDaoHibernateImpl
     }\r
 \r
     @Override\r
-    public List<Media> getMedia(SpecimenOrObservationBase occurence, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {\r
+    public List<Media> getMedia(SpecimenOrObservationBase occurence,\r
+            Integer pageSize, Integer pageNumber, List<String> propertyPaths) {\r
         checkNotInPriorView("OccurrenceDaoHibernateImpl.getMedia(SpecimenOrObservationBase occurence, Integer pageSize, Integer pageNumber, List<String> propertyPaths)");\r
         Query query = getSession().createQuery(\r
                 "   SELECT media "\r
@@ -339,7 +341,8 @@ public class OccurrenceDaoHibernateImpl
     }\r
 \r
     private <T extends SpecimenOrObservationBase> Criteria createFindOccurrenceCriteria(Class<T> clazz, String queryString,\r
-            String significantIdentifier, SpecimenOrObservationType recordBasis, Taxon associatedTaxon, TaxonName associatedTaxonName, MatchMode matchmode, Integer limit,\r
+            String significantIdentifier, SpecimenOrObservationType recordBasis, Taxon associatedTaxon,\r
+            TaxonName associatedTaxonName, MatchMode matchmode, Integer limit,\r
             Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {\r
         Criteria criteria = null;\r
 \r
@@ -372,7 +375,7 @@ public class OccurrenceDaoHibernateImpl
         }\r
 \r
         //recordBasis/SpecimenOrObservationType\r
-        Set<SpecimenOrObservationType> typeAndSubtypes = new HashSet<SpecimenOrObservationType>();\r
+        Set<SpecimenOrObservationType> typeAndSubtypes = new HashSet<>();\r
         if(recordBasis==null){\r
             //add all types\r
             SpecimenOrObservationType[] values = SpecimenOrObservationType.values();\r
@@ -386,7 +389,7 @@ public class OccurrenceDaoHibernateImpl
         }\r
         criteria.add(Restrictions.in("recordBasis", typeAndSubtypes));\r
 \r
-        Set<UUID> associationUuids = new HashSet<UUID>();\r
+        Set<UUID> associationUuids = new HashSet<>();\r
         //taxon associations\r
         if(associatedTaxon!=null){\r
             List<UuidAndTitleCache<SpecimenOrObservationBase>> associatedTaxaList = listUuidAndTitleCacheByAssociatedTaxon(clazz, associatedTaxon, limit, start, orderHints);\r
@@ -535,8 +538,7 @@ public class OccurrenceDaoHibernateImpl
         return results;\r
     }\r
 \r
-    private List<SpecimenNodeWrapper> querySpecimen(\r
-            Query query, List<UUID> taxonNodeUuids,\r
+    private List<SpecimenNodeWrapper> querySpecimen(Query query, List<UUID> taxonNodeUuids,\r
             Integer limit, Integer start){\r
         query.setParameterList("taxonNodeUuids", taxonNodeUuids);\r
 \r
@@ -546,12 +548,17 @@ public class OccurrenceDaoHibernateImpl
         @SuppressWarnings("unchecked")\r
         List<Object[]> result = query.list();\r
         for(Object[] object : result){\r
-            list.add(new SpecimenNodeWrapper(\r
+            SpecimenNodeWrapper wrapper = new SpecimenNodeWrapper(\r
                     new UuidAndTitleCache<>(\r
                             (UUID) object[0],\r
                             (Integer) object[1],\r
                             (String) object[2]),\r
-                    (TaxonNode)object[3]));\r
+                    (SpecimenOrObservationType)object[3],\r
+                    new TaxonNodeDto((TaxonNode)object[4]));\r
+            if(object.length>5) {\r
+                wrapper.setTaxonDescriptionUuid((UUID)object[5]);\r
+            }\r
+            list.add(wrapper);\r
         }\r
         return list;\r
     }\r
@@ -562,7 +569,9 @@ public class OccurrenceDaoHibernateImpl
                 + "de.associatedSpecimenOrObservation.uuid, "\r
                 + "de.associatedSpecimenOrObservation.id, "\r
                 + "de.associatedSpecimenOrObservation.titleCache, "\r
-                + "tn "\r
+                + "de.associatedSpecimenOrObservation.recordBasis, "\r
+                + "tn, "\r
+                + "d.uuid "\r
                 + "FROM DescriptionElementBase AS de "\r
                 + "LEFT JOIN de.inDescription AS d "\r
                 + "LEFT JOIN d.taxon AS t "\r
@@ -580,6 +589,7 @@ public class OccurrenceDaoHibernateImpl
                 + "td.typeSpecimen.uuid, "\r
                 + "td.typeSpecimen.id, "\r
                 + "td.typeSpecimen.titleCache, "\r
+                + "td.typeSpecimen.recordBasis, "\r
                 + "tn "\r
                 + "FROM SpecimenTypeDesignation AS td "\r
                 + "LEFT JOIN td.typifiedNames AS tn "\r
@@ -597,6 +607,7 @@ public class OccurrenceDaoHibernateImpl
                 + "det.identifiedUnit.uuid, "\r
                 + "det.identifiedUnit.id, "\r
                 + "det.identifiedUnit.titleCache, "\r
+                + "det.identifiedUnit.recordBasis, "\r
                 + "tn "\r
                 + "FROM DeterminationEvent AS det "\r
                 + "LEFT JOIN det.taxon AS t "\r
@@ -613,6 +624,7 @@ public class OccurrenceDaoHibernateImpl
                 + "det.identifiedUnit.uuid, "\r
                 + "det.identifiedUnit.id, "\r
                 + "det.identifiedUnit.titleCache, "\r
+                + "det.identifiedUnit.recordBasis, "\r
                 + "tn "\r
                 + "FROM DeterminationEvent AS det "\r
                 + "LEFT JOIN det.taxonName AS n "\r
@@ -628,19 +640,22 @@ public class OccurrenceDaoHibernateImpl
     public Collection<SpecimenNodeWrapper> listUuidAndTitleCacheByAssociatedTaxon(List<UUID> taxonNodeUuids,\r
             Integer limit, Integer start){\r
 \r
-        Collection<SpecimenNodeWrapper> wrappers = new HashSet<>();\r
-        wrappers.addAll(queryIndividualAssociatedSpecimen(taxonNodeUuids, limit, start));\r
-        wrappers.addAll(queryTaxonDeterminations(taxonNodeUuids, limit, start));\r
-        wrappers.addAll(queryTaxonNameDeterminations(taxonNodeUuids, limit, start));\r
-        wrappers.addAll(queryTypeSpecimen(taxonNodeUuids, limit, start));\r
+        Set<SpecimenNodeWrapper> testSet = new HashSet();\r
+\r
+        testSet.addAll(queryIndividualAssociatedSpecimen(taxonNodeUuids, limit, start));\r
+        testSet.addAll(queryTaxonDeterminations(taxonNodeUuids, limit, start));\r
+        testSet.addAll(queryTaxonNameDeterminations(taxonNodeUuids, limit, start));\r
+        testSet.addAll(queryTypeSpecimen(taxonNodeUuids, limit, start));\r
 \r
+        Collection<SpecimenNodeWrapper> wrappers = new HashSet<>();\r
+        wrappers.addAll(testSet);\r
         return wrappers;\r
     }\r
 \r
     @Override\r
     public <T extends SpecimenOrObservationBase> List<UuidAndTitleCache<SpecimenOrObservationBase>> listUuidAndTitleCacheByAssociatedTaxon(Class<T> clazz, Taxon associatedTaxon,\r
             Integer limit, Integer start, List<OrderHint> orderHints){\r
-        Query query = createSpecimenQuery("sob.uuid, sob.id, sob.titleCache", clazz, associatedTaxon, limit, start, orderHints, null);\r
+        Query query = createSpecimenQuery("sob.uuid, sob.id, sob.titleCache", clazz, associatedTaxon, limit, start, orderHints);\r
         if(query==null){\r
             return Collections.emptyList();\r
         }\r
@@ -656,7 +671,7 @@ public class OccurrenceDaoHibernateImpl
     @Override\r
     public <T extends SpecimenOrObservationBase> List<T> listByAssociatedTaxon(Class<T> clazz,\r
             Taxon associatedTaxon, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-        Query query = createSpecimenQuery("sob", clazz, associatedTaxon, limit, start, orderHints, propertyPaths);\r
+        Query query = createSpecimenQuery("sob", clazz, associatedTaxon, limit, start, orderHints);\r
         if(query==null){\r
             return Collections.emptyList();\r
         }\r
@@ -667,8 +682,8 @@ public class OccurrenceDaoHibernateImpl
     }\r
 \r
     private <T extends SpecimenOrObservationBase> Query createSpecimenQuery(String select, Class<T> clazz,\r
-            Taxon associatedTaxon, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths){\r
-        Set<SpecimenOrObservationBase> setOfAll = new HashSet<>();\r
+            Taxon associatedTaxon, Integer limit, Integer start, List<OrderHint> orderHints){\r
+//        Set<SpecimenOrObservationBase> setOfAll = new HashSet<>();\r
         Set<Integer> setOfAllIds = new HashSet<>();\r
 \r
         Criteria criteria = null;\r
@@ -727,7 +742,9 @@ public class OccurrenceDaoHibernateImpl
         for(HomotypicalGroup homotypicalGroup :  associatedTaxon.getHomotypicSynonymyGroups()) {\r
             List<SpecimenTypeDesignation> byHomotypicalGroup = homotypicalGroupDao.getTypeDesignations(homotypicalGroup, SpecimenTypeDesignation.class, null, null, 0, null);\r
             for (SpecimenTypeDesignation specimenTypeDesignation : byHomotypicalGroup) {\r
-                setOfAll.add(specimenTypeDesignation.getTypeSpecimen());\r
+                if (specimenTypeDesignation.getTypeSpecimen() != null){\r
+                    setOfAllIds.add(specimenTypeDesignation.getTypeSpecimen().getId());\r
+                }\r
             }\r
         }\r
 \r
@@ -898,6 +915,7 @@ public class OccurrenceDaoHibernateImpl
 \r
 \r
         if (dnaSamples.isEmpty()){\r
+            logger.debug("there is no dnaSample for genetic accession number " + accessionNumberString + " this should not happen.");\r
             return null;\r
         }else if (dnaSamples.size() == 1){\r
             return dnaSamples.get(0);\r