Package org.hibernate.search.test.configuration

Source Code of org.hibernate.search.test.configuration.SecurityFilterFactory$SecurityFilter

/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.test.configuration;

import java.io.IOException;

import org.apache.lucene.index.AtomicReader;
import org.apache.lucene.index.AtomicReaderContext;
import org.apache.lucene.index.DocsEnum;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.CachingWrapperFilter;
import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.Filter;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.OpenBitSet;
import org.hibernate.search.annotations.Factory;
import org.hibernate.search.annotations.Key;
import org.hibernate.search.filter.FilterKey;
import org.hibernate.search.filter.StandardFilterKey;

public class SecurityFilterFactory {

  private String ownerName;

  public void setOwnerName(String ownerName) {
    this.ownerName = ownerName;
  }

  @Factory
  public Filter buildSecurityFilter() {
    SecurityFilter securityFilter = new SecurityFilter(ownerName);
    return new CachingWrapperFilter(securityFilter);
  }

  @Key
  public FilterKey getKey() {
    StandardFilterKey key = new StandardFilterKey();
    key.addParameter( ownerName );
    return key;
  }

  private static final class SecurityFilter extends Filter {

    private final String ownerName;

    private SecurityFilter(final String ownerName) {
      this.ownerName = ownerName;
    }

    @Override
    public DocIdSet getDocIdSet(AtomicReaderContext context, Bits acceptDocs) throws IOException {
      final AtomicReader reader = context.reader();
      OpenBitSet bitSet = new OpenBitSet( reader.maxDoc() );
      DocsEnum termDocsEnum = reader.termDocsEnum( new Term( "owner", ownerName ) );
      if ( termDocsEnum == null ) {
        return bitSet;//All bits already correctly set
      }
      while ( termDocsEnum.nextDoc() != DocsEnum.NO_MORE_DOCS ) {
        final int docID = termDocsEnum.docID();
        if ( acceptDocs == null || acceptDocs.get( docID ) ) {
          bitSet.set( docID );
        }
      }
      return bitSet;
    }

  }

}
TOP

Related Classes of org.hibernate.search.test.configuration.SecurityFilterFactory$SecurityFilter

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.