package org.openedit.data.lucene;
import java.io.IOException;
import org.apache.lucene.facet.search.SearcherTaxonomyManager;
import org.apache.lucene.facet.search.SearcherTaxonomyManager.SearcherAndTaxonomy;
import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyWriter;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.SearcherFactory;
import org.apache.lucene.search.SearcherManager;
import com.openedit.OpenEditException;
public class LuceneConnectionManager
{
protected transient SearcherTaxonomyManager fieldSearcherTaxonomyManager;
protected transient SearcherManager fieldSearcherManager;
public LuceneConnectionManager(IndexWriter inWriter, boolean inB, SearcherFactory inSearcherFactory, DirectoryTaxonomyWriter inTaxonomyWriter)
{
try
{
if( inTaxonomyWriter != null)
{
fieldSearcherTaxonomyManager = new SearcherTaxonomyManager(inWriter,inB, inSearcherFactory, inTaxonomyWriter);
}
else
{
fieldSearcherManager = new SearcherManager(inWriter,inB, inSearcherFactory);
}
}
catch( IOException ex)
{
throw new OpenEditException(ex);
}
}
public void maybeRefresh()
{
try
{
if( fieldSearcherManager != null)
{
fieldSearcherManager.maybeRefresh();
}
else
{
fieldSearcherTaxonomyManager.maybeRefresh();
}
}
catch( IOException ex)
{
throw new OpenEditException(ex);
}
}
public LuceneConnection acquire()
{
try
{
LuceneConnection connection = new LuceneConnection();
if( fieldSearcherManager != null)
{
IndexSearcher searcher = fieldSearcherManager.acquire();
connection.setIndexSearcher(searcher);
}
else
{
SearcherAndTaxonomy st = fieldSearcherTaxonomyManager.acquire();
connection.setSearcherAndTaxonomy(st);
}
return connection;
}
catch( IOException ex)
{
throw new OpenEditException(ex);
}
}
public void release(LuceneConnection inConnection)
{
try
{
if( inConnection.getSearcherAndTaxonomy() == null)
{
fieldSearcherManager.release(inConnection.getIndexSearcher());
}
else
{
fieldSearcherTaxonomyManager.release(inConnection.getSearcherAndTaxonomy());
}
}
catch( IOException ex)
{
throw new OpenEditException(ex);
}
}
//
// else if( inManager instanceof SearcherManager )
// {
// return (IndexSearcher)((SearcherManager)inManager).acquire();
// }
}