Package org.hibernate.search.filter

Source Code of org.hibernate.search.filter.ChainedFilter

// $Id: ChainedFilter.java 15536 2008-11-09 16:23:24Z sannegrinovero $
package org.hibernate.search.filter;

import java.util.BitSet;
import java.util.List;
import java.util.ArrayList;
import java.io.IOException;

import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.Filter;
import org.apache.lucene.index.IndexReader;
import org.hibernate.annotations.common.AssertionFailure;

/**
* @author Emmanuel Bernard
*/
public class ChainedFilter extends Filter {
 
  private static final long serialVersionUID = -6153052295766531920L;
 
  private final List<Filter> chainedFilters = new ArrayList<Filter>();

  public void addFilter(Filter filter) {
    this.chainedFilters.add( filter );
  }

  public BitSet bits(IndexReader reader) throws IOException {
    throw new UnsupportedOperationException();
    /*
    if (chainedFilters.size() == 0) throw new AssertionFailure("Chainedfilter has no filters to chain for");
    //we need to copy the first BitSet because BitSet is modified by .logicalOp
    Filter filter = chainedFilters.get( 0 );
    BitSet result = (BitSet) filter.bits( reader ).clone();
    for (int index = 1 ; index < chainedFilters.size() ; index++) {
      result.and( chainedFilters.get( index ).bits( reader ) );
    }
    return result;
    */
  }
 
  @Override
  public DocIdSet getDocIdSet(IndexReader reader) throws IOException {
    int size = chainedFilters.size();
    if ( size == 0 ) {
      throw new AssertionFailure( "Chainedfilter has no filters to chain for" );
    }
    else if ( size == 1 ) {
      return chainedFilters.get(0).getDocIdSet(reader);
    }
    else {
      List<DocIdSet> subSets = new ArrayList<DocIdSet>( size );
      for ( Filter f : chainedFilters ) {
        subSets.add( f.getDocIdSet( reader ) );
      }
      return new AndDocIdSet( subSets, reader.maxDoc() );
    }
  }

  public String toString() {
    StringBuilder sb = new StringBuilder("ChainedFilter [");
    for (Filter filter : chainedFilters) {
      sb.append( "\n  ").append( filter.toString() );
    }
    return sb.append("\n]" ).toString();
  }
}
TOP

Related Classes of org.hibernate.search.filter.ChainedFilter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.