/**
* Copyright (C) 2010 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This software 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 software; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
* site: http://www.fsf.org.
*/
package org.xcmis.search.lucene.index;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriter.MaxFieldLength;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.util.Version;
import org.xcmis.search.config.IndexConfiguration;
import org.xcmis.search.config.IndexConfigurationException;
import org.xcmis.search.lucene.IndexRecoveryTool;
import org.xcmis.spi.utils.Logger;
import java.io.IOException;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
/**
* @author <a href="mailto:foo@bar.org">Foo Bar</a>
* @version $Id: exo-jboss-codetemplates.xml 34027 2009-07-15 23:26:43Z
* aheritier $
*/
public class LuceneIndexingService extends TransactionableIndexDataManager
{
/**
* @param indexConfuguration
* @param indexRecoveryTool
* @throws IndexException
* @throws IndexConfigurationException
*/
public LuceneIndexingService(IndexConfiguration indexConfuguration, IndexRecoveryTool indexRecoveryTool)
throws IndexException, IndexConfigurationException
{
super(indexConfuguration, indexRecoveryTool);
}
/** Class logger. */
private static final Logger LOG = Logger.getLogger(LuceneIndexingService.class);
/**
* {@inheritDoc}
*/
public boolean documentExists(final String uuid)
{
try
{
return super.getDocument(uuid) != null;
}
catch (IndexException e)
{
}
return false;
}
/**
* {@inheritDoc}
*/
public Set<String> getFieldNames() throws IndexException
{
final Set<String> fildsSet = new HashSet<String>();
@SuppressWarnings("unchecked")
final Collection fields = super.getIndexReader().getFieldNames(IndexReader.FieldOption.ALL);
for (final Object field : fields)
{
fildsSet.add((String)field);
}
return fildsSet;
}
protected void softCleanIndex() throws IndexException
{
if (getDocumentCount() > 0)
{
final Directory dir = getDirectory();
if (dir != null)
{
synchronized (dir)
{
try
{
final IndexWriter writer =
new IndexWriter(super.getDirectory(), new StandardAnalyzer(Version.LUCENE_35), MaxFieldLength.UNLIMITED);
writer.deleteDocuments(new MatchAllDocsQuery());
writer.commit();
writer.optimize();
writer.close();
}
catch (final CorruptIndexException e)
{
throw new IndexException(e.getLocalizedMessage(), e);
}
catch (final LockObtainFailedException e)
{
throw new IndexException(e.getLocalizedMessage(), e);
}
catch (final IOException e)
{
throw new IndexException(e.getLocalizedMessage(), e);
}
}
}
}
}
}