ref #9772: fix getting taxonRowWrapper - continue
authorKatja Luther <k.luther@bgbm.org>
Thu, 23 Sep 2021 09:03:29 +0000 (11:03 +0200)
committerKatja Luther <k.luther@bgbm.org>
Thu, 23 Sep 2021 09:03:29 +0000 (11:03 +0200)
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ITaxonNodeService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonNodeServiceImpl.java

index 123c753950ad9580d5bb838dadb3f60849a0fb56..1e086b233a90734f441d43c2d66f37dd8cf4f000 100644 (file)
@@ -285,4 +285,16 @@ public interface ITaxonNodeService extends IAnnotatableService<TaxonNode>{
     public UpdateResult cloneSubtree(SubtreeCloneConfigurator config);
 
     public HomotypicGroupDto getHomotypicGroupDto(UUID homotypicGroupUuid, UUID nodeUuid);
+
+    /**
+     * @param nodeUuids
+     * @return
+     */
+    List<TaxonNodeDto> getTaxonNodeDtos(List<UUID> nodeUuids);
+
+    /**
+     * @param nodeUuid
+     * @return
+     */
+    TaxonNodeDto getTaxonNodeDto(UUID nodeUuid);
 }
index 6fe1f96d03d2c3be6bb624f16284825ca925290f..6d2828c5ab289811068fc0968e8ca5a06ddbbc16 100644 (file)
@@ -22,6 +22,7 @@ import java.util.UUID;
 import java.util.stream.Collectors;
 
 import org.apache.log4j.Logger;
+import org.hibernate.Query;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.Authentication;
 import org.springframework.stereotype.Service;
@@ -89,6 +90,8 @@ import eu.etaxonomy.cdm.persistence.dao.taxon.IClassificationDao;
 import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonNodeDao;
 import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonNodeFilterDao;
 import eu.etaxonomy.cdm.persistence.dto.HomotypicGroupDto;
+import eu.etaxonomy.cdm.persistence.dto.SortableTaxonNodeQueryResult;
+import eu.etaxonomy.cdm.persistence.dto.SortableTaxonNodeQueryResultComparator;
 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
 import eu.etaxonomy.cdm.persistence.permission.ICdmPermissionEvaluator;
 import eu.etaxonomy.cdm.persistence.query.OrderHint;
@@ -1443,4 +1446,63 @@ public class TaxonNodeServiceImpl
         }
         return new HomotypicGroupDto(group, nodeUuid);
     }
+
+    @Override
+    public TaxonNodeDto getTaxonNodeDto(UUID nodeUuid) {
+        String queryString = "SELECT new " + SortableTaxonNodeQueryResult.class.getName() + "("
+                + "tn.uuid, tn.id, t.titleCache, rank "
+                + ") "
+                + " FROM TaxonNode tn "
+                + "   INNER JOIN tn.taxon AS t "
+                + "   INNER JOIN t.name AS name "
+                + "   LEFT OUTER JOIN name.rank AS rank "
+                + " WHERE t.uuid LIKE :uuid ";
+
+
+        Query query =  getSession().createQuery(queryString);
+
+        query.setParameter("uuid", nodeUuid.toString());
+
+
+        @SuppressWarnings("unchecked")
+        List<SortableTaxonNodeQueryResult> result = query.list();
+        Collections.sort(result, new SortableTaxonNodeQueryResultComparator());
+
+        List<TaxonNodeDto> list = new ArrayList<>();
+        for(SortableTaxonNodeQueryResult queryDTO : result){
+            list.add(new TaxonNodeDto(queryDTO.getTaxonNodeUuid(), queryDTO.getTaxonNodeId(), queryDTO.getTaxonTitleCache()));
+        }
+        return list.get(0);
+    }
+
+    @Override
+    public List<TaxonNodeDto> getTaxonNodeDtos(List<UUID> nodeUuids) {
+        String queryString = "SELECT new " + SortableTaxonNodeQueryResult.class.getName() + "("
+                + "tn.uuid, tn.id, t.titleCache, rank "
+                + ") "
+                + " FROM TaxonNode tn "
+                + "   INNER JOIN tn.taxon AS t "
+                + "   INNER JOIN t.name AS name "
+                + "   LEFT OUTER JOIN name.rank AS rank "
+                + " WHERE t.uuid IN (:uuid) ";
+
+
+        Query query =  getSession().createQuery(queryString);
+//        List<String> uuidStrings = nodeUuids.stream().map(e -> e.toString()).collect(Collectors.toList());
+
+        query.setParameterList("uuid", nodeUuids);
+
+
+        @SuppressWarnings("unchecked")
+        List<SortableTaxonNodeQueryResult> result = query.list();
+        Collections.sort(result, new SortableTaxonNodeQueryResultComparator());
+
+        List<TaxonNodeDto> list = new ArrayList<>();
+        for(SortableTaxonNodeQueryResult queryDTO : result){
+            TaxonNodeDto nodeDto = new TaxonNodeDto(queryDTO.getTaxonNodeUuid(), queryDTO.getTaxonNodeId(), queryDTO.getTaxonTitleCache(), queryDTO.getNameRank().getOrderIndex());
+
+            list.add(nodeDto);
+        }
+        return list;
+    }
 }
\ No newline at end of file