org.alfresco.query
Class AbstractCannedQuery

java.lang.Object
  extended by org.alfresco.query.AbstractCannedQuery
All Implemented Interfaces:
CannedQuery

public abstract class AbstractCannedQuery
extends java.lang.Object
implements CannedQuery

Basic support for canned query implementations.

Since:
4.0

Constructor Summary
protected AbstractCannedQuery(CannedQueryParameters parameters)
          Construct the canned query given the original parameters applied.
 
Method Summary
protected  java.util.List applyPostQueryPaging(java.util.List results, CannedQueryPageDetails pageDetails)
          Called after the sorting phase to pull out results specific to the required pages.
protected  java.util.List applyPostQueryPermissions(java.util.List results, int requestedCount)
          Called after the query to filter out results based on permissions.
protected  java.util.List applyPostQuerySorting(java.util.List results, CannedQuerySortDetails sortDetails)
          Called before #applyPostQueryPermissions(List) to allow the results to be sorted prior to permission checks.
 CannedQueryResults execute()
          Execute the named query, which was provided to support the parameters originally provided.
 CannedQueryParameters getParameters()
          Get the original parameters used to generate the query.
protected  Pair getTotalResultCount(java.util.List results)
          Get the total number of available results after querying, filtering, sorting and permission checking.
protected  boolean isApplyPostQueryPaging()
          Override to get post-query calls to do pull out paged results.
protected  boolean isApplyPostQueryPermissions()
          Override to get post-query calls to apply permission filters.
protected  boolean isApplyPostQuerySorting()
          Override to get post-query calls to do sorting.
protected abstract  java.util.List queryAndFilter(CannedQueryParameters parameters)
          Implement the basic query, returning either filtered or all results.
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

AbstractCannedQuery

protected AbstractCannedQuery(CannedQueryParameters parameters)
Construct the canned query given the original parameters applied.

A random GUID query execution ID will be generated.

Parameters:
parameters - the original query parameters
Method Detail

getParameters

public CannedQueryParameters getParameters()
Description copied from interface: CannedQuery
Get the original parameters used to generate the query.

Specified by:
getParameters in interface CannedQuery
Returns:
the parameters used to obtain the named query.

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

execute

public final CannedQueryResults execute()
Description copied from interface: CannedQuery
Execute the named query, which was provided to support the parameters originally provided.

Note: This method can only be used once; to requery, get a new instance from the factory.

Specified by:
execute in interface CannedQuery
Returns:
the query results

queryAndFilter

protected abstract java.util.List queryAndFilter(CannedQueryParameters parameters)
Implement the basic query, returning either filtered or all results.

The implementation may optimally select, filter, sort and apply permissions. If not, however, the subsequent post-query methods (AbstractCannedQuery.applyPostQuerySorting(List, CannedQuerySortDetails), #applyPostQueryPermissions(List, String) and AbstractCannedQuery.applyPostQueryPaging(List, CannedQueryPageDetails)) can be used to trim the results as required.

Parameters:
parameters - the full parameters to be used for execution

isApplyPostQuerySorting

protected boolean isApplyPostQuerySorting()
Override to get post-query calls to do sorting.

Returns:
true to get a post-query call to sort (default false)

applyPostQuerySorting

protected java.util.List applyPostQuerySorting(java.util.List results,
                                               CannedQuerySortDetails sortDetails)
Called before #applyPostQueryPermissions(List) to allow the results to be sorted prior to permission checks. Note that the #query() implementation may optimally sort results during retrieval, in which case this method does not need to be implemented.

Parameters:
results - the results to sort
sortDetails - details of the sorting requirements
Returns:
the results according to the new sort order

isApplyPostQueryPermissions

protected boolean isApplyPostQueryPermissions()
Override to get post-query calls to apply permission filters.

Returns:
true to get a post-query call to apply permissions (default false)

applyPostQueryPermissions

protected java.util.List applyPostQueryPermissions(java.util.List results,
                                                   int requestedCount)
Called after the query to filter out results based on permissions. Note that the #query() implementation may optimally only select results based on available privileges, in which case this method does not need to be implemented.

Permission evaluations should continue until the requested number of results are retrieved or all available results have been examined.

Parameters:
results - the results to apply permissions to
requestedCount - the minimum number of results to pass the permission checks in order to fully satisfy the paging requirements
Returns:
the remaining results (as a single "page") after permissions have been applied

getTotalResultCount

protected Pair getTotalResultCount(java.util.List results)
Get the total number of available results after querying, filtering, sorting and permission checking.

The default implementation assumes that the given results are the final total possible.

Parameters:
results - the results after filtering and sorting, but before paging
Returns:
pair representing (a) the total number of results and (b) the estimated (or actual) number of maximum results possible for this query.
See Also:
CannedQueryParameters.getTotalResultCountMax()

isApplyPostQueryPaging

protected boolean isApplyPostQueryPaging()
Override to get post-query calls to do pull out paged results.

Returns:
true to get a post-query call to page (default true)

applyPostQueryPaging

protected java.util.List applyPostQueryPaging(java.util.List results,
                                              CannedQueryPageDetails pageDetails)
Called after the sorting phase to pull out results specific to the required pages. Note that the #query() implementation may optimally create page-specific results, in which case this method does not need to be implemented.

The base implementation assumes that results are not paged and that the current results are all the available results i.e. that paging still needs to be applied.

Parameters:
results - full results (all or excess pages)
pageDetails - details of the paging requirements
Returns:
the specific page of results as per the query parameters


Copyright © 2005 - 2010 Alfresco Software, Inc. All Rights Reserved.