001    /**
002     * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.kernel.search;
016    
017    import com.liferay.portal.kernel.util.GetterUtil;
018    import com.liferay.portal.kernel.util.LocaleUtil;
019    import com.liferay.portal.kernel.util.PropsKeys;
020    import com.liferay.portal.kernel.util.PropsUtil;
021    
022    import java.io.Serializable;
023    
024    import java.util.HashMap;
025    import java.util.Locale;
026    import java.util.Map;
027    
028    /**
029     * @author Michael C. Han
030     */
031    public class QueryConfig implements Serializable {
032    
033            public static final String LOCALE = "locale";
034    
035            public static final String SEARCH_SUBFOLDERS = "search.subfolders";
036    
037            public Serializable getAttribute(String name) {
038                    return _attributes.get(name);
039            }
040    
041            public Map<String, Serializable> getAttributes() {
042                    return _attributes;
043            }
044    
045            public int getCollatedSpellCheckResultScoresThreshold() {
046                    return GetterUtil.getInteger(
047                            _attributes.get(
048                                    PropsKeys.
049                                            INDEX_SEARCH_COLLATED_SPELL_CHECK_RESULT_SCORES_THRESHOLD),
050                                    _INDEX_SEARCH_COLLATED_SPELL_CHECK_RESULT_SCORES_THRESHOLD);
051            }
052    
053            public int getHighlightFragmentSize() {
054                    return GetterUtil.getInteger(
055                            _attributes.get(PropsKeys.INDEX_SEARCH_HIGHLIGHT_FRAGMENT_SIZE),
056                            _INDEX_SEARCH_HIGHLIGHT_FRAGMENT_SIZE);
057            }
058    
059            public int getHighlightSnippetSize() {
060                    return GetterUtil.getInteger(
061                            _attributes.get(PropsKeys.INDEX_SEARCH_HIGHLIGHT_SNIPPET_SIZE),
062                            _INDEX_SEARCH_HIGHLIGHT_SNIPPET_SIZE);
063            }
064    
065            public Locale getLocale() {
066                    Locale locale = (Locale)_attributes.get(LOCALE);
067    
068                    if (locale == null) {
069                            locale = LocaleUtil.getMostRelevantLocale();
070                    }
071    
072                    return locale;
073            }
074    
075            public int getQueryIndexingThreshold() {
076                    return GetterUtil.getInteger(
077                            _attributes.get(
078                                    PropsKeys.INDEX_SEARCH_QUERY_INDEXING_THRESHOLD),
079                                    _INDEX_SEARCH_QUERY_INDEXING_THRESHOLD);
080            }
081    
082            public int getQuerySuggestionMax() {
083                    return GetterUtil.getInteger(
084                            _attributes.get(
085                                    PropsKeys.INDEX_SEARCH_QUERY_SUGGESTION_MAX),
086                                    _INDEX_SEARCH_QUERY_SUGGESTION_MAX);
087            }
088    
089            public int getQuerySuggestionScoresThreshold() {
090                    return GetterUtil.getInteger(
091                            _attributes.get(
092                                    PropsKeys.INDEX_SEARCH_QUERY_SUGGESTION_SCORES_THRESHOLD),
093                                    _INDEX_SEARCH_QUERY_SUGGESTION_SCORES_THRESHOLD);
094            }
095    
096            public boolean isCollatedSpellCheckResultEnabled() {
097                    return GetterUtil.getBoolean(
098                            _attributes.get(
099                                    PropsKeys.INDEX_SEARCH_COLLATED_SPELL_CHECK_RESULT_ENABLED),
100                                    _INDEX_SEARCH_COLLATED_SPELL_CHECK_RESULT_ENABLED);
101            }
102    
103            public boolean isHighlightEnabled() {
104                    return GetterUtil.getBoolean(
105                            _attributes.get(PropsKeys.INDEX_SEARCH_HIGHLIGHT_ENABLED), false);
106            }
107    
108            public boolean isHitsProcessingEnabled() {
109                    return GetterUtil.getBoolean(
110                            _attributes.get(_HITS_PROCESSING_ENABLED), true);
111            }
112    
113            public boolean isQueryIndexingEnabled() {
114                    return GetterUtil.getBoolean(
115                            _attributes.get(
116                                    PropsKeys.INDEX_SEARCH_QUERY_INDEXING_ENABLED),
117                                    _INDEX_SEARCH_QUERY_INDEXING_ENABLED);
118            }
119    
120            public boolean isQuerySuggestionEnabled() {
121                    return GetterUtil.getBoolean(
122                            _attributes.get(PropsKeys.INDEX_SEARCH_QUERY_SUGGESTION_ENABLED),
123                            _INDEX_SEARCH_QUERY_SUGGESTION_ENABLED);
124            }
125    
126            public boolean isScoreEnabled() {
127                    return GetterUtil.getBoolean(
128                            _attributes.get(PropsKeys.INDEX_SEARCH_SCORING_ENABLED),
129                            _INDEX_SEARCH_SCORING_ENABLED);
130            }
131    
132            public boolean isSearchSubfolders() {
133                    return GetterUtil.getBoolean(_attributes.get(SEARCH_SUBFOLDERS));
134            }
135    
136            public Serializable removeAttribute(String name) {
137                    return _attributes.remove(name);
138            }
139    
140            public void setAttribute(String name, Serializable value) {
141                    _attributes.put(name, value);
142            }
143    
144            public void setCollatedSpellCheckResultEnabled(
145                    boolean collatedSpellCheckResultEnabled) {
146    
147                    _attributes.put(
148                            PropsKeys.INDEX_SEARCH_COLLATED_SPELL_CHECK_RESULT_ENABLED,
149                            collatedSpellCheckResultEnabled);
150            }
151    
152            public void setCollatedSpellCheckResultScoresThreshold(
153                    int collatedSpellCheckResultScoresThreshold) {
154    
155                    _attributes.put(
156                            PropsKeys.
157                                    INDEX_SEARCH_COLLATED_SPELL_CHECK_RESULT_SCORES_THRESHOLD,
158                            collatedSpellCheckResultScoresThreshold);
159            }
160    
161            public void setHighlightEnabled(boolean highlightEnabled) {
162                    if (_INDEX_SEARCH_HIGHLIGHT_ENABLED) {
163                            _attributes.put(
164                                    PropsKeys.INDEX_SEARCH_HIGHLIGHT_ENABLED, highlightEnabled);
165                    }
166                    else {
167                            _attributes.put(PropsKeys.INDEX_SEARCH_HIGHLIGHT_ENABLED, false);
168                    }
169            }
170    
171            public void setHighlightFragmentSize(int highlightFragmentSize) {
172                    _attributes.put(
173                            PropsKeys.INDEX_SEARCH_HIGHLIGHT_FRAGMENT_SIZE,
174                            highlightFragmentSize);
175            }
176    
177            public void setHighlightSnippetSize(int highlightSnippetSize) {
178                    _attributes.put(
179                            PropsKeys.INDEX_SEARCH_HIGHLIGHT_SNIPPET_SIZE,
180                            highlightSnippetSize);
181            }
182    
183            public void setHitsProcessingEnabled(boolean hitsProcessingEnabled) {
184                    _attributes.put(_HITS_PROCESSING_ENABLED, hitsProcessingEnabled);
185            }
186    
187            public void setLocale(Locale locale) {
188                    _attributes.put(LOCALE, locale);
189            }
190    
191            public void setQueryIndexingEnabled(boolean enabled) {
192                    _attributes.put(PropsKeys.INDEX_SEARCH_QUERY_INDEXING_ENABLED, enabled);
193            }
194    
195            public void setQueryIndexingThreshold(int queryIndexingThreshold) {
196                    _attributes.put(
197                            PropsKeys.INDEX_SEARCH_QUERY_INDEXING_THRESHOLD,
198                            queryIndexingThreshold);
199            }
200    
201            public void setQuerySuggestionEnabled(boolean querySuggestionEnabled) {
202                    _attributes.put(
203                            PropsKeys.INDEX_SEARCH_QUERY_SUGGESTION_ENABLED,
204                            querySuggestionEnabled);
205            }
206    
207            public void setQuerySuggestionScoresThreshold(
208                    int querySuggestionScoresThreshold) {
209                            _attributes.put(
210                                    PropsKeys.INDEX_SEARCH_QUERY_SUGGESTION_SCORES_THRESHOLD,
211                                    querySuggestionScoresThreshold);
212            }
213    
214            public void setQuerySuggestionsMax(int querySuggestionMax) {
215                    _attributes.put(
216                            PropsKeys.INDEX_SEARCH_QUERY_SUGGESTION_MAX, querySuggestionMax);
217            }
218    
219            public void setScoreEnabled(boolean scoreEnabled) {
220                    _attributes.put(PropsKeys.INDEX_SEARCH_SCORING_ENABLED, scoreEnabled);
221            }
222    
223            public void setSearchSubfolders(boolean searchSubfolders) {
224                    _attributes.put(SEARCH_SUBFOLDERS, searchSubfolders);
225            }
226    
227            private static final String _HITS_PROCESSING_ENABLED =
228                    "hitsProcessingEnabled";
229    
230            private static final boolean
231                    _INDEX_SEARCH_COLLATED_SPELL_CHECK_RESULT_ENABLED =
232                            GetterUtil.getBoolean(
233                                    PropsUtil.get(
234                                            PropsKeys.INDEX_SEARCH_COLLATED_SPELL_CHECK_RESULT_ENABLED),
235                                    true);
236    
237            private static final int
238                    _INDEX_SEARCH_COLLATED_SPELL_CHECK_RESULT_SCORES_THRESHOLD =
239                            GetterUtil.getInteger(
240                                    PropsUtil.get(
241                                            PropsKeys.
242                                                    INDEX_SEARCH_COLLATED_SPELL_CHECK_RESULT_SCORES_THRESHOLD),
243                                            50);
244    
245            private static final boolean _INDEX_SEARCH_HIGHLIGHT_ENABLED =
246                    GetterUtil.getBoolean(
247                            PropsUtil.get(PropsKeys.INDEX_SEARCH_HIGHLIGHT_ENABLED));
248    
249            private static final int _INDEX_SEARCH_HIGHLIGHT_FRAGMENT_SIZE =
250                    GetterUtil.getInteger(
251                            PropsUtil.get(PropsKeys.INDEX_SEARCH_HIGHLIGHT_FRAGMENT_SIZE));
252    
253            private static final int _INDEX_SEARCH_HIGHLIGHT_SNIPPET_SIZE =
254                    GetterUtil.getInteger(
255                            PropsUtil.get(PropsKeys.INDEX_SEARCH_HIGHLIGHT_SNIPPET_SIZE));
256    
257            private static final boolean _INDEX_SEARCH_QUERY_INDEXING_ENABLED =
258                    GetterUtil.getBoolean(
259                            PropsUtil.get(PropsKeys.INDEX_SEARCH_QUERY_INDEXING_ENABLED), true);
260    
261            private static final int _INDEX_SEARCH_QUERY_INDEXING_THRESHOLD =
262                    GetterUtil.getInteger(
263                            PropsUtil.get(
264                                    PropsKeys.INDEX_SEARCH_QUERY_INDEXING_THRESHOLD),
265                            50);
266    
267            private static final boolean _INDEX_SEARCH_QUERY_SUGGESTION_ENABLED =
268                    GetterUtil.getBoolean(
269                            PropsUtil.get(PropsKeys.INDEX_SEARCH_QUERY_SUGGESTION_ENABLED),
270                            true);
271    
272            private static final int _INDEX_SEARCH_QUERY_SUGGESTION_MAX =
273                    GetterUtil.getInteger(
274                            PropsUtil.get(PropsKeys.INDEX_SEARCH_QUERY_SUGGESTION_MAX), 5);
275    
276            private static final int
277                    _INDEX_SEARCH_QUERY_SUGGESTION_SCORES_THRESHOLD = GetterUtil.getInteger(
278                            PropsUtil.get(
279                                    PropsKeys.INDEX_SEARCH_QUERY_SUGGESTION_SCORES_THRESHOLD), 50);
280    
281            private static final boolean _INDEX_SEARCH_SCORING_ENABLED =
282                    GetterUtil.getBoolean(
283                            PropsUtil.get(PropsKeys.INDEX_SEARCH_SCORING_ENABLED));
284    
285            private Map<String, Serializable> _attributes =
286                    new HashMap<String, Serializable>();
287    
288    }