001/*
002 * (C) Copyright 2010-2016 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 *
016 * Contributors:
017 *     Anahide Tchertchian
018 */
019package org.nuxeo.ecm.platform.query.api;
020
021import java.io.Serializable;
022import java.util.List;
023import java.util.Map;
024import java.util.Set;
025
026import org.nuxeo.ecm.core.api.DocumentModel;
027import org.nuxeo.ecm.core.api.SortInfo;
028
029/**
030 * @author Anahide Tchertchian
031 * @since 5.4
032 */
033public interface PageProviderService extends Serializable {
034
035    /**
036     * Name of the search document model context map property holding named parameters.
037     *
038     * @since 7.1
039     */
040    String NAMED_PARAMETERS = "namedParameters";
041
042    /**
043     * Returns a named page provider definition.
044     * <p>
045     * Useful to share the definition between the page provider service, and the content view service (as content views
046     * can reference a named page provider that is already registered instead of redefining it).
047     *
048     * @since 5.4
049     * @param name the page provider name
050     * @return the page provider definition or null, if no page provider with this name was found.
051     */
052    PageProviderDefinition getPageProviderDefinition(String name);
053
054    /**
055     * Returns an instance of page provider with given name and definition.
056     * <p>
057     * Useful to share the definition between the page provider service, and the content view service (as content views
058     * can reference a named page provider that is already registered instead of redefining it).
059     * <p>
060     * If not null, parameters sortInfos and pageSize will override information computed in the XML file. If not null,
061     * currentPage will override default current page (0).
062     *
063     * @param name the name that will be set on the provider.
064     * @param desc the definition used to build the provider instance.
065     * @param searchDocument the search document to be used by the provider.
066     * @param sortInfos sort information to set on the provider instance.
067     * @param pageSize the provider page size.
068     * @param currentPage the provider current page index.
069     * @param properties the provider properties
070     * @param parameters the provider parameters.
071     * @return the page provider instance.
072     * @since 5.7
073     */
074    PageProvider<?> getPageProvider(String name, PageProviderDefinition desc, DocumentModel searchDocument,
075            List<SortInfo> sortInfos, Long pageSize, Long currentPage, Map<String, Serializable> properties,
076            Object... parameters);
077
078    /**
079     * Returns an instance of page provider with given name.
080     *
081     * @param name the page provider name
082     * @param sortInfos sort information to set on the provider instance.
083     * @param pageSize the provider page size.
084     * @param currentPage the provider current page index.
085     * @param properties the provider properties
086     * @param parameters the provider parameters.
087     * @return the page provider instance.
088     * @since 5.4
089     */
090    PageProvider<?> getPageProvider(String name, List<SortInfo> sortInfos, Long pageSize, Long currentPage,
091            Map<String, Serializable> properties, Object... parameters);
092
093    /**
094     * Returns an instance of page provider with given name.
095     *
096     * @see #getPageProvider(String, PageProviderDefinition, DocumentModel, List, Long, Long, Map, Object...)
097     * @since 5.7
098     */
099    PageProvider<?> getPageProvider(String name, DocumentModel searchDocument, List<SortInfo> sortInfos, Long pageSize,
100            Long currentPage, Map<String, Serializable> properties, Object... parameters);
101
102    /**
103     * Returns an instance of page provider with given name.
104     *
105     * @see #getPageProvider(String, DocumentModel, List, Long, Long, Map, Object...)
106     * @since 8.4
107     */
108    PageProvider<?> getPageProvider(String name, DocumentModel searchDocument, List<SortInfo> sortInfos, Long pageSize,
109            Long currentPage, Map<String, Serializable> properties, List<QuickFilter> quickFilters,
110            Object... parameters);
111
112    /**
113     * Returns an instance of page provider with given name.
114     *
115     * @see #getPageProvider(String, PageProviderDefinition, DocumentModel, List, Long, Long, Map, Object...)
116     * @since 8.4
117     */
118    PageProvider<?> getPageProvider(String name, PageProviderDefinition desc, DocumentModel searchDocument,
119            List<SortInfo> sortInfos, Long pageSize, Long currentPage, Map<String, Serializable> properties,
120            List<QuickFilter> quickFilters, Object... parameters);
121
122    /**
123     * Returns an instance of page provider with given name.
124     *
125     * @see #getPageProvider(String, List, Long, Long, Map, Object...)
126     * @since 9.1
127     */
128    PageProvider<?> getPageProvider(String name, List<SortInfo> sortInfos, Long pageSize, Long currentPage,
129            Map<String, Serializable> properties, List<String> highlights, List<QuickFilter> quickFilters,
130            Object... parameters);
131
132    /**
133     * Returns an instance of page provider with given name.
134     *
135     * @see #getPageProvider(String, DocumentModel, List, Long, Long, Map, Object...)
136     * @since 9.1
137     */
138    PageProvider<?> getPageProvider(String name, DocumentModel searchDocument, List<SortInfo> sortInfos, Long pageSize,
139            Long currentPage, Map<String, Serializable> properties, List<String> highlights,
140            List<QuickFilter> quickFilters, Object... parameters);
141
142    /**
143     * Returns an instance of page provider with given name.
144     *
145     * @see #getPageProvider(String, PageProviderDefinition, DocumentModel, List, Long, Long, Map, Object...)
146     * @since 9.1
147     */
148    PageProvider<?> getPageProvider(String name, PageProviderDefinition desc, DocumentModel searchDocument,
149            List<SortInfo> sortInfos, Long pageSize, Long currentPage, Map<String, Serializable> properties,
150            List<String> highlights, List<QuickFilter> quickFilters, Object... parameters);
151
152    /**
153     * @since 6.0
154     */
155    void registerPageProviderDefinition(PageProviderDefinition desc);
156
157    /**
158     * @since 6.0
159     */
160    void unregisterPageProviderDefinition(PageProviderDefinition desc);
161
162    /**
163     * Returns all the registered page provider names, or an empty set if no page provider is registered.
164     *
165     * @since 6.0
166     */
167    Set<String> getPageProviderDefinitionNames();
168
169}