/** * */ package com.browseengine.bobo.facets.filter; import java.io.IOException; import org.apache.lucene.search.DocIdSet; import org.apache.lucene.search.DocIdSetIterator; import org.apache.lucene.search.Filter; import com.browseengine.bobo.api.BoboSegmentReader; import com.browseengine.bobo.docidset.RandomAccessDocIdSet; public class SpatialFacetFilter extends RandomAccessFilter { private final Filter filter; public SpatialFacetFilter(Filter filter) { this.filter = filter; } /* * (non-Javadoc) * @see * com.browseengine.bobo.facets.filter.RandomAccessFilter#getRandomAccessDocIdSet(com.browseengine * .bobo.api.BoboIndexReader) */ @Override public RandomAccessDocIdSet getRandomAccessDocIdSet(BoboSegmentReader reader) throws IOException { DocIdSet docIdSet = filter.getDocIdSet(reader.getContext(), reader.getLiveDocs()); if (docIdSet == null) { return null; } return new SpatialDocIdSet(docIdSet); } private static final class SpatialDocIdSet extends RandomAccessDocIdSet { DocIdSet innerDocIdSet; SpatialDocIdSet(DocIdSet docIdSet) { innerDocIdSet = docIdSet; } @Override public boolean get(int docId) { try { if (docId >= innerDocIdSet.bits().length()) { return false; } return innerDocIdSet.bits().get(docId); } catch (IOException e) { return false; } } @Override public DocIdSetIterator iterator() throws IOException { return innerDocIdSet.iterator(); } } }