package org.ariadne_eu.metadata.insert; import java.io.File; import java.io.IOException; import net.sourceforge.minor.lucene.core.service.IndexService; import org.apache.log4j.Logger; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.store.FSDirectory; import org.ariadne.config.PropertiesManager; import org.ariadne_eu.utils.config.RepositoryConstants; import org.ariadne_eu.utils.lucene.analysis.DocumentAnalyzer; import org.ariadne_eu.utils.lucene.analysis.DocumentAnalyzerFactory; /** * Created by ben * Date: 25-aug-2007 * Time: 12:21:35 * To change this template use File | Settings | File Templates. */ public class InsertMetadataLuceneImpl extends InsertMetadataImpl { private static Logger log = Logger.getLogger(InsertMetadataLuceneImpl.class); private File indexDir; public InsertMetadataLuceneImpl() { initialize(); } public InsertMetadataLuceneImpl(int language) { setLanguage(language); initialize(); } void initialize() { super.initialize(); try { String indexDirString = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().SR_LUCENE_INDEXDIR + "." + getLanguage()); if (indexDirString == null) indexDirString = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().SR_LUCENE_INDEXDIR); if (indexDirString == null) log.error("initialize failed: no " + RepositoryConstants.getInstance().SR_LUCENE_INDEXDIR + " found"); indexDir = new File(indexDirString); if (!indexDir.isDirectory()) log.error("initialize failed: " + RepositoryConstants.getInstance().SR_LUCENE_INDEXDIR + " invalid directory"); //TODO: check for valid lucene index } catch (Throwable t) { log.error("initialize: ", t); } } @Override public synchronized void insertMetadata(String identifier, String metadata, String collection) throws InsertMetadataException { insertMetadata(identifier, metadata, new String[] {collection}); } public synchronized void insertMetadata(String identifier, String metadata, String[] collection) throws InsertMetadataException{ try { InsertDelegateSingleStringImpl indexInserterDelegate = new InsertDelegateSingleStringImpl(identifier, metadata,collection); boolean create = createIndex(indexDir); IndexService.insert(indexDir, indexInserterDelegate, create); log.info("insertMetadata:identifier:\"" + identifier + "\""); } catch (Exception e) { log.error("insertMetadata:identifier:\"" + identifier + "\" ", e); throw new InsertMetadataException(e); } } public void optimizeLuceneIndex() { try { IndexService.optimize(indexDir); } catch (Exception e) { log.error("optimizeLuceneIndex:indexDir:\"" + indexDir + "\" ", e); } } public boolean createIndex(File indexDir) throws IOException { return !(IndexReader.indexExists(FSDirectory.open(indexDir))); } public void createLuceneIndex() { IndexWriter writer = null; try { DocumentAnalyzer analyzer = DocumentAnalyzerFactory.getDocumentAnalyzerImpl(); writer = new IndexWriter(FSDirectory.open(indexDir), analyzer.getAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED); writer.setUseCompoundFile(true); writer.optimize(); } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } finally { if (writer != null) { try { writer.close(); } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } } } public File getIndexDir() { return indexDir; } }