Class FinderSupport<TYPE,​EXTENDED_FINDER extends Finder<TYPE>>

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

    public class FinderSupport<TYPE,​EXTENDED_FINDER extends Finder<TYPE>>
    extends java.lang.Object
    implements Finder<TYPE>
    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
    • Constructor Detail

      • FinderSupport

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

        protected FinderSupport()
        Default constructor.
      • FinderSupport

        protected FinderSupport​(@Nonnull
                                FinderSupport<TYPE,​EXTENDED_FINDER> 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 EXTENDED_FINDER 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 EXTENDED_FINDER 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 EXTENDED_FINDER 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<TYPE>
        Parameters:
        firstResult - the index of the first result to return
        Returns:
        the Finder
      • max

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

        @Nonnull
        public EXTENDED_FINDER 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<TYPE>
        Parameters:
        context - the context
        Returns:
        the Finder
      • ofType

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

        @Nonnull
        public EXTENDED_FINDER 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<TYPE>
        Parameters:
        criterion - the sort criterion
        direction - the sort direction
        Returns:
        the Finder
      • sort

        @Nonnull
        public final EXTENDED_FINDER 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<TYPE>
        Parameters:
        criterion - the sort criterion
        Returns:
        the Finder
      • results

        @Nonnull
        public java.util.List<? extends TYPE> results()
        Performs the search and returns the found items.
        Specified by:
        results in interface Finder<TYPE>
        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<TYPE>
        Returns:
        the count of found items
      • computeResults

        @Nonnull
        protected java.util.List<? extends TYPE> 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<? extends TYPE> computeNeededResults()
        Subclasses can implement this method where *only the requested* raw results must be retrieved.
        Returns:
        the unprocessed results
      • getSource

        @Nonnull
        protected static <T> T getSource​(java.lang.Class<T> type,
                                         @Nonnull
                                         T other,
                                         @Nonnull
                                         java.lang.Object override)
        An 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:
        T - 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