Class QueryManager

  • All Implemented Interfaces:
    JcmsConstants, JaliosConstants

    public class QueryManager
    extends java.lang.Object
    implements JcmsConstants
    This class manages queries on publications
    Since:
    jcms-5.0.0
    Author:
    Olivier Dedieu, Olivier Jaquemet
    • Field Detail

      • QUERY_MANAGER_STEP_ATTRIBUTE

        public static final java.lang.String QUERY_MANAGER_STEP_ATTRIBUTE
        QueryHandler attribute key of the current QueryManager processing step of the QueryManager.
        See Also:
        QueryManager.QueryStep, Constant Field Values
      • queryFilterSet

        protected java.util.Set<QueryFilter> queryFilterSet
      • idCount

        protected int idCount
    • Method Detail

      • getQueryManager

        public static QueryManager getQueryManager()
      • getPublicationSearchEngine

        public PublicationSearchEngine getPublicationSearchEngine()
        Returns:
        the PublicationSearchEngine
        Since:
        jcms-5.5.0
      • getCategorySearchEngine

        public CategorySearchEngine getCategorySearchEngine()
        Returns:
        the CategorySearchEngine
        Since:
        jcms-5.5.0
      • addQueryFilter

        public void addQueryFilter​(QueryFilter qf)
        Add the given QueryFilter.
        Parameters:
        qf - the QueryFilter to be added
        Since:
        jcms-5.0.0
      • removeQueryFilter

        public void removeQueryFilter​(QueryFilter qf)
        Remove the given QueryFilter.
        Parameters:
        qf - the QueryFilter to be removed
        Since:
        jcms-5.0.0
      • getQueryFilterSet

        public java.util.Set<QueryFilter> getQueryFilterSet()
        Returns all the query filter. DO NOT alter the returned set, clone prior modification.
        Returns:
        the queryFilterSet
        Since:
        jcms-5.5.0
      • prepareExternalResult

        public void prepareExternalResult​(Publication pub)
        Prepare the given publication to be displayed in the result list. Fill the publication with fake id, cdate, mdate and pdate, and author.
        Parameters:
        pub - the publication to be prepared
        Since:
        jcms-5.0.0
      • query

        public QueryResultSet query​(QueryHandler qh,
                                    javax.servlet.ServletRequest request,
                                    java.util.Set<? extends Publication> proposedDataSet)
        Perform a query using parameters specified in the given QueryHandler.
        Search in the given Collection of Publication or in all Publication if not specified.
        Parameters:
        qh - the QueryHandler from which to retrieve the query parameters, MUST NOT be null.
        request - the ServletHttpRequest used to set some error or warning messages in the attributes, can be null.
        proposedDataSet - the Collection of Publication in which to search and apply query parameters, if null, search is done in all Publication.
        Returns:
        a QueryResultSet containing all results of this query, it is a HashSet and therefore it is NOT sorted. use either QueryResultSet.getAsSortedSet() or QueryResultSet.getAsSortedSet(java.util.Comparator) to obtain a sorted Set.
        Since:
        jcms-5.0.0
      • performJStoreQuery

        protected QueryResultSet performJStoreQuery​(QueryHandler qh,
                                                    javax.servlet.http.HttpServletRequest request,
                                                    java.util.Set<? extends Publication> proposedDataSet)
        Parameters:
        qh - the queryHandler
        request - the request
        proposedDataSet - the proposed data set
        Returns:
        see QueryManager#query(QueryHandler, ServletRequest, Set)
        See Also:
        query(QueryHandler, ServletRequest, Set)
      • getDateType

        protected static int getDateType​(QueryHandler qh)
        Return an integer describing the type of search date from a QueryHandler.
        Parameters:
        qh - the QueryHandler to use.
        Returns:
        an integer, see ?DATE_SEARCH constants.
      • getBeginAndEndDates

        protected java.util.Date[] getBeginAndEndDates​(QueryHandler qh)
        Compute begin and end date of a query from QueryHandler values.
        Parameters:
        qh - the QueryHandler to use.
        Returns:
        an array of two Date, the first is the begin date, the second the end Date.
      • getQueryCategorySet

        protected java.util.HashSet<Category> getQueryCategorySet​(QueryHandler qh)
        Compute a HashSet of Category to include during query from the "cids" value of the given QueryHandler.
        Parameters:
        qh - the QueryHandler
        Returns:
        a HashSet of Category
      • getQueryAvoidCategorySet

        protected java.util.HashSet<Category> getQueryAvoidCategorySet​(QueryHandler qh)
        Compute a HashSet of Category to exclude during query from the "cidsOff" value of the given QueryHandler.
        Parameters:
        qh - the QueryHandler
        Returns:
        a HashSet of Category
      • getQueryMemberSet

        protected java.util.HashSet<Member> getQueryMemberSet​(QueryHandler qh)
        Compute a HashSet of Member to include during query from the "mids" value of the given QueryHandler.
        Parameters:
        qh - the QueryHandler
        Returns:
        a HashSet of Member
      • getQueryAvoidMemberSet

        protected java.util.HashSet<Member> getQueryAvoidMemberSet​(QueryHandler qh)
        Compute a HashSet of Member to exclude during query from the "midsOff" value of the given QueryHandler.
        Parameters:
        qh - the QueryHandler
        Returns:
        a HashSet of Member
      • getQueryGroupSet

        protected java.util.HashSet<Group> getQueryGroupSet​(QueryHandler qh)
        Compute a HashSet of Group to include during query from the "gids" value of the given QueryHandler. Return null if the computed hashset is empty.
        Parameters:
        qh - the QueryHandler
        Returns:
        a HashSet of Group
      • getQueryAvoidGroupSet

        protected java.util.HashSet<Group> getQueryAvoidGroupSet​(QueryHandler qh)
        Compute a HashSet of Group to exclude during query from the "gidsOff" value of the given QueryHandler.
        Parameters:
        qh - the QueryHandler
        Returns:
        a HashSet of Group
      • getQueryPortalElementSet

        protected java.util.HashSet<PortalElement> getQueryPortalElementSet​(QueryHandler qh)
        Compute a HashSet of PortalElement including all portal ands its children from the "portalIds" value of the given QueryHandler.
        Parameters:
        qh - the QueryHandler
        Returns:
        a HashSet of PortalElement
      • getQueryClassSet

        protected java.util.HashSet<java.lang.Class<? extends Publication>> getQueryClassSet​(QueryHandler qh,
                                                                                             boolean addFileDoc)
        Compute a HashSet of Class (type) to include during query from the "types" value of the given QueryHandler.
        Parameters:
        qh - the QueryHandler
        addFileDoc - if true add the FileDocument class
        Returns:
        a HashSet of Class
      • getQueryAvoidClassSet

        protected java.util.HashSet<java.lang.Class<? extends Publication>> getQueryAvoidClassSet​(QueryHandler qh)
        Compute a HashSet of Class (type) to include during query from the "typesOff" value of the given QueryHandler.
        Parameters:
        qh - the QueryHandler
        Returns:
        a HashSet of Class
      • reduceDataSetWithTextEngine

        protected void reduceDataSetWithTextEngine​(QueryHandler qh,
                                                   java.util.HashSet<Publication> dataToKeepSet,
                                                   java.util.HashSet<Publication> dataToExcludeSet,
                                                   boolean[] indexUsed)
        Fill the given HashSet with Data to keep and to exclude using Text Search options of the QueryHandler.
        Parameters:
        qh - the QueryHandler
        dataToKeepSet - the set of data to keep
        dataToExcludeSet - the set of data to exclude
        indexUsed - a flag to mark if data set is to keep or to exclude
        Since:
        jcms-6.1.0
      • reduceDataSetWithTypes

        protected boolean reduceDataSetWithTypes​(QueryHandler qh,
                                                 java.util.HashSet<Publication> dataToKeepSet,
                                                 java.util.HashSet<Publication> dataToExcludeSet,
                                                 boolean[] indexUsed)
        Fill the given HashSet with Data to keep and to exclude using Types options (types/typesOff) of the QueryHandler.
        Parameters:
        qh - the QueryHandler
        dataToKeepSet - the set of data to keep
        dataToExcludeSet - the set of data to exclude
        indexUsed - a flag to mark if data set is to keep or to exclude
        Returns:
        true if the reduction using dataToKeepSet was performed, false otherwise.
      • reduceDataSetWithCategories

        protected void reduceDataSetWithCategories​(QueryHandler qh,
                                                   java.util.HashSet<Publication> dataToKeepSet,
                                                   java.util.HashSet<Publication> dataToExcludeSet,
                                                   boolean[] indexUsed)
        Fill the given HashSet with Data to keep and to exclude using Categories options (cids/cidsOff) of the QueryHandler.
        Parameters:
        qh - the QueryHandler
        dataToKeepSet - the set of data to keep
        dataToExcludeSet - the set of data to exclude
        indexUsed - a flag to mark if data set is to keep or to exclude
      • reduceDataSetWithMembers

        protected void reduceDataSetWithMembers​(QueryHandler qh,
                                                java.util.HashSet<Publication> dataToKeepSet,
                                                java.util.HashSet<Publication> dataToExcludeSet,
                                                boolean[] indexUsed)
        Fill the given HashSet with Data to keep and to exclude using Members options (mids/midsOff) of the QueryHandler.
        Parameters:
        qh - the QueryHandler
        dataToKeepSet - the set of data to keep
        dataToExcludeSet - the set of data to exclude
        indexUsed - a flag to mark if data set is to keep or to exclude
      • reduceDataSetWithPortalElements

        protected void reduceDataSetWithPortalElements​(QueryHandler qh,
                                                       java.util.HashSet<Publication> dataToKeepSet,
                                                       java.util.HashSet<Publication> dataToExcludeSet,
                                                       boolean[] indexUsed)
        Fill the given HashSet with Data to keep and to exclude using PortalElement options (mids/midsOff) of the QueryHandler.
        Parameters:
        qh - the QueryHandler
        dataToKeepSet - the set of data to keep
        dataToExcludeSet - the set of data to exclude
        indexUsed - a flag to mark if data set is to keep or to exclude
      • reduceDataSetWithHistoryRefinement

        protected QueryResultSet reduceDataSetWithHistoryRefinement​(QueryHandler qh,
                                                                    java.util.Set<? extends Publication> proposedDataSet,
                                                                    javax.servlet.http.HttpServletRequest request,
                                                                    java.util.HashSet<Publication> dataToKeepSet,
                                                                    java.util.HashSet<Publication> dataToExcludeSet,
                                                                    boolean[] indexUsed)
        Fill the given HashSet with Data to keep and to exclude using query History (hist) of the QueryHandler.

        Parameters:
        qh - the QueryHandler
        proposedDataSet - the proposed set of data to seach on.
        request - the request
        dataToKeepSet - the set of data to keep
        dataToExcludeSet - the set of data to exclude
        indexUsed - a flag to mark if data set is to keep or to exclude
        Returns:
        the QueryResultSet which was used for history refinement if any, or null otherwise
      • replaceFileDocByReferrers

        protected void replaceFileDocByReferrers​(QueryHandler qh,
                                                 QueryResultSet resultSet,
                                                 DataSelector replacedFileDocSelector)
        This method replace any FileDocuments inside the given QueryResultSet by their referrer (see getLinkIndexedDataSet(Publication.class)).

        It keeps score of original FileDocument (except if the publication was already part of the result.
        It removes FileDocument from the resultSet and add other Publications (if they match authorization and query params).

        Parameters:
        qh - the QueryHandler
        resultSet - the QueryResultSet
        replacedFileDocSelector - a DataSelector
        Since:
        jcms-4.1
      • searchFulltext

        protected boolean searchFulltext​(QueryHandler qh,
                                         java.util.HashSet<Publication> dataSet,
                                         QueryResultSet resultSet)
        Perform a full-text search. It fills the given resultSet with results from the dataSet matching critera of qh.
        Parameters:
        qh - the Queryhandler
        dataSet - a HashSet containing all the publication to search.
        resultSet - a QueryResultSet in which to put all the results.
        Returns:
        true if the search has been performed.
        Since:
        jcms-5.0.0
      • matchLucenePublicationRefinement

        public static boolean matchLucenePublicationRefinement​(QueryHandler qh,
                                                               Publication pub)
      • filterCriteria

        public void filterCriteria​(PublicationCriteria pubCriteria,
                                   org.hibernate.Criteria criteria)
        Invoke all QueryFilter to allow them to modify the Hibernate Criteria used for a DB Query.
        Parameters:
        pubCriteria - the criteria of the query.
        criteria - the hibernate criteria computed by JPlatform core
        Since:
        jcms-10.0.7 / JCMS-9561
      • filterDBResult

        public boolean filterDBResult​(Publication pub,
                                      java.util.Map context)
      • getRelatedPublicationSet

        public java.util.SortedSet<? extends Publication> getRelatedPublicationSet​(Publication pub,
                                                                                   Member mbr,
                                                                                   java.lang.Class... classes)
        Returns a set of publications related to the given publication and the given types for the given member.
        Parameters:
        pub - the publication to search related publications.
        mbr - the logged member
        classes - an array of publication classes
        Returns:
        a set of publications related to the given publication and the given types for the given member.
        Since:
        jcms-10.0.4
      • getRelatedPublicationSet

        public java.util.SortedSet<? extends Publication> getRelatedPublicationSet​(Publication pub,
                                                                                   QueryHandler qh)
        Returns a set of publications related to the given publication and the given query handler.
        Parameters:
        pub - the publication to search related publications.
        qh - the QueryHandler
        Returns:
        a set of publications related to the given publication and the given query handler.
        Since:
        jcms-10.0.0
      • getRelatedPublicationSet

        public java.util.SortedSet<? extends Publication> getRelatedPublicationSet​(java.util.Set<Category> catSet,
                                                                                   QueryHandler qh,
                                                                                   java.util.Comparator<? extends Publication> superComparator)
        Returns a set of publications related to the given category set and the given query handler.
        Parameters:
        catSet - the set of category to search related publications.
        qh - the QueryHandler
        superComparator - if not null use this comparator in case of equality on the common category count.
        Returns:
        a set of publications related to the given category set and the given query handler.
        Since:
        jcms-10.0.0