/**
 * 
 */
package com.ejie.t17i.filters;

import java.util.List;

import com.ejie.m62fb.utils.bean.BeanAccess;
import com.ejie.m62fb.utils.sql.FiltroWhereGen;
import com.ejie.m62fb.utils.sql.LikeInWhere;
import com.ejie.t17i.dao.CalleDaoSql;
import com.ejie.t17i.dao.TipoViaDaoSql;
import com.ejie.t17i.model.Calle;

/**
 * <p>
 * Clase que define el filtro para la entidad Calle de NORA
 * </p>
XXXX
 *  * 
 * @see com.ejie.t17i.model.Calle;
 */
public class CalleFilter extends FiltroWhereGen {

	private Calle calle;
	
	/**
	 * <p>Constructor</p> 
	 * @param calle Calle con los datos para filtrar
	 * @param params Lista de par&aacute;metros de la <code>SQL</code
	 * @param query Query <code>SQL</code> a modificar
	 * @param like Indica si hay que implementar <code>LIKE</code> y como
	 */
	public CalleFilter(final Calle calle,final List<Object> params,final StringBuilder query,final LikeInWhere like){
		super(params,query,like);
		this.calle=calle;
	}
	
	/**
	 * Devuelve la calle para filtrar
	 * @return La calle para filtrar
	 */
	public Calle getCalle() {
		return calle;
	}

	/**
	 * Establece la calle para filtrar
	 * @param calle La calle para filtrar
	 */
	public void setCalle(Calle calle) {
		this.calle = calle;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void generarWhereBE()
	{
		boolean bImplementar=this.like.isImplementar();
		this.like.setImplementar(false);
		//TIPO_VIA
		super.modificarQueryConWhere(CalleDaoSql.ALIAS + ".TIPO_VIA_ID = " +TipoViaDaoSql.ALIAS + ".ID (+)", null);
		//ID
		super.addFiltro(CalleDaoSql.ALIAS + ".ID = ? ", 
						new BeanAccess("calle.id",  this.calle), 
						FiltroWhereGen.AND);
		//CALLE_COD
		super.addFiltro(CalleDaoSql.ALIAS + ".CALLE_COD = ? ", 
				new BeanAccess("calle.calleCod",  this.calle), 
				FiltroWhereGen.AND);
		//ESTADO
		super.addFiltro(CalleDaoSql.ALIAS + ".ESTADO = ? ", 
				new BeanAccess("calle.estado",  this.calle), 
				FiltroWhereGen.AND);
		
		//MUNICIPIO_ID
		super.addFiltro(CalleDaoSql.ALIAS + ".MUNICIPIO_ID = ? ", 
				new BeanAccess("calle.municipio.id",  this.calle), 
				FiltroWhereGen.AND);
		//PROVINCIA_ID
		super.addFiltro(CalleDaoSql.ALIAS + ".PROVINCIA_ID = ? ", 
				new BeanAccess("calle.municipio.provincia.id",  this.calle), 
				FiltroWhereGen.AND);
		//TIPO_VIA_ID
		super.addFiltro(CalleDaoSql.ALIAS + ".TIPO_VIA_ID = ? ", 
				new BeanAccess("calle.tipoVia.id",  this.calle), 
				FiltroWhereGen.AND);
		super.modificarQueryConWhere(")","");
		this.like.setImplementar(bImplementar);
		super.modificarQueryConWhere("WHERE 1=1","");
		//CALLE_DESC_EU || ' ' || TIPO_VIA_DESC_EU
		super.addFiltro("   (UPPER(CALLE_DESC_EU || ' ' || TIPO_VIA_DESC_EU) = ? ", 
				new BeanAccess("calle.nombreEu",  this.calle), 
				FiltroWhereGen.AND);
		//CALLE_DESC_EU
		super.addFiltro(" UPPER(CALLE_DESC_EU) = ? ", 
				new BeanAccess("calle.nombreEu",  this.calle), 
				FiltroWhereGen.OR);
		//CALLE_DESC_EU || '(' || TIPO_VIA_DESC_EU || ') '
		super.addFiltro(" UPPER( CALLE_DESC_EU || '(' || TIPO_VIA_DESC_EU || ') ' ) = ? ", 
				new BeanAccess("calle.nombreEu",  this.calle), 
				FiltroWhereGen.OR);
		//'(' || TIPO_VIA_DESC_EU || ') ' || CALLE_DESC_EU)
		super.addFiltro(" UPPER( '(' || TIPO_VIA_DESC_EU || ') ' || CALLE_DESC_EU) = ? )", 
				new BeanAccess("calle.nombreEu",  this.calle), 
				FiltroWhereGen.OR);
		
		//CALLE_DESC_ES || ' ' || TIPO_VIA_DESC_ES
		super.addFiltro(" (UPPER(CALLE_DESC_ES || ' ' || TIPO_VIA_DESC_ES) = ? ", 
				new BeanAccess("calle.nombreEs",  this.calle), 
				FiltroWhereGen.OR);
		//CALLE_DESC_ES
		super.addFiltro(" UPPER(CALLE_DESC_ES) = ? ", 
				new BeanAccess("calle.nombreEs",  this.calle), 
				FiltroWhereGen.OR);	
		//CALLE_DESC_ES || '(' || TIPO_VIA_DESC_ES || ') '
		super.addFiltro(" UPPER( CALLE_DESC_ES || '(' || TIPO_VIA_DESC_ES || ') ' ) = ? ", 
				new BeanAccess("calle.nombreEs",  this.calle), 
				FiltroWhereGen.OR);
		//'(' || TIPO_VIA_DESC_ES || ') ' || CALLE_DESC_ES)
		super.addFiltro(" UPPER( '(' || TIPO_VIA_DESC_ES || ') ' || CALLE_DESC_ES) = ? ", 
				new BeanAccess("calle.nombreEs",  this.calle), 
				FiltroWhereGen.OR);
		// TIPO_VIA_DESC_ES || ' ' || CALLE_DESC_ES)
		super.addFiltro(" UPPER( TIPO_VIA_DESC_ES || ' ' || CALLE_DESC_ES) = ? )", 
				new BeanAccess("calle.nombreEs",  this.calle), 
				FiltroWhereGen.OR);
	}

}
