package q02b.tag;



import es.ejie.frmk.infraestructura.traza.Q70Traza;

import es.ejie.frmk.presentacion.iu.taglib.html.Q70BaseHandlerTag;

import javax.servlet.jsp.JspException;

import org.apache.struts.util.RequestUtils;



import q02b.exe.utils.Q02bConstantes;

import q02b.exe.utils.Q02bFormatData;



abstract class Q02bBuscadorGenerico extends Q70BaseHandlerTag

{

	private static final long serialVersionUID = 1L;

	protected final static Q70Traza tr = Q70Traza.getSingleton();

	protected static final String COMPONENTE = "BUSCADOR_TAG";

	//Campos obligatorios

	private String javascriptCallerFunc;

	private String lanzamientoAuto; 

	private String modulo; 

    

	// Fijos y Prefijos 

    private String nombresFijosMapa ; 

    private String valoresFijosMapa ; 

    private String nombresPrefijosMapa ; 

    private String valoresPrefijosMapa ; 

    private String camposFijos ; 

    private String callBackFunctionJS ; 

   

	public Q02bBuscadorGenerico()

	{

		    	//Campos obligatorios

		        javascriptCallerFunc 	= null;

		        lanzamientoAuto			= null; 

		        modulo  				= "algo"; 

		        

		        //campos opcionales 

		        nombresFijosMapa     	= "";

		        valoresFijosMapa  		= ""; 

		        nombresPrefijosMapa		= ""; 

		        valoresPrefijosMapa		= ""; 

		        camposFijos 			= ""; 

		        callBackFunctionJS 		= "false"; 

	}

	

	

/*

    public int doStartTag()

    throws JspException

    {

    	if(tr.isTraceActive())

    		tr.trace(COMPONENTE, Q70TraceLevel.DEBUG, "Generando tag de tipo " + getClass().toString());

    	return 1;

	}



    public int doEndTag()

    throws JspException

    {

    	verifyAtributes();

    	//String s = Q02bbJavascriptUtils.renderBuscadorContactosHtmlCode((HttpServletRequest)pageContext.getRequest(), this);

    	//ResponseUtils.write(pageContext, s);

    	super.putBridgeCounter();

    	return 6;

	}

*/

	

	//MÉTODOS GET Y SET

    //Campos obligatorios

		    public String getJavascriptCallerFunc(){

		        return javascriptCallerFunc;

		    }

		    public void setJavascriptCallerFunc(String s){

		        javascriptCallerFunc = s;

		    }

	

		    public void release()

		    {

		        super.release();

		    }

		    

		    protected void verifyAtributes() throws JspException

		    {

		        if(Q02bFormatData.esVacio(this.javascriptCallerFunc))

		        {

		            JspException jspexception = new JspException("Debe especificar un valor para el atributo javascriptCallerFunc.");

		            RequestUtils.saveException(pageContext, jspexception);

		            throw jspexception;

		        }

		        

		        if(Q02bFormatData.esVacio(this.lanzamientoAuto))

		        {

		            JspException jspexception = new JspException("Debe especificar un valor para el atributo lanzamientoAuto.");

		            RequestUtils.saveException(pageContext, jspexception);

		            throw jspexception;

		        }

		 

		    }





			public String getNombresFijosMapa() {

				return nombresFijosMapa;

			}



			public void setNombresFijosMapa(String nombresFijosMapa) {

				this.nombresFijosMapa = nombresFijosMapa;

			}



			public String getNombresPrefijosMapa() {

				return nombresPrefijosMapa;

			}



			public void setNombresPrefijosMapa(String nombresPrefijosMapa) {

				this.nombresPrefijosMapa = nombresPrefijosMapa;

			}



			public String getValoresFijosMapa() {

				return valoresFijosMapa;

			}



			public void setValoresFijosMapa(String valoresFijosMapa) {

				this.valoresFijosMapa = valoresFijosMapa;

			}



			public String getValoresPrefijosMapa() {

				return valoresPrefijosMapa;

			}



			public void setValoresPrefijosMapa(String valoresPrefijosMapa) {

				this.valoresPrefijosMapa = valoresPrefijosMapa;

			}





			public String getLanzamientoAuto() {

				return lanzamientoAuto;

			}



			public void setLanzamientoAuto(String lanzamientoAuto) {

				this.lanzamientoAuto = lanzamientoAuto;

			}



			

			public String encadenaFijoPrejos (String CAMPO_INDINACTIVO) {

				

	            StringBuffer tempStrBuffer = new StringBuffer();

				

	            // Se pone indInactivo a prefijo 0, si nungun valor ha sido propuesto en el tag

	            // De esta manera evitamos que el filtro llegue vacio en el caso de 

	            // un listado auto true         

	            

	            if (nombresFijosMapa.indexOf(CAMPO_INDINACTIVO) == -1 && 

	            		nombresPrefijosMapa.indexOf(CAMPO_INDINACTIVO) == -1) {

	           		

	        			if (nombresPrefijosMapa.compareTo("") != 0 ){

	        				nombresPrefijosMapa+=",";
                        }


	        			if (valoresPrefijosMapa.compareTo("") != 0 ){

	        				valoresPrefijosMapa+=",";
                        }


	        			nombresPrefijosMapa+=CAMPO_INDINACTIVO;

	        			valoresPrefijosMapa+=Q02bConstantes.REGISTRO_INACTIVO ;   	

	            }            

				

	            // CAMPOS PREFIJOS 

	            encadenaCamposDynamicos ( tempStrBuffer , nombresPrefijosMapa , valoresPrefijosMapa , ",", "&"  ,"'" );    



	            // CAMPOS FIJOS       

	            if (nombresFijosMapa.compareTo("") != 0 ){

	            	tempStrBuffer.append("+");  
                }
	            

	            encadenaCamposDynamicos ( tempStrBuffer ,nombresFijosMapa , valoresFijosMapa , ",", "&" ,"'" );  

	              

	            return tempStrBuffer.toString() ; 



				

			}  ; 

			

			public String getCamposFijos() {

				//return camposFijos;

				String returnValue = "" ; 

				

				if ( camposFijos != "" && nombresFijosMapa != "" ) { 

					returnValue = camposFijos + "," + nombresFijosMapa ; 

				}

				else {

					if ( camposFijos != "" ){ 

						returnValue = camposFijos ; 
                    }
					

					if ( nombresFijosMapa != "" ){

						returnValue = nombresFijosMapa ; 
                    }
				}		

				

				return returnValue; 

			}



			public void setCamposFijos(String camposFijos) {

				this.camposFijos = camposFijos;

			}



			public String getCallBackFunctionJS() {

				return callBackFunctionJS;

			}



			public void setCallBackFunctionJS(String callBackFunctionJS) {

				this.callBackFunctionJS = callBackFunctionJS;

			}

			

			/* esta funcion desvuelve una cadena de tipo 

		     * 

		     *  'A={A}&B={B}'    

		     * 

		     */

		    private static void encadenaCamposDynamicos ( StringBuffer strbuf, String CadenaNombres, String CadenaValores, String SEPARADOR , String SEPARADOR_WEB, String STRING_LIMITADOR ) {

		    	

		    	//variables de trabajo para los campos fijos y prefijos, se inician con tamaños distintos en caso de que 

		    	// el tag este mal escrito 

		    	

		    	String [] nombres = new String [1]; 

		        String [] valores = new String [2];     	   	

		    	

		        // Ponemos los nombres en un Array de String 

		        if (!Q02bFormatData.esVacio(CadenaNombres)){

		        	nombres = CadenaNombres.split(SEPARADOR);

		        } 

		        

		        // Ponemos los valores en un Array de String 

		        if (!Q02bFormatData.esVacio(CadenaValores)){

		        	valores = CadenaValores.split(SEPARADOR);

		        } 



		        // Los 2 arrays deben tener el mismo tamaño 

		        if (valores.length  ==  nombres.length  && nombres.length > 0 )  { 

		        	strbuf.append(STRING_LIMITADOR); 



		            for (int i = 0 ; i < valores.length  ; i++ ) { 

		            	if ( nombres[i] != "" &&  valores[i] != "" ){

		    				strbuf.append(SEPARADOR_WEB);

		            		strbuf.append(nombres[i]).append("="); 

		    				strbuf.append(valores[i]);

		            	}

		            }   	

		            

		        	strbuf.append(STRING_LIMITADOR);

		        }

		    }     // encadenaCamposDynamicos 





			public String getModulo() {

				return modulo;

			}





			public void setModulo(String modulo) {

				this.modulo = modulo;

			}

		    

		    public String getRamaJSP() {

		    	

		    	if (this.modulo.toUpperCase().compareTo("COMUN")== 0 ){

		    		return "buscadoresJSP" ; 
                }
		    	else{ 

		    		return "comunJSP" ;
                }
		    } 

}