KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > mvnforum > search > IntegerFilter


1 /*
2  * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/search/IntegerFilter.java,v 1.8 2006/04/14 17:05:27 minhnn Exp $
3  * $Author: minhnn $
4  * $Revision: 1.8 $
5  * $Date: 2006/04/14 17:05:27 $
6  *
7  * ====================================================================
8  *
9  * Copyright (C) 2002-2006 by MyVietnam.net
10  *
11  * All copyright notices regarding mvnForum MUST remain
12  * intact in the scripts and in the outputted HTML.
13  * The "powered by" text/logo with a link back to
14  * http://www.mvnForum.com and http://www.MyVietnam.net in
15  * the footer of the pages MUST remain visible when the pages
16  * are viewed on the internet or intranet.
17  *
18  * This program is free software; you can redistribute it and/or modify
19  * it under the terms of the GNU General Public License as published by
20  * the Free Software Foundation; either version 2 of the License, or
21  * any later version.
22  *
23  * This program is distributed in the hope that it will be useful,
24  * but WITHOUT ANY WARRANTY; without even the implied warranty of
25  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26  * GNU General Public License for more details.
27  *
28  * You should have received a copy of the GNU General Public License
29  * along with this program; if not, write to the Free Software
30  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
31  *
32  * Support can be obtained from support forums at:
33  * http://www.mvnForum.com/mvnforum/index
34  *
35  * Correspondence and Marketing Questions can be sent to:
36  * info at MyVietnam net
37  *
38  * @author: Phong Ta Quoc
39  */

40 package com.mvnforum.search;
41
42 import java.io.IOException JavaDoc;
43 import java.util.BitSet JavaDoc;
44
45 import org.apache.lucene.index.IndexReader;
46 import org.apache.lucene.index.Term;
47 import org.apache.lucene.index.TermDocs;
48 import org.apache.lucene.index.TermEnum;
49 import org.apache.lucene.search.Filter;
50
51 /**
52  * A Filter that restricts search results to a range of integer.
53  *
54  * <p>
55  * For this to work, documents must have been indexed with a
56  */

57 public class IntegerFilter extends Filter {
58     String JavaDoc field;
59     String JavaDoc start = intToString(0);
60     String JavaDoc end = intToString(Integer.MAX_VALUE);
61
62     private IntegerFilter(String JavaDoc f) {
63         field = f;
64     }
65
66     /**
67      * Constructs a filter for field <code>f</code> matching Integers between
68      * <code>from</code> and <code>to</code> inclusively.
69      */

70     public IntegerFilter(String JavaDoc field, int from, int to) {
71         this.field = field;
72         start = intToString(from);
73         end = intToString(to);
74     }
75
76     /**
77      * Constructs a filter for field <code>f</code> matching Integers between
78      * <code>from</code> and <code>to</code> inclusively.
79      */

80     public IntegerFilter(String JavaDoc field, Integer JavaDoc from, Integer JavaDoc to) {
81         this.field = field;
82         start = intToString(from.intValue());
83         end = intToString(to.intValue());
84     }
85
86     /**
87      * Constructs a filter for field <code>f</code> matching Integers on or
88      * more than <code>Integer</code>.
89      */

90     public static IntegerFilter greaterThan(String JavaDoc field, Integer JavaDoc i) {
91         IntegerFilter result = new IntegerFilter(field);
92         result.start = intToString(i.intValue());
93         return result;
94     }
95
96     /**
97      * Constructs a filter for field <code>f</code> matching Integers on or
98      * more than <code>Integer</code>.
99      */

100     public static IntegerFilter greaterThan(String JavaDoc field, int i) {
101         IntegerFilter result = new IntegerFilter(field);
102         result.start = intToString(i);
103         return result;
104     }
105
106     /**
107      * Constructs a filter for field <code>f</code> matching integers on or
108      * less than <code>Integer</code>.
109      */

110     public static IntegerFilter lessThan(String JavaDoc field, Integer JavaDoc i) {
111         IntegerFilter result = new IntegerFilter(field);
112         result.end = intToString(i.intValue());
113         return result;
114     }
115
116     /**
117      * Constructs a filter for field <code>f</code> matching Integers on or
118      * more than <code>Integer</code>.
119      */

120     public static IntegerFilter lessThan(String JavaDoc field, int i) {
121         IntegerFilter result = new IntegerFilter(field);
122         result.end = intToString(i);
123         return result;
124     }
125
126     public static String JavaDoc intToString(int i) {
127         return Integer.toString(i, Character.MAX_RADIX);
128     }
129
130     public static int stringToInt(String JavaDoc i) {
131         return Integer.parseInt(i, Character.MAX_RADIX);
132     }
133
134     /**
135      * Returns a BitSet with true for documents which should be permitted in
136      * search results, and false for those that should not.
137      */

138     public BitSet JavaDoc bits(IndexReader reader) throws IOException JavaDoc {
139         BitSet JavaDoc bits = new BitSet JavaDoc(reader.maxDoc());
140         TermEnum enumerator = reader.terms(new Term(field, start));
141         TermDocs termDocs = reader.termDocs();
142         if (enumerator.term() == null) {
143             return bits;
144         }
145         try {
146             Term stop = new Term(field, end);
147             while (enumerator.term().compareTo(stop) <= 0) {
148                 termDocs.seek(enumerator.term());
149                 while (termDocs.next()) {
150                     bits.set(termDocs.doc());
151                 }
152                 if (!enumerator.next()) {
153                     break;
154                 }
155             }
156         } finally {
157             enumerator.close();
158             termDocs.close();
159         }
160         return bits;
161     }
162
163     public String JavaDoc toString() {
164         StringBuffer JavaDoc buffer = new StringBuffer JavaDoc();
165         buffer.append(field);
166         buffer.append(":");
167         buffer.append(start);
168         buffer.append("-");
169         buffer.append(end);
170         return buffer.toString();
171     }
172 }
173
Popular Tags