Class AbstractCannedQuery<R>

  • All Implemented Interfaces:
    CannedQuery<R>

    public abstract class AbstractCannedQuery<R>
    extends java.lang.Object
    implements CannedQuery<R>
    Basic support for canned query implementations.
    Since:
    4.0
    Author:
    Derek Hulley
    • 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

      • toString

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

        public final CannedQueryResults<R> 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<R>
        Returns:
        the query results
      • 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<R> applyPostQuerySorting​(java.util.List<R> results,
                                                          CannedQuerySortDetails sortDetails)
        Called before applyPostQueryPermissions(List, int) 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<R> applyPostQueryPermissions​(java.util.List<R> 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<java.lang.Integer,​java.lang.Integer> getTotalResultCount​(java.util.List<R> 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<java.util.List<R>> applyPostQueryPaging​(java.util.List<R> 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