From: Katja Luther Date: Thu, 23 Sep 2021 09:03:29 +0000 (+0200) Subject: ref #9772: fix getting taxonRowWrapper - continue X-Git-Tag: 5.27.0^2~101 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/commitdiff_plain/c4f29439fe49960af10f8756f40c1c451199b8fa?hp=e1fef636fe8f1737189b3c6c75cd0c3df73549bd ref #9772: fix getting taxonRowWrapper - continue --- diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ITaxonNodeService.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ITaxonNodeService.java index 123c753950..1e086b233a 100644 --- a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ITaxonNodeService.java +++ b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ITaxonNodeService.java @@ -285,4 +285,16 @@ public interface ITaxonNodeService extends IAnnotatableService{ public UpdateResult cloneSubtree(SubtreeCloneConfigurator config); public HomotypicGroupDto getHomotypicGroupDto(UUID homotypicGroupUuid, UUID nodeUuid); + + /** + * @param nodeUuids + * @return + */ + List getTaxonNodeDtos(List nodeUuids); + + /** + * @param nodeUuid + * @return + */ + TaxonNodeDto getTaxonNodeDto(UUID nodeUuid); } diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonNodeServiceImpl.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonNodeServiceImpl.java index 6fe1f96d03..6d2828c5ab 100644 --- a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonNodeServiceImpl.java +++ b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonNodeServiceImpl.java @@ -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 result = query.list(); + Collections.sort(result, new SortableTaxonNodeQueryResultComparator()); + + List list = new ArrayList<>(); + for(SortableTaxonNodeQueryResult queryDTO : result){ + list.add(new TaxonNodeDto(queryDTO.getTaxonNodeUuid(), queryDTO.getTaxonNodeId(), queryDTO.getTaxonTitleCache())); + } + return list.get(0); + } + + @Override + public List getTaxonNodeDtos(List 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 uuidStrings = nodeUuids.stream().map(e -> e.toString()).collect(Collectors.toList()); + + query.setParameterList("uuid", nodeUuids); + + + @SuppressWarnings("unchecked") + List result = query.list(); + Collections.sort(result, new SortableTaxonNodeQueryResultComparator()); + + List 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