#4313 implementing full stack of methods to expose TaxonNodeAgentRelations via remote...
authorAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Fri, 13 Nov 2015 19:57:11 +0000 (20:57 +0100)
committerAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Mon, 16 Nov 2015 14:01:35 +0000 (15:01 +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/ITaxonNodeDao.java
cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/TaxonController.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ITaxonNodeService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonNodeServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/description/TransmissionEngineDistribution.java

index d7fc28d91e9360338ad888ca388c56b4dd37a6f8..5b4336dc1d3377958184b46f8e626a1b9d3dbd5c 100644 (file)
@@ -2245,4 +2245,5 @@ public class TaxonDaoHibernateImpl extends IdentifiableDaoBase<TaxonBase> implem
 \r
         return getTaxonNodeUuidAndTitleCacheOfAcceptedTaxaByClassification(classification,null);\r
     }\r
+\r
 }\r
index 203b62d8ea383bde2cb701df8e54bf19cadbe037..2e80724fe0c1911c78956af2ea4b2ced769bf777 100644 (file)
@@ -17,6 +17,7 @@ import java.util.UUID;
 \r
 import org.apache.log4j.Logger;\r
 import org.hibernate.Criteria;\r
+import org.hibernate.Query;\r
 import org.hibernate.criterion.Projections;\r
 import org.hibernate.criterion.Restrictions;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
@@ -27,6 +28,7 @@ import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.model.taxon.Classification;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNodeAgentRelation;\r
 import eu.etaxonomy.cdm.persistence.dao.hibernate.common.AnnotatableDaoImpl;\r
 import eu.etaxonomy.cdm.persistence.dao.taxon.IClassificationDao;\r
 import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonDao;\r
@@ -112,7 +114,7 @@ public class TaxonNodeDaoHibernateImpl extends AnnotatableDaoImpl<TaxonNode>
     @Override\r
     public List<TaxonNode> listChildrenOf(TaxonNode node, Integer pageSize, Integer pageIndex, List<String> propertyPaths, boolean recursive){\r
        if (recursive == true){\r
-               Criteria crit = getSession().createCriteria(TaxonNode.class); \r
+               Criteria crit = getSession().createCriteria(TaxonNode.class);\r
                crit.add( Restrictions.like("treeIndex", node.treeIndex()+ "%") );\r
                if(pageSize != null) {\r
                 crit.setMaxResults(pageSize);\r
@@ -122,22 +124,22 @@ public class TaxonNodeDaoHibernateImpl extends AnnotatableDaoImpl<TaxonNode>
                     crit.setFirstResult(0);\r
                 }\r
             }\r
-               List<TaxonNode> results = (List<TaxonNode>) crit.list();\r
+               List<TaxonNode> results = crit.list();\r
                results.remove(node);\r
                defaultBeanInitializer.initializeAll(results, propertyPaths);\r
                return results;\r
        }else{\r
                return classificationDao.listChildrenOf(node.getTaxon(), node.getClassification(), pageSize, pageIndex, propertyPaths);\r
        }\r
-       \r
+\r
     }\r
-    \r
+\r
     @Override\r
        public Long countChildrenOf(TaxonNode node, Classification classification,\r
                        boolean recursive) {\r
-               \r
+\r
                if (recursive == true){\r
-                       Criteria crit = getSession().createCriteria(TaxonNode.class); \r
+                       Criteria crit = getSession().createCriteria(TaxonNode.class);\r
                crit.add( Restrictions.like("treeIndex", node.treeIndex()+ "%") );\r
                crit.setProjection(Projections.rowCount());\r
                return ((Integer)crit.uniqueResult().hashCode()).longValue();\r
@@ -145,6 +147,57 @@ public class TaxonNodeDaoHibernateImpl extends AnnotatableDaoImpl<TaxonNode>
                        return classificationDao.countChildrenOf(node.getTaxon(), classification);\r
                }\r
        }\r
+    /**\r
+     * {@inheritDoc}\r
+     */\r
+    @Override\r
+    public List<TaxonNodeAgentRelation> listTaxonNodeAgentRelations(UUID taxonUuid, UUID classificationUuid,\r
+            Integer start, Integer limit, List<String> propertyPaths) {\r
+\r
+        String hql = "select tnar from TaxonNodeAgentRelation as tnar "\r
+                + "join tnar.taxonNode as tn "\r
+                + "join tn.taxon as t "\r
+                + "join tn.classification as c "\r
+                + "join fetch tnar.agent as a "\r
+                + "where t.uuid = :taxonUuid and c.uuid = :classificationUuid "\r
+                + "order by a.titleCache";\r
+        Query query =  getSession().createQuery(hql);\r
+\r
+        if(limit != null) {\r
+            query.setMaxResults(limit);\r
+            if(start != null) {\r
+                query.setFirstResult(start);\r
+            }\r
+        }\r
+\r
+        query.setParameter("taxonUuid", taxonUuid);\r
+        query.setParameter("classificationUuid", classificationUuid);\r
+\r
+        List<TaxonNodeAgentRelation> records = query.list();\r
 \r
+        if(propertyPaths != null) {\r
+            defaultBeanInitializer.initializeAll(records, propertyPaths);\r
+        }\r
+        return records;\r
+    }\r
+    /**\r
+     * {@inheritDoc}\r
+     */\r
+    @Override\r
+    public long countTaxonNodeAgentRelations(UUID taxonUuid, UUID classificationUuid) {\r
+        String hql = "select count(tnar) from TaxonNodeAgentRelation as tnar "\r
+                + "join tnar.taxonNode as tn "\r
+                + "join tn.taxon as t "\r
+                + "join tn.classification as c "\r
+                + "where t.uuid = :taxonUuid and c.uuid = :classificationUuid";\r
+        Query query =  getSession().createQuery(hql);\r
+\r
+        query.setParameter("taxonUuid", taxonUuid);\r
+        query.setParameter("classificationUuid", classificationUuid);\r
+\r
+        Long count = Long.parseLong(query.uniqueResult().toString());\r
+\r
+        return count;\r
+    }\r
 \r
 }\r
index 75fbf01c11f59edc3a03c5d964e40fc819a455cb..ee87ddfb9818603530fb9608d9ea04136f0c4960 100644 (file)
@@ -14,6 +14,7 @@ import java.util.UUID;
 \r
 import eu.etaxonomy.cdm.model.taxon.Classification;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNodeAgentRelation;\r
 import eu.etaxonomy.cdm.persistence.dao.common.IAnnotatableDao;\r
 \r
 /**\r
@@ -39,4 +40,30 @@ public interface ITaxonNodeDao extends IAnnotatableDao<TaxonNode> {
     public List<TaxonNode> listChildrenOf(TaxonNode node, Integer pageSize, Integer pageIndex, List<String> propertyPaths, boolean recursive);\r
 \r
     public abstract Long countChildrenOf(TaxonNode node, Classification classification, boolean recursive);\r
+\r
+    /**\r
+     * Returns the of TaxonNodeAgentRelation entities which are associated with the TaxonNode for the\r
+     * given TaxonUuid in the specified Classification.\r
+     *\r
+     * @param taxonUuid\r
+     * @param limit\r
+     * @param start\r
+     * @param classification\r
+     * @param propertyPaths\r
+     * @return\r
+     */\r
+    public List<TaxonNodeAgentRelation> listTaxonNodeAgentRelations(UUID taxonUuid, UUID classificationUuid,\r
+            Integer start, Integer limit, List<String> propertyPaths);\r
+\r
+    /**\r
+     * Returns the number of TaxonNodeAgentRelation entities which are associated with the TaxonNode for the\r
+     * given TaxonUuid in the specified Classification.\r
+     *\r
+     * @param taxonUuid\r
+     * @param classification\r
+     * @return\r
+     */\r
+    public long countTaxonNodeAgentRelations(UUID taxonUuid, UUID classificationUuid);\r
+\r
+\r
 }\r
index 8cbec05dc2b25aa7ec2874175a6fd10b29c87c92..0cf3970295d708660d0ec5915766eba03483dbfd 100644 (file)
@@ -34,6 +34,7 @@ import com.wordnik.swagger.annotations.Api;
 \r
 import eu.etaxonomy.cdm.api.service.INameService;\r
 import eu.etaxonomy.cdm.api.service.IOccurrenceService;\r
+import eu.etaxonomy.cdm.api.service.ITaxonNodeService;\r
 import eu.etaxonomy.cdm.api.service.ITaxonService;\r
 import eu.etaxonomy.cdm.api.service.config.IncludedTaxonConfiguration;\r
 import eu.etaxonomy.cdm.api.service.dto.IncludedTaxaDTO;\r
@@ -43,6 +44,7 @@ import eu.etaxonomy.cdm.model.taxon.Classification;
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNodeAgentRelation;\r
 import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
 import eu.etaxonomy.cdm.persistence.query.OrderHint.SortOrder;\r
 import eu.etaxonomy.cdm.remote.controller.util.PagerParameters;\r
@@ -65,6 +67,8 @@ public class TaxonController extends BaseController<TaxonBase, ITaxonService>
     private IOccurrenceService occurrenceService;\r
     @Autowired\r
     private INameService nameService;\r
+    @Autowired\r
+    private ITaxonNodeService nodeService;\r
 \r
     protected static final List<String> TAXONNODE_INIT_STRATEGY = Arrays.asList(new String []{\r
             "taxonNodes"\r
@@ -175,6 +179,7 @@ public class TaxonController extends BaseController<TaxonBase, ITaxonService>
             @PathVariable("uuid") UUID uuid,\r
             HttpServletRequest request,\r
             HttpServletResponse response) throws IOException {\r
+\r
         TaxonBase<?> tb = service.load(uuid, TAXONNODE_INIT_STRATEGY);\r
         if(tb instanceof Taxon){\r
             return ((Taxon)tb).getTaxonNodes();\r
@@ -184,6 +189,25 @@ public class TaxonController extends BaseController<TaxonBase, ITaxonService>
         }\r
     }\r
 \r
+    @RequestMapping(value = "taxonNodeAgentRelations/{classification_uuid}", method = RequestMethod.GET)\r
+    public Pager<TaxonNodeAgentRelation>  doGetTaxonNodeAgentRelations(\r
+            @PathVariable("uuid") UUID uuid,\r
+            @PathVariable("classification_uuid") UUID classificationUuid,\r
+            @RequestParam(value = "pageNumber", required = false) Integer pageNumber,\r
+            @RequestParam(value = "pageSize", required = false) Integer pageSize,\r
+            HttpServletRequest request,\r
+            HttpServletResponse response) throws IOException {\r
+\r
+        PagerParameters pagerParams = new PagerParameters(pageSize, pageNumber);\r
+        pagerParams.normalizeAndValidate(response);\r
+\r
+        Pager<TaxonNodeAgentRelation> pager = nodeService.pageTaxonNodeAgentRelations(uuid, classificationUuid,\r
+                pagerParams.getPageSize(), pagerParams.getPageIndex(), null);\r
+        return pager;\r
+\r
+\r
+    }\r
+\r
 \r
     @RequestMapping(value = "specimensOrObservations", method = RequestMethod.GET)\r
     public ModelAndView doListSpecimensOrObservations(\r
index def7fb110890796c5790df21cb18fa4cf254827b..2620c7f1bdf9c774b7df4ff2195b12a837a4465a 100644 (file)
@@ -16,10 +16,12 @@ import java.util.Set;
 import java.util.UUID;
 
 import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator;
+import eu.etaxonomy.cdm.api.service.pager.Pager;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.taxon.Classification;
 import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.model.taxon.TaxonNodeAgentRelation;
 
 
 /**
@@ -137,7 +139,16 @@ public interface ITaxonNodeService extends IAnnotatableService<TaxonNode>{
      */
     public DeleteResult deleteTaxonNodes(List<TaxonNode> list, TaxonDeletionConfigurator config);
 
-
+    /**
+     * Returns the of TaxonNodeAgentRelation entities which are associated with the TaxonNode for the
+     * given TaxonUuid in the specified Classification.
+     *
+     * @param taxonUuid
+     * @param classification
+     * @return
+     */
+    public Pager<TaxonNodeAgentRelation> pageTaxonNodeAgentRelations(UUID taxonUuid, UUID classificationUuid,
+            Integer pageSize, Integer pageIndex, List<String> propertyPaths);
 
 
 }
index 0dd73bc67ab566c770c8f89088c7e4c5e6111f8a..4b1678b44b532431d4c7d5a85827ce6b75440227 100644 (file)
@@ -29,6 +29,9 @@ import eu.etaxonomy.cdm.api.service.config.NodeDeletionConfigurator.ChildHandlin
 import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator;
 import eu.etaxonomy.cdm.api.service.config.TaxonNodeDeletionConfigurator;
 import eu.etaxonomy.cdm.api.service.dto.CdmEntityIdentifier;
+import eu.etaxonomy.cdm.api.service.pager.Pager;
+import eu.etaxonomy.cdm.api.service.pager.PagerUtils;
+import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
@@ -41,6 +44,7 @@ import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonNaturalComparator;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.model.taxon.TaxonNodeAgentRelation;
 import eu.etaxonomy.cdm.model.taxon.TaxonNodeByNameComparator;
 import eu.etaxonomy.cdm.model.taxon.TaxonNodeByRankAndNameComparator;
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
@@ -544,4 +548,21 @@ public class TaxonNodeServiceImpl extends AnnotatableServiceBase<TaxonNode, ITax
         return result;
     }
 
+    @Override
+    public Pager<TaxonNodeAgentRelation> pageTaxonNodeAgentRelations(UUID taxonUuid, UUID classificationUuid,
+            Integer pageSize, Integer pageIndex, List<String> propertyPaths) {
+
+        List<TaxonNodeAgentRelation> records = null;
+
+        long count = dao.countTaxonNodeAgentRelations(taxonUuid, classificationUuid);
+        if(PagerUtils.hasResultsInRange(count, pageIndex, pageSize)) {
+            records = dao.listTaxonNodeAgentRelations(taxonUuid, classificationUuid,
+                    PagerUtils.startFor(pageSize, pageIndex), PagerUtils.limitFor(pageSize), propertyPaths);
+
+        }
+
+        Pager<TaxonNodeAgentRelation> pager = new DefaultPagerImpl<TaxonNodeAgentRelation>(pageIndex, count, pageSize, records);
+        return pager;
+    }
+
 }
index a1fc46de88d8dd2022277a8e5d3bcb47ec20275b..e013fc99c741aa1b2f800c5d750343e3ae3185f3 100644 (file)
@@ -402,7 +402,7 @@ public class TransmissionEngineDistribution { //TODO extends IoBase?
             taxonPager = taxonService.page(Taxon.class, batchSize, pageIndex++, null, null);
 
             if(taxonPager.getCurrentIndex() == 0){
-                subMonitor.beginTask("Accumulating by area ",  taxonPager.getCount());
+                subMonitor.beginTask("Accumulating by area ",  taxonPager.getCount().intValue());
             }
 
             logger.debug("accumulateByArea() - taxon " + taxonPager.getFirstRecord() + " to " + taxonPager.getLastRecord() + " of " + taxonPager.getCount() + "]");
@@ -539,7 +539,7 @@ public class TransmissionEngineDistribution { //TODO extends IoBase?
 
                 if(taxonSubMonitor == null) {
                     taxonSubMonitor = new SubProgressMonitor(subMonitor, ticksPerRank);
-                    taxonSubMonitor.beginTask("Accumulating by rank " + rank.getLabel(), taxonPager.getCount());
+                    taxonSubMonitor.beginTask("Accumulating by rank " + rank.getLabel(), taxonPager.getCount().intValue());
 
                 }