package eu.dnetlib.data.collective.manager.log;

import java.io.IOException;
import java.io.StringWriter;
import java.util.Properties;

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.Term;

/**
 * @author jochen
 *
 */
public class LogWriter extends AbstractIndexWriter{

	protected static String fieldId = "id";
	protected static String fieldTimestamp = "timestamp";
	protected static String fieldLogProperties = "properties";
	private static String fieldIdx = "idx";




	/**
	 * @param instanceId
	 * @param timeStamp
	 * @param logProperties
	 * @return
	 * @throws IOException
	 */
	protected Document getDocument(String instanceId, String timeStamp, Properties logProperties) throws IOException{
		StringWriter writer = new StringWriter();
		logProperties.store(writer, "");
		Document doc = new Document();
		doc.add(new Field(fieldId, instanceId, Field.Store.YES, Field.Index.NOT_ANALYZED));
		doc.add(new Field(fieldTimestamp, timeStamp, Field.Store.YES, Field.Index.NOT_ANALYZED));
		doc.add(new Field(fieldLogProperties, writer.toString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
 		writer.close();
		return doc;
	}
	
	/**
	 * @param instanceId
	 * @param timeStamp
	 * @param logProperties
	 * @throws IOException
	 */
	public void store(String instanceId, String timeStamp, Properties logProperties) throws IOException{
		Document doc = getDocument(instanceId, timeStamp, logProperties);
		Term term = new Term(fieldIdx, instanceId + "_" + timeStamp );
		indexWriter.updateDocument(term, doc);
		indexWriter.optimize();
		indexWriter.close();
	}
}
