001/*
002 * (C) Copyright 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 *     Gabriel Barata <gbarata@nuxeo.com>
018 */
019package org.nuxeo.ecm.platform.search.core;
020
021import java.io.Serializable;
022import java.util.ArrayList;
023import java.util.Arrays;
024import java.util.HashMap;
025import java.util.List;
026import java.util.Map;
027
028import org.nuxeo.ecm.core.api.DocumentModel;
029
030/**
031 * @since 8.3
032 */
033public class SavedSearchImpl implements SavedSearch {
034
035    private static final long serialVersionUID = 1L;
036    private DocumentModel doc;
037
038    public SavedSearchImpl(DocumentModel doc) {
039        this.doc = doc;
040    }
041
042    @Override
043    public String getId() {
044        return doc.getId();
045    }
046
047    @Override
048    public String getTitle() {
049        return getPropertyValue(SavedSearchConstants.TITLE_PROPERTY_NAME);
050    }
051
052    @Override
053    public Map<String, String> getNamedParams() {
054        List<Map<String, String>> paramsProperty = getPropertyValue(SavedSearchConstants.NAMED_PARAMS_PROPERTY_NAME);
055        Map<String, String> params = new HashMap<>();
056        for (Map<String, String> map : paramsProperty) {
057            params.put(map.get("key"), map.get("value"));
058        }
059        return params;
060    }
061
062    @Override
063    public String getQueryParams() {
064        return getPropertyValue(SavedSearchConstants.QUERY_PARAMS_PROPERTY_NAME);
065    }
066
067    @Override
068    public String getQuery() {
069        return getPropertyValue(SavedSearchConstants.QUERY_PROPERTY_NAME);
070    }
071
072    @Override
073    public String getQueryLanguage() {
074        return getPropertyValue(SavedSearchConstants.QUERY_LANGUAGE_PROPERTY_NAME);
075    }
076
077    @Override
078    public String getPageProviderName() {
079        return getPropertyValue(SavedSearchConstants.PAGE_PROVIDER_NAME_PROPERTY_NAME);
080    }
081
082    @Override
083    public Long getPageSize() {
084        return getPropertyValue(SavedSearchConstants.PAGE_SIZE_PROPERTY_NAME);
085    }
086
087    @Override
088    public Long getCurrentPageIndex() {
089        return getPropertyValue(SavedSearchConstants.CURRENT_PAGE_INDEX_PROPERTY_NAME);
090    }
091
092    @Override
093    public Long getMaxResults() {
094        return getPropertyValue(SavedSearchConstants.MAX_RESULTS_PROPERTY_NAME);
095    }
096
097    @Override
098    public String getSortBy() {
099        return getPropertyValue(SavedSearchConstants.SORT_BY_PROPERTY_NAME);
100    }
101
102    @Override
103    public String getSortOrder() {
104        return getPropertyValue(SavedSearchConstants.SORT_ORDER_PROPERTY_NAME);
105    }
106
107    @Override
108    public String getContentViewData() {
109        return getPropertyValue(SavedSearchConstants.CONTENT_VIEW_DATA_PROPERTY_NAME);
110    }
111
112    @Override
113    public DocumentModel getDocument() {
114        return doc;
115    }
116
117    @Override
118    public void setTitle(String title) {
119        doc.setPropertyValue(SavedSearchConstants.TITLE_PROPERTY_NAME, title);
120    }
121
122    @Override
123    public void setNamedParams(Map<String, String> params) {
124        if (params != null) {
125            List<Map<String, String>> paramsProperty = getPropertyValue(SavedSearchConstants.NAMED_PARAMS_PROPERTY_NAME);
126            if (paramsProperty == null) {
127                paramsProperty = new ArrayList<>();
128            }
129
130            Map<String, String> variable;
131            for (String key : params.keySet()) {
132                String value = params.get(key);
133                variable = new HashMap<>(2);
134                variable.put("key", key);
135                variable.put("value", value);
136                paramsProperty.add(variable);
137            }
138            doc.setPropertyValue(SavedSearchConstants.NAMED_PARAMS_PROPERTY_NAME, (Serializable) paramsProperty);
139        }
140    }
141
142    @Override
143    public void setQueryParams(String queryParams) {
144        doc.setPropertyValue(SavedSearchConstants.QUERY_PARAMS_PROPERTY_NAME, queryParams);
145    }
146
147    @Override
148    public void setQuery(String query) {
149        doc.setPropertyValue(SavedSearchConstants.QUERY_PROPERTY_NAME, query);
150    }
151
152    @Override
153    public void setQueryLanguage(String queryLanguage) {
154        doc.setPropertyValue(SavedSearchConstants.QUERY_LANGUAGE_PROPERTY_NAME, queryLanguage);
155    }
156
157    @Override
158    public void setPageProviderName(String pageProviderName) {
159        doc.setPropertyValue(SavedSearchConstants.PAGE_PROVIDER_NAME_PROPERTY_NAME, pageProviderName);
160    }
161
162    @Override
163    public void setPageSize(Long pageSize) {
164        doc.setPropertyValue(SavedSearchConstants.PAGE_SIZE_PROPERTY_NAME, pageSize);
165    }
166
167    @Override
168    public void setCurrentPageIndex(Long currentPageIndex) {
169        doc.setPropertyValue(SavedSearchConstants.CURRENT_PAGE_INDEX_PROPERTY_NAME, currentPageIndex);
170    }
171
172    @Override
173    public void setMaxResults(Long maxResults) {
174        doc.setPropertyValue(SavedSearchConstants.MAX_RESULTS_PROPERTY_NAME, maxResults);
175    }
176
177    @Override
178    public void setSortBy(String sortBy) {
179        doc.setPropertyValue(SavedSearchConstants.SORT_BY_PROPERTY_NAME, sortBy);
180    }
181
182    @Override
183    public void setSortOrder(String sortOrder) {
184        doc.setPropertyValue(SavedSearchConstants.SORT_ORDER_PROPERTY_NAME, sortOrder);
185    }
186
187    @Override
188    public void setContentViewData(String contentViewData) {
189        doc.setPropertyValue(SavedSearchConstants.CONTENT_VIEW_DATA_PROPERTY_NAME, contentViewData);
190    }
191
192    @Override
193    public void setDocument(DocumentModel doc) {
194        this.doc = doc;
195    }
196
197    @SuppressWarnings("unchecked")
198    protected <T> T getPropertyValue(String propertyName) {
199        Serializable value = doc.getPropertyValue(propertyName);
200        if (value instanceof Object[]) {
201            value = new ArrayList<>(Arrays.asList((Object[]) value));
202        }
203        return (T) value;
204    }
205
206    /**
207     * @since 9.3
208     */
209    @Override
210    public Long getCurrentPageOffset() {
211        return getPropertyValue(SavedSearchConstants.CURRENT_PAGE_OFFSET_PROPERTY_NAME);
212    }
213}