Class HierarchicFinderSupport<T,​F extends Finder<T>>

  • All Implemented Interfaces:
    Finder<T>, java.io.Serializable, java.lang.Cloneable
    Direct Known Subclasses:
    FinderWithIdSupport, SimpleFinderSupport

    public class HierarchicFinderSupport<T,​F extends Finder<T>>
    extends java.lang.Object
    implements Finder<T>
    A support class for implementing a Finder. Subclasses only need to implement the computeResults() method where raw results are retrieved (with raw we mean that they shouldn't be filtered or sorted, as post-processing will be performed by this class) and a clone constructor. If you don't need to extend the Finder with extra methods, please use the simplified SimpleFinderSupport.
    Author:
    Fabrizio Giudici
    See Also:
    Serialized Form
    Status: draft API
    • Field Detail

      • firstResult

        @Nonnegative
        protected final int firstResult
      • maxResults

        @Nonnegative
        protected final int maxResults
    • Constructor Detail

      • HierarchicFinderSupport

        protected HierarchicFinderSupport​(@Nonnull
                                          java.lang.String name)
        Creates an instance with the given name (that will be used for diagnostics).
        Parameters:
        name - the name
      • HierarchicFinderSupport

        protected HierarchicFinderSupport()
        Default constructor.
      • HierarchicFinderSupport

        protected HierarchicFinderSupport​(@Nonnull
                                          HierarchicFinderSupport<T,​F> other,
                                          @Nonnull
                                          java.lang.Object holder)
        Clone constructor for subclasses.
        Parameters:
        other - the other instance to clone
        holder - the holder object
    • Method Detail

      • clonedWith

        @Nonnull
        protected F clonedWith​(@Nonnull
                               java.lang.Object override)
        Create a clone of this object calling the special copy constructor by reflection.
        Parameters:
        override - the override object
        Returns:
        the clone
      • clone

        @Nonnull
        @Deprecated
        protected F clone​(@Nonnull
                          java.lang.Object override)
        Deprecated.
        Use clonedWith(Object) instead.
        Create a clone of this object calling the special clone constructor by reflection.
        Parameters:
        override - the override object
        Returns:
        the clone
      • from

        @Nonnull
        public F from​(@Nonnegative
                      int firstResult)
        Tells the Finder that only a subset of found items will be returned, starting from the given position.
        Specified by:
        from in interface Finder<T>
        Parameters:
        firstResult - the index of the first result to return
        Returns:
        the Finder
      • max

        @Nonnull
        public F max​(@Nonnegative
                     int maxResults)
        Tells the Finder that only a maximum number of found items will be returned.
        Specified by:
        max in interface Finder<T>
        Parameters:
        maxResults - the max number of results to return
        Returns:
        the Finder
      • withContext

        @Nonnull
        public F withContext​(@Nonnull
                             java.lang.Object context)
        Tells the Finder that results should be created with the given context. This method can be called multiple times; contexts are accumulated.
        Specified by:
        withContext in interface Finder<T>
        Parameters:
        context - the context
        Returns:
        the Finder
      • ofType

        @Nonnull
        public <U> Finder<U> ofType​(@Nonnull
                                    java.lang.Class<U> type)
        Tells the Finder that the specified type of results is expected.
        Specified by:
        ofType in interface Finder<T>
        Type Parameters:
        U - the static type
        Parameters:
        type - the dynamic type
        Returns:
        the Finder
      • sort

        @Nonnull
        public F sort​(@Nonnull
                      Finder.SortCriterion criterion,
                      @Nonnull
                      Finder.SortDirection direction)
        Tells the Finder that results will be sorted according to the given criterion and direction.
        Specified by:
        sort in interface Finder<T>
        Parameters:
        criterion - the sort criterion
        direction - the sort direction
        Returns:
        the Finder
      • sort

        @Nonnull
        public final F sort​(@Nonnull
                            Finder.SortCriterion criterion)
        Tells the Finder that results will be sorted according to the given criterion, in ascending direction.
        Specified by:
        sort in interface Finder<T>
        Parameters:
        criterion - the sort criterion
        Returns:
        the Finder
      • results

        @Nonnull
        public java.util.List<T> results()
        Performs the search and returns the found items.
        Specified by:
        results in interface Finder<T>
        Returns:
        the searched items
      • count

        @Nonnegative
        public int count()
        Performs the search and returns the count of found items.
        Specified by:
        count in interface Finder<T>
        Returns:
        the count of found items
      • computeResults

        @Nonnull
        protected java.util.List<T> computeResults()
        Subclasses can implement this method where *all* the raw results must be actually retrieved.
        Returns:
        the unprocessed results
      • computeNeededResults

        @Nonnull
        protected java.util.List<T> computeNeededResults()
        Subclasses can implement this method where *only the requested* raw results must be retrieved.
        Returns:
        the unprocessed results
      • getSource

        @Nonnull
        protected static <U> U getSource​(@Nonnull
                                         java.lang.Class<? extends U> type,
                                         @Nonnull
                                         U other,
                                         @Nonnull
                                         java.lang.Object override)
        A utility method used by the copy constructor (see general documentation). If the override object is strictly of the specified type, it is returned; otherwise the other object is returned.
        Type Parameters:
        U - the static type of the source
        Parameters:
        type - the dynamic type of the source
        other - the other finder
        override - the holder object
        Returns:
        the override or other