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