LuceneUtils.java

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

import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;

import org.apache.commons.lang.StringUtils;
import org.apache.lucene.document.DateTools;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Fieldable;

import sk.iway.iwcm.Constants;
import sk.iway.iwcm.Logger;
import sk.iway.iwcm.Tools;


/**
 *  LuceneUtils.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: 18.5.2011 16:09:13
 *@modified     $Date: 2004/08/16 06:26:11 $
 */
public class LuceneUtils
{
	public static final String EMPTY = "EMPTY"; // poison
	public static final String DATE_MIN = "19700101"; // najmensi mozny datum
	public static final String DATE_MAX = "20990101"; // najvacsi mozny datum
	public static final String LUCENE_INDEX = Tools.getRealPath(Constants.getString("luceneIndexDir"));

	private LuceneUtils(){}

	public static String nvl(String value)
	{
		if (StringUtils.isBlank(value) || "null".equals(value) )
		{
			return LuceneUtils.EMPTY;
		}
		return value;
	}

	public static String nonNull(String value){
		if (value == null)
		{
			return "";
		}
		return value;
	}

	public static java.util.Date luceneDateToDate(String date)
	{
		if (EMPTY.equals(date))
			return null;
		try
		{
			return DateTools.stringToDate(date);
		}
		catch (ParseException e)
		{
			sk.iway.iwcm.Logger.error(e);
		}
		return null;
	}

	public static String timestampToLucene(long timestamp)
	{
		return DateTools.timeToString(timestamp, DateTools.Resolution.MINUTE);
	}

	public static String dateToLucene(java.sql.Date date)
	{
		if (date != null)
		{
			return timestampToLucene(date.getTime());
		}
		return null;
	}

	public static String dateToLucene(Timestamp date)
	{
		if (date != null)
		{
			return timestampToLucene(date.getTime());
		}
		return null;
	}

	/**
	 * Kontrola prazdnosti fieldu vratane prazdnosti hodnoty
	 * @param luceneDocument
	 * @param fieldName
	 * @return
	 */
	public static boolean isEmpty(Document luceneDocument, String fieldName)
	{
		Fieldable f = luceneDocument.getFieldable(fieldName);
		if (isEmpty(f)) return true;

		String value = luceneDocument.get(fieldName);
		if (LuceneUtils.EMPTY.equals(value)) return true;

		return Tools.isEmpty(value);
	}

	/**
	 * Pozor, toto netestuje hodnotu, ale len prazdny field
	 * @param f
	 * @return
	 */
	private static boolean isEmpty(Fieldable f)
	{
		if (f == null) return true;
		if (LuceneUtils.EMPTY.equals(f.stringValue())) return true;

		return false;
	}

	/**
	 * Pokusi sa sparsovat dany string podla poskytnuteho formatu, ak sa nieco pokazi tak vrati aktualny cas
	 * @param dateString
	 * @param df
	 * @return
	 */
	public static long getTimestamp(String dateString, DateFormat df)
	{
		long time = System.currentTimeMillis();
		try{
			time = df.parse(dateString).getTime();
		}
		catch(ParseException e){
			Logger.debug(LuceneUtils.class, "Failed to parse date string: " + dateString + " expected format: " + df);
		}
		return time;
	}
}