Package org.hibernate.search.reader.impl

Source Code of org.hibernate.search.reader.impl.MultiReaderFactory

/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* Copyright (c) 2010, Red Hat, Inc. and/or its affiliates or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors.  All third-party contributions are
* distributed under license by Red Hat, Inc.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA  02110-1301  USA
*/
package org.hibernate.search.reader.impl;

import org.apache.lucene.index.IndexReader;

import org.hibernate.annotations.common.AssertionFailure;
import org.hibernate.search.indexes.spi.IndexManager;
import org.hibernate.search.indexes.spi.ReaderProvider;
import org.hibernate.search.util.logging.impl.Log;
import org.hibernate.search.util.logging.impl.LoggerFactory;

/**
* Creates and closes the IndexReaders encompassing multiple indexes.
*
* @author Sanne Grinovero <sanne@hibernate.org> (C) 2011 Red Hat Inc.
*/
public class MultiReaderFactory {
 
  private static final Log log = LoggerFactory.make();

  public static IndexReader openReader(IndexManager... directoryProviders) {
    final int length = directoryProviders.length;
    IndexReader[] readers = new IndexReader[length];
    ReaderProvider[] managers = new ReaderProvider[length];
    for (int index = 0; index < length; index++) {
      ReaderProvider indexReaderManager = directoryProviders[index].getIndexReaderManager();
      IndexReader openIndexReader = indexReaderManager.openIndexReader();
      readers[index] = openIndexReader;
      managers[index] = indexReaderManager;
    }
    return ReaderProviderHelper.buildMultiReader( length, readers, managers );
  }

  public static void closeReader(IndexReader multiReader) {
    if ( multiReader == null ) {
      return;
    }
    IndexReader[] readers;
    ReaderProvider[] managers;
    if ( multiReader instanceof CacheableMultiReader ) {
      CacheableMultiReader castMultiReader = ( CacheableMultiReader ) multiReader;
      readers = ReaderProviderHelper.getSubReadersFromMultiReader( castMultiReader );
      managers = castMultiReader.managers;
    }
    else {
      throw new AssertionFailure( "Everything should be wrapped in a CacheableMultiReader" );
    }
    log.debugf( "Closing MultiReader: %s", multiReader );
    for ( int i = 0; i < readers.length; i++ ) {
      ReaderProvider container = managers[i];
      container.closeIndexReader( readers[i] ); // might be virtual
    }
    log.trace( "IndexReader closed." );
  }

}
TOP

Related Classes of org.hibernate.search.reader.impl.MultiReaderFactory

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.