Clover Coverage Report
Coverage timestamp: Fri May 9 2008 10:54:27 EST
../../../../img/srcFileCovDistChart8.png 55% of files have more coverage
26   89   12   3.71
6   66   0.46   2.33
7     1.71  
3    
 
  PrefixFilter       Line # 16 11 5 50% 0.5
  IdGenerator       Line # 48 0 0 - -1.0
  PrefixGenerator       Line # 54 15 7 100% 1.0
 
  (1)
 
1    package org.apache.lucene.search;
2   
3    import org.apache.lucene.search.Filter;
4    import org.apache.lucene.index.Term;
5    import org.apache.lucene.index.IndexReader;
6    import org.apache.lucene.index.TermEnum;
7    import org.apache.lucene.index.TermDocs;
8   
9    import java.util.BitSet;
10    import java.io.IOException;
11   
12    /**
13    * @author yonik
14    * @version $Id$
15    */
 
16    public class PrefixFilter extends Filter {
17    protected final Term prefix;
18   
 
19  9 toggle public PrefixFilter(Term prefix) {
20  9 this.prefix = prefix;
21    }
22   
 
23  0 toggle public Term getPrefix() { return prefix; }
24   
 
25  9 toggle public BitSet bits(IndexReader reader) throws IOException {
26  9 final BitSet bitSet = new BitSet(reader.maxDoc());
27  9 new PrefixGenerator(prefix) {
 
28  12 toggle public void handleDoc(int doc) {
29  12 bitSet.set(doc);
30    }
31    }.generate(reader);
32  9 return bitSet;
33    }
34   
35    /** Prints a user-readable version of this query. */
 
36  0 toggle public String toString () {
37  0 StringBuffer buffer = new StringBuffer();
38  0 buffer.append("PrefixFilter(");
39  0 buffer.append(prefix.toString());
40  0 buffer.append(")");
41  0 return buffer.toString();
42    }
43    }
44   
45    // keep this protected until I decide if it's a good way
46    // to separate id generation from collection (or should
47    // I just reuse hitcollector???)
 
48    interface IdGenerator {
49    public void generate(IndexReader reader) throws IOException;
50    public void handleDoc(int doc);
51    }
52   
53   
 
54    abstract class PrefixGenerator implements IdGenerator {
55    protected final Term prefix;
56   
 
57  9 toggle PrefixGenerator(Term prefix) {
58  9 this.prefix = prefix;
59    }
60   
 
61  9 toggle public void generate(IndexReader reader) throws IOException {
62  9 TermEnum enumerator = reader.terms(prefix);
63  9 TermDocs termDocs = reader.termDocs();
64   
65  9 try {
66   
67  9 String prefixText = prefix.text();
68  9 String prefixField = prefix.field();
69  9 do {
70  18 Term term = enumerator.term();
71  18 if (term != null &&
72    term.text().startsWith(prefixText) &&
73    term.field() == prefixField)
74    {
75  12 termDocs.seek(term);
76  24 while (termDocs.next()) {
77  12 handleDoc(termDocs.doc());
78    }
79    } else {
80  6 break;
81    }
82  12 } while (enumerator.next());
83    } finally {
84  9 termDocs.close();
85  9 enumerator.close();
86    }
87    }
88    }
89