001    /**
002     * Copyright (c) 2000-2010 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    
024    import java.util.ArrayList;
025    import java.util.List;
026    
027    /**
028     * @author Brian Wing Shun Chan
029     */
030    public class BooleanQueryImpl extends BaseBooleanQueryImpl {
031    
032            public BooleanQueryImpl() {
033                    _booleanQuery = new org.apache.lucene.search.BooleanQuery();
034            }
035    
036            public void add(Query query, BooleanClauseOccur booleanClauseOccur)
037                    throws ParseException {
038    
039                    try {
040                            _booleanQuery.add(
041                                    QueryTranslator.translate(query),
042                                    BooleanClauseOccurTranslator.translate(booleanClauseOccur));
043                    }
044                    catch (org.apache.lucene.queryParser.ParseException pe) {
045                            throw new ParseException(pe.getMessage());
046                    }
047            }
048    
049            public void add(Query query, String occur) throws ParseException {
050                    BooleanClauseOccur booleanClauseOccur = new BooleanClauseOccurImpl(
051                            occur);
052    
053                    add(query, booleanClauseOccur);
054            }
055    
056            public void addExactTerm(String field, boolean value) {
057                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
058            }
059    
060            public void addExactTerm(String field, Boolean value) {
061                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
062            }
063    
064            public void addExactTerm(String field, double value) {
065                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
066            }
067    
068            public void addExactTerm(String field, Double value) {
069                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
070            }
071    
072            public void addExactTerm(String field, int value) {
073                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
074            }
075    
076            public void addExactTerm(String field, Integer value) {
077                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
078            }
079    
080            public void addExactTerm(String field, long value) {
081                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
082            }
083    
084            public void addExactTerm(String field, Long value) {
085                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
086            }
087    
088            public void addExactTerm(String field, short value) {
089                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
090            }
091    
092            public void addExactTerm(String field, Short value) {
093                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
094            }
095    
096            public void addExactTerm(String field, String value) {
097                    LuceneHelperUtil.addExactTerm(_booleanQuery, field, value);
098            }
099    
100            public void addRequiredTerm(String field, boolean value) {
101                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
102            }
103    
104            public void addRequiredTerm(String field, Boolean value) {
105                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
106            }
107    
108            public void addRequiredTerm(String field, double value) {
109                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
110            }
111    
112            public void addRequiredTerm(String field, Double value) {
113                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
114            }
115    
116            public void addRequiredTerm(String field, int value) {
117                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
118            }
119    
120            public void addRequiredTerm(String field, Integer value) {
121                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
122            }
123    
124            public void addRequiredTerm(String field, long value) {
125                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
126            }
127    
128            public void addRequiredTerm(String field, Long value) {
129                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
130            }
131    
132            public void addRequiredTerm(String field, short value) {
133                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
134            }
135    
136            public void addRequiredTerm(String field, Short value) {
137                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
138            }
139    
140            public void addRequiredTerm(String field, String value) {
141                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value);
142            }
143    
144            public void addRequiredTerm(String field, String value, boolean like) {
145                    LuceneHelperUtil.addRequiredTerm(_booleanQuery, field, value, like);
146            }
147    
148            public void addTerm(String field, long value) throws ParseException {
149                    try {
150                            LuceneHelperUtil.addTerm(_booleanQuery, field, value);
151                    }
152                    catch (org.apache.lucene.queryParser.ParseException pe) {
153                            throw new ParseException(pe.getMessage());
154                    }
155            }
156    
157            public void addTerm(String field, String value) throws ParseException {
158                    try {
159                            LuceneHelperUtil.addTerm(_booleanQuery, field, value);
160                    }
161                    catch (org.apache.lucene.queryParser.ParseException pe) {
162                            throw new ParseException(pe.getMessage());
163                    }
164            }
165    
166            public void addTerm(String field, String value, boolean like)
167                    throws ParseException {
168    
169                    try {
170                            LuceneHelperUtil.addTerm(_booleanQuery, field, value, like);
171                    }
172                    catch (org.apache.lucene.queryParser.ParseException pe) {
173                            throw new ParseException(pe.getMessage());
174                    }
175            }
176    
177            public List<BooleanClause> clauses() {
178                    List<org.apache.lucene.search.BooleanClause> luceneClauses =
179                            _booleanQuery.clauses();
180    
181                    List<BooleanClause> clauses = new ArrayList<BooleanClause>(
182                            luceneClauses.size());
183    
184                    for (int i = 0; i < luceneClauses.size(); i++) {
185                            clauses.add(new BooleanClauseImpl(luceneClauses.get(i)));
186                    }
187    
188                    return clauses;
189            }
190    
191            public org.apache.lucene.search.BooleanQuery getBooleanQuery() {
192                    return _booleanQuery;
193            }
194    
195            public String toString() {
196                    return _booleanQuery.toString();
197            }
198    
199            private org.apache.lucene.search.BooleanQuery _booleanQuery;
200    
201    }