Indexed.java

package sk.iway.iwcm.system.fulltext.indexed;

import static sk.iway.iwcm.system.fulltext.lucene.LuceneUtils.nvl;

import java.io.Writer;

import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.TermVector;
import org.apache.lucene.index.IndexWriter;

import sk.iway.iwcm.Logger;
import sk.iway.iwcm.common.AdminTools;
import sk.iway.iwcm.system.fulltext.lucene.IndexingMapper;
import sk.iway.iwcm.system.fulltext.lucene.LuceneUtils;


/**
 * Trieda
 * Indexed.java
 *
 *@Title webjet7
 *@Company Interway s.r.o. (www.interway.sk)
 *@Copyright Interway s.r.o. (c) 2001-2011
 *@author $Author: jeeff thaber $
 *@version $Revision: 1.3 $
 *@created Date: 6.4.2011 18:04:40
 *@modified $Date: 2004/08/16 06:26:11 $
 */
public abstract class Indexed
{
	/**
	 * vracia SQL vracajúce dokumenty. ktoré chcem indexovat
	 * @return
	 */
	public abstract String sql();
	/**
	 * vracia IndexingMapper, ktorý spracuje dodaný ResultSet a zapíše ho do dodaného writer-a
	 * @param writer
	 * @return
	 */
	public abstract IndexingMapper mapper(IndexWriter writer, Writer log);
	/**
	 * Vracia názov slúžiaci na identifikáciu dokumentu, používa sa pri vytváraní adresárov
	 * @return
	 */
	public abstract String name();
	/**
	 * Vracia názov poľa dokumentu, v ktorom sa bude vyhľadávať ak výraz neobsahuje pole v ktorom sa má hľadať
	 * @return
	 */
	public static String defaultField(){
		return "data";
	}

	public static String titleField(){
		return "title";
	}
	/**
	 * Počet všetkých dokumentov
	 * @return
	 */
	public abstract int numberOfDocuments();

	/**
	 * Jazyk indexovaných dokumentov
	 * @return
	 */
	public abstract String language();

	protected Callback callback;

	public static interface Callback{
		public void call();
	}

	/**
	 * @param callback The callback to set.
	 */
	public void setCallback(Callback callback)
	{
		this.callback = callback;
	}


	int numberOfIndexedDocuments = 0;

	public void proccessed()
	{
		callback.call();
		numberOfIndexedDocuments++;
		if (numberOfIndexedDocuments % 1000 == 0){
			Logger.println(this.getClass(), String.format("Indexed %d documents.",numberOfIndexedDocuments));
		}


	}

	public abstract void close();

	/**
	 * @deprecated - use AdminTools.defaultLanguage
	 * @return
	 */
	@Deprecated
	public static String defaultLanguage(){
		return AdminTools.defaultLanguage();
	}

	protected static Field urlField(String url){
		return new Field("url",nvl(url),Field.Store.YES,
					Field.Index.NO);
	}

	protected static Field titleField(String title){
		return new Field("title",LuceneUtils.nonNull(title),Field.Store.YES,
					Field.Index.ANALYZED,TermVector.WITH_POSITIONS_OFFSETS);
	}


}