<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
* @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);
}
}\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
}\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
}\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
}\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
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);
+ }
}
\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
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
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
return suggestion;\r
}\r
\r
+ public Integer getPageSize() {\r
+ return pageSize;\r
+ }\r
+\r
}
\ No newline at end of file