Added an extra method to ITermService, added documentation for Pager and fixed a...
authorben.clark <ben.clark@localhost>
Sun, 5 Jul 2009 20:47:08 +0000 (20:47 +0000)
committerben.clark <ben.clark@localhost>
Sun, 5 Jul 2009 20:47:08 +0000 (20:47 +0000)
cdmlib-services/pom.xml
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ITermService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/NameServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TermServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/pager/Pager.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/pager/impl/AbstractPagerImpl.java

index 9309b5c3cab15dcdae8300960af3c09ea04e6a0c..abbece6c0b409f9cac3eb4b639cf305f8e2216fb 100644 (file)
        <version>2.0.4</version>\r
                <type>test-jar</type>\r
                <scope>test</scope>\r
+       </dependency>
+       <dependency>
+               <groupId>commons-lang</groupId>
+               <artifactId>commons-lang</artifactId>
        </dependency>\r
   </dependencies>\r
 </project>\r
index 88b766b1ca754dbaddfe6291165bd18f1d4a9f95..89c773e251ab803ea29655281ff65699e84a60a9 100644 (file)
@@ -160,4 +160,14 @@ public interface ITermService extends IService<DefinedTermBase> {
         * @return a Pager of DefinedTerms
         */
        public <T extends DefinedTermBase> Pager<T> getIncludes(Set<T> definedTerms, Integer pageSize, Integer pageNumber, List<String> propertyPaths);
+
+       /**
+        * Return a paged list of terms which have representations that match the supplied string
+        * 
+        * @param label a string to match (exactly)
+        * @param pageSize The maximum number of terms returned (can be null for all terms)
+        * @param pageNumber The offset (in pageSize chunks) from the start of the result set (0 - based)
+        * @return a Pager of DefinedTerms
+        */
+       public <T extends DefinedTermBase> Pager<T> findByRepresentationText(String label, Class<T> clazz,  Integer pageSize, Integer pageNumber);
 }
index a89fea0bb18a9730dd40b69be6c64c259a96ebb0..c857bb2431f99924f2e144a35bd2b86401721f24 100644 (file)
@@ -248,8 +248,13 @@ public class NameServiceImpl extends IdentifiableServiceBase<TaxonNameBase,ITaxo
        }\r
 \r
        public Pager<NameRelationship> pageFromNameRelationships(TaxonNameBase name, NameRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-               List<NameRelationship> results = listFromNameRelationships(name, type, pageSize, pageNumber, orderHints, propertyPaths);\r
-               return new DefaultPagerImpl<NameRelationship>(pageNumber, results.size(), pageSize, results);\r
+        Integer numberOfResults = dao.countNameRelationships(name, NameRelationship.Direction.relatedFrom, type);\r
+               \r
+               List<NameRelationship> results = new ArrayList<NameRelationship>();\r
+               if(numberOfResults > 0) { // no point checking again\r
+                       results = dao.getNameRelationships(name, NameRelationship.Direction.relatedFrom, type, pageSize, pageNumber, orderHints, propertyPaths); \r
+               }\r
+               return new DefaultPagerImpl<NameRelationship>(pageNumber, numberOfResults, pageSize, results);\r
        }\r
        \r
        public List<NameRelationship> listToNameRelationships(TaxonNameBase name, NameRelationshipType type,\r
@@ -266,8 +271,15 @@ public class NameServiceImpl extends IdentifiableServiceBase<TaxonNameBase,ITaxo
        }\r
        \r
        public Pager<NameRelationship> pageToNameRelationships(TaxonNameBase name, NameRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-               List<NameRelationship> results = listToNameRelationships(name, type, pageSize, pageNumber, orderHints, propertyPaths);\r
-               return new DefaultPagerImpl<NameRelationship>(pageNumber, results.size(), pageSize, results);\r
+               Integer numberOfResults = dao.countNameRelationships(name, NameRelationship.Direction.relatedTo, type);\r
+\r
+               List<NameRelationship> results = new ArrayList<NameRelationship>();\r
+               if (numberOfResults > 0) { // no point checking again\r
+                       results = dao.getNameRelationships(name, NameRelationship.Direction.relatedTo, type, pageSize, pageNumber,\r
+                               orderHints, propertyPaths);\r
+               }\r
+\r
+               return new DefaultPagerImpl<NameRelationship>(pageNumber, numberOfResults, pageSize, results);\r
        }\r
 \r
        \r
index 1444aff0d03109d9d2542fa8c5944c903205c4bb..12470f9778f2f384b3bdb5e339c78c53a1f3dfd5 100644 (file)
@@ -485,8 +485,13 @@ public class TaxonServiceImpl extends IdentifiableServiceBase<TaxonBase,ITaxonDa
        }\r
        \r
        public Pager<TaxonRelationship> pageToTaxonRelationships(Taxon taxon, TaxonRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-               List<TaxonRelationship> results = listToTaxonRelationships(taxon, type, pageSize, pageNumber, orderHints, propertyPaths); \r
-               return new DefaultPagerImpl<TaxonRelationship>(pageNumber, results.size(), pageSize, results);\r
+        Integer numberOfResults = dao.countTaxonRelationships(taxon, type, TaxonRelationship.Direction.relatedTo);\r
+               \r
+               List<TaxonRelationship> results = new ArrayList<TaxonRelationship>();\r
+               if(numberOfResults > 0) { // no point checking again\r
+                       results = dao.getTaxonRelationships(taxon, type, pageSize, pageNumber, orderHints, propertyPaths, TaxonRelationship.Direction.relatedTo); \r
+               }\r
+               return new DefaultPagerImpl<TaxonRelationship>(pageNumber, numberOfResults, pageSize, results);\r
        }\r
        \r
        public List<TaxonRelationship> listFromTaxonRelationships(Taxon taxon, TaxonRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths){\r
@@ -500,8 +505,13 @@ public class TaxonServiceImpl extends IdentifiableServiceBase<TaxonBase,ITaxonDa
        }\r
        \r
        public Pager<TaxonRelationship> pageFromTaxonRelationships(Taxon taxon, TaxonRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-               List<TaxonRelationship> results = listToTaxonRelationships(taxon, type, pageSize, pageNumber, orderHints, propertyPaths); \r
-               return new DefaultPagerImpl<TaxonRelationship>(pageNumber, results.size(), pageSize, results);\r
+        Integer numberOfResults = dao.countTaxonRelationships(taxon, type, TaxonRelationship.Direction.relatedFrom);\r
+               \r
+               List<TaxonRelationship> results = new ArrayList<TaxonRelationship>();\r
+               if(numberOfResults > 0) { // no point checking again\r
+                       results = dao.getTaxonRelationships(taxon, type, pageSize, pageNumber, orderHints, propertyPaths, TaxonRelationship.Direction.relatedFrom); \r
+               }\r
+               return new DefaultPagerImpl<TaxonRelationship>(pageNumber, numberOfResults, pageSize, results);\r
        }\r
 \r
        public Pager<SynonymRelationship> getSynonyms(Taxon taxon,      SynonymRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
index ae10a9c4d6da88169aeeb313e865d303048aa4b8..0407ca0dbae08366638ce74b33b88038af4adf6c 100644 (file)
@@ -272,7 +272,15 @@ public class TermServiceImpl extends ServiceBase<DefinedTermBase,IDefinedTermDao
                
                return new DefaultPagerImpl<NamedArea>(pageNumber, numberOfResults, pageSize, results);
        }
-       
-       
-       
+
+       public <T extends DefinedTermBase> Pager<T> findByRepresentationText(String label, Class<T> clazz, Integer pageSize, Integer pageNumber) {
+        Integer numberOfResults = dao.countDefinedTermByRepresentationText(label,clazz);
+               
+               List<T> results = new ArrayList<T>();
+               if(numberOfResults > 0) { // no point checking again
+                       results = dao.getDefinedTermByRepresentationText(label, clazz, pageSize, pageNumber);
+               }
+               
+               return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);
+       }       
 }
index 427101c4231b419b6346db964681c291180a9990..e6ceaab3135b2f983cff14ee121702afe78920da 100644 (file)
@@ -12,27 +12,101 @@ package eu.etaxonomy.cdm.api.service.pager;
 \r
 import java.util.List;\r
 \r
+/**\r
+ * Abstract class that represents a single page in a set of objects \r
+ * returned from a query (possibly a subset of the total number of matching objects\r
+ * available).\r
+ * \r
+ * NOTE: Indices for objects and pages are 0-based.\r
+ * @author ben\r
+ *\r
+ * @param <T>\r
+ */\r
 public interface Pager<T> {\r
+       /**\r
+        * The total number of pages available for this query, or 0 if there are \r
+        * no matching objects\r
+        * \r
+        * @return The number of pages available\r
+        */\r
     public Integer getPagesAvailable();\r
        \r
+    /**\r
+     * The index of the next page in this result set, or null if this is the\r
+     * last page in the result set. \r
+     * @return The index of the next page\r
+     */\r
        public Integer getNextIndex();\r
        \r
+       /**\r
+     * The index of the previous page in this result set, or null if this is the\r
+     * first page in the result set. \r
+     * @return The index of the previous page\r
+     */\r
        public Integer getPrevIndex();\r
        \r
+       /**\r
+        * The index of this page\r
+        * @return The index of this page\r
+        */\r
        public Integer getCurrentIndex();\r
        \r
+       /**\r
+        * Get a string label for a given page\r
+        * (NOTE: Labels may not be calculated for each page in the result set,\r
+        *  especially if the result set is large or the operation for calculating the \r
+        *  label is expensive. The indices of the pages for which labels are available \r
+        *  are given by {@link #getIndices()}.\r
+        *  \r
+        * @param index\r
+        * @return A label for the page indicated or null if this pager has not calculated a label for that page\r
+        */\r
        public String getPageNumber(int index);\r
+       \r
+       /**\r
+        * Gets the size of pages in this result set. Can be null if all matching \r
+        * objects should be returned.\r
+        * @return The page size\r
+        */\r
+       public Integer getPageSize();\r
 \r
+       /**\r
+        * Get a list of page indices for which labels are available. \r
+        * @return A list of indices\r
+        */\r
        public List<Integer> getIndices();\r
        \r
+       /**\r
+        * Get the total number of objects in this result set (not in this page). \r
+        * If count > {@link #getPageSize()} then {@link #getPagesAvailable()} > 1\r
+        * @return the total number of objects available.\r
+        */\r
        public Integer getCount();\r
 \r
+       /**\r
+        * Returns the index of the first record in this result set\r
+        * @return\r
+        */\r
        public Integer getFirstRecord();\r
 \r
+       /**\r
+        * Returns the index of the last record in this result set\r
+        * @return\r
+        */\r
        public Integer getLastRecord();\r
        \r
+       /**\r
+        * Returns the records in this page.\r
+        * @return\r
+        */\r
        public List<T> getRecords();\r
        \r
+       /**\r
+        * Returns a suggested query string (only applicable for free-text / lucene queries).\r
+        * \r
+        * Usually only calculated if there were no matching results for the original query.\r
+        * @return\r
+        */\r
        public String getSuggestion();\r
 \r
 }\r
index 463460daafbeab937098e7924b22d41a85ca60fa..226999a8f5b96345c986baee8c4cbf01f35400e5 100644 (file)
@@ -37,12 +37,30 @@ public abstract class AbstractPagerImpl<T> implements Pager<T>, Serializable {
        protected List<T> records;\r
        protected String suggestion;\r
        protected ArrayList<Integer> indices;\r
-\r
+       protected Integer pageSize;\r
+\r
+       /**\r
+        * Constructor\r
+        * \r
+        * @param currentIndex the page of this result set (0-based), can be null \r
+        * @param count the total number of results available for this query\r
+        * @param pageSize The size of pages (can be null if all results should be returned if available)\r
+        * @param records A list of objects in this page (can be empty if there were no results)\r
+        * @param suggestion a suggested query that would improve the search (only applicable for free-text / lucene queries)\r
+        */\r
        public AbstractPagerImpl(Integer currentIndex, Integer count, Integer pageSize, List<T> records, String suggestion) {\r
                this(currentIndex,count,pageSize,records);\r
                this.suggestion = suggestion;\r
        }\r
        \r
+       /**\r
+        * Constructor\r
+        * \r
+        * @param currentIndex the page of this result set (0-based), can be null \r
+        * @param count the total number of results available for this query\r
+        * @param pageSize The size of pages (can be null if all results should be returned if available)\r
+        * @param records A list of objects in this page (can be empty if there were no results)\r
+        */\r
        public AbstractPagerImpl(Integer currentIndex, Integer count, Integer pageSize, List<T> records) {\r
         if(currentIndex != null) {\r
                    this.currentIndex = currentIndex;\r
@@ -50,7 +68,8 @@ public abstract class AbstractPagerImpl<T> implements Pager<T>, Serializable {
                this.currentIndex = 0;\r
         }\r
                \r
-               pageNumbers = new HashMap<Integer,String>();\r
+        this.pageSize = pageSize;\r
+               this.pageNumbers = new HashMap<Integer,String>();\r
                indices = new ArrayList<Integer>();\r
                if(count == 0) {\r
                        pagesAvailable = 1;\r
@@ -187,4 +206,8 @@ public abstract class AbstractPagerImpl<T> implements Pager<T>, Serializable {
                return suggestion;\r
        }\r
 \r
+       public Integer getPageSize() {\r
+               return pageSize;\r
+       }\r
+\r
 }
\ No newline at end of file