001    /**
002     * Copyright (c) 2000-2012 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.search.lucene;
016    
017    import com.liferay.portal.kernel.search.BaseBooleanQueryImpl;
018    import com.liferay.portal.kernel.search.BooleanClause;
019    import com.liferay.portal.kernel.search.BooleanClauseOccur;
020    import com.liferay.portal.kernel.search.BooleanClauseOccurImpl;
021    import com.liferay.portal.kernel.search.ParseException;
022    import com.liferay.portal.kernel.search.Query;
023    import com.liferay.portal.kernel.search.QueryTranslatorUtil;
024    
025    import java.util.ArrayList;
026    import java.util.List;
027    
028    /**
029     * @author Brian Wing Shun Chan
030     * @author Hugo Huijser
031     */
032    public class BooleanQueryImpl extends BaseBooleanQueryImpl {
033    
034            public BooleanQueryImpl() {
035                    _booleanQuery = new org.apache.lucene.search.BooleanQuery();
036            }
037    
038            public void add(Query query, BooleanClauseOccur booleanClauseOccur)
039                    throws ParseException {
040    
041                    _booleanQuery.add(
042                            (org.apache.lucene.search.Query)QueryTranslatorUtil.translate(
043                                    query),
044                            BooleanClauseOccurTranslator.translate(booleanClauseOccur));
045            }
046    
047            public void add(Query query, String occur) throws ParseException {
048                    BooleanClauseOccur booleanClauseOccur = new BooleanClauseOccurImpl(
049                            occur);
050    
051                    add(query, booleanClauseOccur);
052            }
053    
054            public void addExactTerm(String field, boolean value) {
055                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
056            }
057    
058            public void addExactTerm(String field, Boolean value) {
059                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
060            }
061    
062            public void addExactTerm(String field, double value) {
063                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
064            }
065    
066            public void addExactTerm(String field, Double value) {
067                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
068            }
069    
070            public void addExactTerm(String field, int value) {
071                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
072            }
073    
074            public void addExactTerm(String field, Integer value) {
075                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
076            }
077    
078            public void addExactTerm(String field, long value) {
079                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
080            }
081    
082            public void addExactTerm(String field, Long value) {
083                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
084            }
085    
086            public void addExactTerm(String field, short value) {
087                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
088            }
089    
090            public void addExactTerm(String field, Short value) {
091                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
092            }
093    
094            public void addExactTerm(String field, String value) {
095                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
096            }
097    
098            public void addNumericRangeTerm(
099                    String field, int startValue, int endValue) {
100    
101                    LuceneHelperUtil.addNumericRangeTerm(
102                            _booleanQuery, field, startValue, endValue);
103            }
104    
105            public void addNumericRangeTerm(
106                    String field, Integer startValue, Integer endValue) {
107    
108                    LuceneHelperUtil.addNumericRangeTerm(
109                            _booleanQuery, field, startValue, endValue);
110            }
111    
112            public void addNumericRangeTerm(
113                    String field, long startValue, long endValue) {
114    
115                    LuceneHelperUtil.addNumericRangeTerm(
116                            _booleanQuery, field, startValue, endValue);
117            }
118    
119            public void addNumericRangeTerm(
120                    String field, Long startValue, Long endValue) {
121    
122                    LuceneHelperUtil.addNumericRangeTerm(
123                            _booleanQuery, field, startValue, endValue);
124            }
125    
126            public void addNumericRangeTerm(
127                    String field, short startValue, short endValue) {
128    
129                    LuceneHelperUtil.addNumericRangeTerm(
130                            _booleanQuery, field, startValue, endValue);
131            }
132    
133            public void addNumericRangeTerm(
134                    String field, Short startValue, Short endValue) {
135    
136                    LuceneHelperUtil.addNumericRangeTerm(
137                            _booleanQuery, field, startValue, endValue);
138            }
139    
140            public void addRangeTerm(String field, int startValue, int endValue) {
141                    LuceneHelperUtil.addRangeTerm(
142                            _booleanQuery, field, startValue, endValue);
143            }
144    
145            public void addRangeTerm(
146                    String field, Integer startValue, Integer endValue) {
147    
148                    LuceneHelperUtil.addRangeTerm(
149                            _booleanQuery, field, startValue, endValue);
150            }
151    
152            public void addRangeTerm(String field, long startValue, long endValue) {
153                    LuceneHelperUtil.addRangeTerm(
154                            _booleanQuery, field, startValue, endValue);
155            }
156    
157            public void addRangeTerm(String field, Long startValue, Long endValue) {
158                    LuceneHelperUtil.addRangeTerm(
159                            _booleanQuery, field, startValue, endValue);
160            }
161    
162            public void addRangeTerm(String field, short startValue, short endValue) {
163                    LuceneHelperUtil.addRangeTerm(
164                            _booleanQuery, field, startValue, endValue);
165            }
166    
167            public void addRangeTerm(String field, Short startValue, Short endValue) {
168                    LuceneHelperUtil.addRangeTerm(
169                            _booleanQuery, field, startValue, endValue);
170            }
171    
172            public void addRangeTerm(String field, String startValue, String endValue) {
173                    LuceneHelperUtil.addRangeTerm(
174                            _booleanQuery, field, startValue, endValue);
175            }
176    
177            public void addRequiredTerm(String field, boolean value) {
178                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
179            }
180    
181            public void addRequiredTerm(String field, Boolean value) {
182                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
183            }
184    
185            public void addRequiredTerm(String field, double value) {
186                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
187            }
188    
189            public void addRequiredTerm(String field, Double value) {
190                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
191            }
192    
193            public void addRequiredTerm(String field, int value) {
194                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
195            }
196    
197            public void addRequiredTerm(String field, Integer value) {
198                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
199            }
200    
201            public void addRequiredTerm(String field, long value) {
202                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
203            }
204    
205            public void addRequiredTerm(String field, Long value) {
206                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
207            }
208    
209            public void addRequiredTerm(String field, short value) {
210                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
211            }
212    
213            public void addRequiredTerm(String field, Short value) {
214                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
215            }
216    
217            public void addRequiredTerm(String field, String value) {
218                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
219            }
220    
221            public void addRequiredTerm(String field, String value, boolean like) {
222                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value, like);
223            }
224    
225            public void addTerm(String field, long value) {
226                    LuceneHelperUtil.addTerm(_booleanQuery, field, value);
227            }
228    
229            public void addTerm(String field, String value) {
230                    LuceneHelperUtil.addTerm(_booleanQuery, field, value);
231            }
232    
233            public void addTerm(String field, String value, boolean like) {
234                    LuceneHelperUtil.addTerm(_booleanQuery, field, value, like);
235            }
236    
237            public void addTerm(
238                    String field, String value, boolean like,
239                    BooleanClauseOccur booleanClauseOccur) {
240    
241                    LuceneHelperUtil.addTerm(
242                            _booleanQuery, field, value, like, booleanClauseOccur);
243            }
244    
245            public List<BooleanClause> clauses() {
246                    List<org.apache.lucene.search.BooleanClause> luceneBooleanClauses =
247                            _booleanQuery.clauses();
248    
249                    List<BooleanClause> booleanClauses = new ArrayList<BooleanClause>(
250                            luceneBooleanClauses.size());
251    
252                    for (int i = 0; i < luceneBooleanClauses.size(); i++) {
253                            BooleanClause booleanClause = new BooleanClauseImpl(
254                                    luceneBooleanClauses.get(i));
255    
256                            booleanClauses.add(booleanClause);
257                    }
258    
259                    return booleanClauses;
260            }
261    
262            public org.apache.lucene.search.BooleanQuery getBooleanQuery() {
263                    return _booleanQuery;
264            }
265    
266            @Override
267            public Object getWrappedQuery() {
268                    return getBooleanQuery();
269            }
270    
271            public boolean hasClauses() {
272                    return !clauses().isEmpty();
273            }
274    
275            @Override
276            public String toString() {
277                    return _booleanQuery.toString();
278            }
279    
280            private org.apache.lucene.search.BooleanQuery _booleanQuery;
281    
282    }