ResultCriteria.java

package sk.iway.iwcm.components.news.criteria;

import java.util.LinkedList;
import java.util.List;

import sk.iway.iwcm.doc.DocDetails;

public abstract class ResultCriteria implements Criteria
{
	public abstract boolean filter(DocDetails doc);
	
	/**
	 * retazenie podmienok s OR - musi vyhovovat aspon jednemu kriteriu
	 * @param criterias
	 * @return
	 */
	public static ResultCriteria or(ResultCriteria...criterias)
	{
		return new OrCriteria(criterias);
	}
	
	/**
	 * retazenie podmienok s AND - musi vyhovovat vsetkym kriteriam
	 * @param criterias
	 * @return
	 */
	public static ResultCriteria and(ResultCriteria...criterias)
	{
		return new AndCriteria(criterias);
	}
	
	public static ResultCriteria perexNotEmpty()
	{
		return new PerexNotEmpty();
	}
	
	
	
	
	public static class OrCriteria extends ResultCriteria
	{

		private List<ResultCriteria> criterias = new LinkedList<ResultCriteria>();
		
		public OrCriteria(ResultCriteria...criterias)
		{
			if (criterias!=null)
			{
				for (ResultCriteria rc : criterias)
				{
					this.criterias.add(rc);
				}
			}
		}
		
		@Override
		public boolean filter(DocDetails doc)
		{
			for (ResultCriteria rc : criterias)
			{
				if (rc.filter(doc))
					return true;
			}
			return false;
		}
		
	}
	
	public static class AndCriteria extends ResultCriteria
	{

		private List<ResultCriteria> criterias = new LinkedList<ResultCriteria>();
		
		public AndCriteria(ResultCriteria...criterias)
		{
			if (criterias!=null)
			{
				for (ResultCriteria rc : criterias)
				{
					this.criterias.add(rc);
				}
			}
		}
		
		@Override
		public boolean filter(DocDetails doc)
		{
			for (ResultCriteria rc : criterias)
			{
				if (!rc.filter(doc))
					return false;
			}
			return true;
		}
		
	}
	
	/**
	 * Vyfiltruje len stranky ktore maju vyplneny perex 
	 */
	public static class PerexNotEmpty extends ResultCriteria
	{
		@Override
		public boolean filter(DocDetails doc)
		{
			if (doc.getHtmlData()!=null && doc.getHtmlData().length()>1)
			{
				return true;
			}
			return false;
		}
	}
}