ref #1447 improve findIdenticalNames
authorAndreas Müller <a.mueller@bgbm.org>
Wed, 22 Jan 2020 10:46:04 +0000 (11:46 +0100)
committerAndreas Müller <a.mueller@bgbm.org>
Wed, 22 Jan 2020 10:46:32 +0000 (11:46 +0100)
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonDaoHibernateImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonNodeDaoHibernateImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/taxon/ITaxonDao.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonServiceImpl.java

index c2b5522bbc2f69235d280cf7c9b0743f7632c2c8..7dd8cde864e7ee3ca79be1d3933aaeba27125f51 100755 (executable)
@@ -1380,7 +1380,7 @@ public class TaxonDaoHibernateImpl
     }
 
     @Override
-    public Map<String, Map<UUID,Set<TaxonName>>> findIdenticalNamesNew(List<UUID> sourceRefUuids, List<String> propertyPaths){
+    public Map<String, Map<UUID,Set<TaxonName>>> findIdenticalNames(List<UUID> sourceRefUuids, List<String> propertyPaths){
         Set<String> nameCacheCandidates = new HashSet<>();
         try {
             for (int i = 0; i<sourceRefUuids.size()-1;i++){
@@ -1393,13 +1393,14 @@ public class TaxonDaoHibernateImpl
 
                     Query query = getSession().createQuery(
                             " SELECT DISTINCT n1.nameCache "
-                          + " FROM TaxonName n1 JOIN n1.sources s1 JOIN s1.citation ref1 "
-                          +         " , TaxonName n2 JOIN n2.sources s2 JOIN s2.citation ref2 "
+                          + " FROM TaxonBase t1 JOIN t1.name n1 JOIN t1.sources s1 JOIN s1.citation ref1 "
+                          +         " , TaxonBase t2 JOIN t2.name n2 JOIN t2.sources s2 JOIN s2.citation ref2 "
                           + " WHERE  ref1.uuid = (:sourceUuid1) "
                           + "       AND n1.id <> n2.id "
                           + "       AND ref2.uuid IN (:sourceUuid2)"
                           + "       AND ref1.uuid <> ref2.uuid "
                           + "       AND n1.nameCache = n2.nameCache) "
+                          + "       AND t1.publish = 1 AND t2.publish = 1) "
                           + " ORDER BY n1.nameCache ");
                     query.setParameter("sourceUuid1", sourceUuid1);
                     query.setParameter("sourceUuid2", sourceUuid2);
@@ -1413,8 +1414,8 @@ public class TaxonDaoHibernateImpl
             Map<UUID, List<TaxonName>> duplicates = new HashMap<>();
             for (UUID sourceUuid : sourceRefUuids){
                 Query query=getSession().createQuery("SELECT n "
-                        + " FROM TaxonName n JOIN n.sources s JOIN s.citation ref "
-                        + " WHERE ref.uuid = :sourceUuid AND n.nameCache IN (:nameCacheCandidates) "
+                        + " FROM TaxonBase t JOIN t.name n JOIN t.sources s JOIN s.citation ref "
+                        + " WHERE ref.uuid = :sourceUuid AND n.nameCache IN (:nameCacheCandidates) AND t.publish = 1 "
                         + " ORDER BY n.nameCache");
                 query.setParameter("sourceUuid", sourceUuid);
                 query.setParameterList("nameCacheCandidates", nameCacheCandidates);
@@ -1422,7 +1423,7 @@ public class TaxonDaoHibernateImpl
                 List<TaxonName> sourceDuplicates = query.list();
                 defaultBeanInitializer.initializeAll(sourceDuplicates, propertyPaths);
 
-                 duplicates.put(sourceUuid, sourceDuplicates);
+                duplicates.put(sourceUuid, sourceDuplicates);
             }
 
             List<String> nameCacheCandidateList = new ArrayList<>(nameCacheCandidates);
index 8f7e5b804693c291ad6081076acc9fef64dcd58d..92b142d7a94f5add295b31249b1208d18ff73606 100755 (executable)
@@ -587,22 +587,8 @@ public class TaxonNodeDaoHibernateImpl extends AnnotatableDaoImpl<TaxonNode>
             nodeCrit.add(Restrictions.eq("classification", classification));\r
             nameCrit.add(Restrictions.eq("rank", rank));\r
 \r
-//          ProjectionList projList = Projections.projectionList();\r
-//          projList.add(Projections.property("treeIndex"));\r
-//          projList.add(Projections.property("uuid"));\r
-//          nodeCrit.setProjection(projList);\r
-\r
             @SuppressWarnings("unchecked")\r
             List<TaxonNode> list = nodeCrit.list();\r
-//          for (Object[] objectArray: list) {\r
-//              String treeIndexParent = (String) objectArray[0];\r
-//              UUID uuid = (UUID)objectArray[1];\r
-//              if (treeIndex.startsWith(treeIndexParent)) {\r
-//                  node = load(uuid);\r
-//                  break;\r
-//              }\r
-//          }\r
-\r
             for (TaxonNode rankNode : list){\r
                 TaxonNodeDto dto = new TaxonNodeDto(rankNode);\r
                 result.add(dto);\r
index c4dc46a201fc5ae1d4cb3d87e6c02d3513250896..24188c541d9a8acb9164bb99001b3d78e8a95d5d 100644 (file)
@@ -354,7 +354,7 @@ public interface ITaxonDao
     /**
      * see service layer documentation
      */
-    public Map<String, Map<UUID,Set<TaxonName>>> findIdenticalNamesNew(List<UUID> sourceRefUuids, List<String> propertyPaths);
+    public Map<String, Map<UUID,Set<TaxonName>>> findIdenticalNames(List<UUID> sourceRefUuids, List<String> propertyPaths);
 
     public List<UuidAndTitleCache<? extends IdentifiableEntity>> getTaxaByNameForEditor(boolean doTaxa, boolean doSynonyms, boolean doNamesWithoutTaxa,
             boolean doMisappliedNames, boolean doCommonNames, boolean includeUnpublished,
index 3410afe21af03266ba25f6008875965d781f6c11..d5cc23abb44c407be614d7cbd265a1beba4adf9a 100644 (file)
@@ -1258,7 +1258,7 @@ public class TaxonServiceImpl
 
     @Override
     public Map<String, Map<UUID,Set<TaxonName>>> findIdenticalTaxonNames(List<UUID> sourceRefUuids, List<String> propertyPaths) {
-        return this.dao.findIdenticalNamesNew(sourceRefUuids, propertyPaths);
+        return this.dao.findIdenticalNames(sourceRefUuids, propertyPaths);
     }