package com.fp.dto.query;

import java.io.Serializable;

/**
 * Objeto que contiene filtros asociados a una tabla.
 *
 * @author Jorge Vaca.
 * @version 2.1
 */
public class Filter implements Serializable {
	
	private static final long serialVersionUID = -459214658769947266L;
	/**
	 * Nombre del campo perteneciente a la tabla o bean.
	 */
	private String field;
	/**
	 * Condicion a aplicar, si es null y el tipo de dato es String se toma like.
	 */
	private String condition;
	/**
	 * Valor de la condicion, si es diferente de null se considera en la sentencia.
	 */
	private String value;
	/**
	 * Valor de una condicion incluye campo y valor ejemplo:   t.modulecode = 12 or t.modulecode is null 
	 * Este valor es prioritario, si existe se adiciona al where.
	 */
	private String sql;
	
	/**
	 * Crea una instancia de FIlter.
	 */
	public Filter() {		
	}

	/**
	 * Crea una instancia de Filtro, Evalua la condicion del filtro que puede llegar en el nombre del campo ejemplo >=pk.cuidad.
	 * @param campo Nombre de un campo pertenceciente a un entity bean.
	 * @param valor Valor del criterio.
	 * @throws Exception
	 */
	public Filter(String field, String value) throws Exception {
		this.field = field;
		this.value = value;
		if(value.length() > 1){
			evaluadoscriterio(value.substring(0, 2));	
		}		
		if (condition == null && value.length() > 0) {
			evaluadoscriterio(value.substring(0, 1));
		}
	}

	/**
	 * Crea una instancia de Filtro.
	 * @param campo Nombre de un campo pertenceciente a un entity bean.
	 * @param valor Valor del criterio.
	 * @throws Exception
	 */
	public Filter(String field, String condition, String value) {
		this.field = field;
		this.condition = condition;
		this.value = value;
	}

	private void evaluadoscriterio(String cond) throws Exception {
		if (FilterTypes.getFilterTypes(cond) != null) {
			condition = cond;
			value = value.substring(cond.length(), value.length());
		}
	}

	/**
	 * Entrega el valor de: field
	 * @return String
	 */
	public String getField() {
		return field;
	}

	/**
	 * Fija el valor de: field 
	 * @param Valor a fijar en el atributo.
	 */
	public void setField(String field) {
		this.field = field;
	}

	/**
	 * Entrega el valor de: condition
	 * @return String
	 */
	public String getCondition() {
		return condition;
	}

	/**
	 * Fija el valor de: condition 
	 * @param Valor a fijar en el atributo.
	 */
	public void setCondition(String condition) {
		this.condition = condition;
	}

	/**
	 * Entrega el valor de: value
	 * @return String
	 */
	public String getValue() {
		return value;
	}

	/**
	 * Fija el valor de: value 
	 * @param Valor a fijar en el atributo.
	 */
	public void setValue(String value) {
		this.value = value;
	}

	/**
	 * Entrega el valor de: sql
	 * @return  String
	 */
	public String getSql() {
		return sql;
	}

	/**
	 * Fija el valor de: sql
	 * @param sql Valor a fijar en el atributo.
	 */
	
	public void setSql(String sql) {
		this.sql = sql;
	}

	

}

