package com.atrium.etiquetas;

import java.io.IOException;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;

import com.atrium.hibernate.Roles;
import com.atrium.hibernate.modelo.IGestion_Roles;
import com.atrium.spring.Acceso_ApplicationContext;

/**
 * Proceso de creacion dinamica de la lista de roles para la pagina de
 * administracion de usuarios, o para cualquier otra que lo necesite.
 * 
 * @author Roxana Ariza Sánchez.
 *
 */
public class Listas_Roles extends SimpleTagSupport implements Comparator<Roles> {

	/**
	 * Proceso de consulta y creacion de los roles dinamicamente de la base de
	 * datos.
	 */
	@Override
	public void doTag() throws JspException, IOException {
		// BUSCAMOS LA LISTA DE ROLES EN LA SESION PARA NO REPETIR EL PROCESO DE
		// CONSULTA Y OPTIMIZAR EL PROCESO
		List<Roles> lista_roles = (List<Roles>) getJspContext().getAttribute(
				"lista_roles", PageContext.SESSION_SCOPE);
		// SI NO EXISTE SE CONSULTA A LA BASE DE DATOS. SOLO LA PRIMERA VEZ
		if (lista_roles == null) {
			// PIDO LA FACHADA AL APPLICATION CONTEXT DE SPRING
			IGestion_Roles ges_roles = (IGestion_Roles) Acceso_ApplicationContext
					.getBean(IGestion_Roles.class);
			// CONSULTA DE LOS ROLES
			lista_roles = ges_roles.consultar_Todos();
			// ORDENACION DE LA RESPUESTA
			Collections.sort(lista_roles, this);
			// GUARDAMOS EL RESULTADO DE LA CONSULTA EN LA SESION PARA SUCESIVAS
			// RECARGAS DE LA PAGINA POR EL MISMO USUARIO
			getJspContext().setAttribute("lista_roles", lista_roles,
					PageContext.SESSION_SCOPE);
		}
		// SE GENERA EL CODIGO HTML NECESARIO EN CADA PETICION
		StringBuffer texto_pagina = new StringBuffer();
		// ABRIMOS EL COMBO
		texto_pagina.append("<select name='rol' id='rol'>\n");
		texto_pagina.append("<option value='-1'>Seleccione un rol</option>");
		for (Roles rol : lista_roles) {
			// CREAMOS EL CONTENIDO DEL COMBO CON LA INFORMACION DE LA CONSULTA
			texto_pagina.append("<option value='" + rol.getCodigoRol() + "'>"
					+ rol.getDescripcion() + "</option>\n");
		}
		// CERRAMOS EL COMBO
		texto_pagina.append("</select>\n");
		// ESCRIBIMOS EN LA PAGINA EL CODIGO HTML
		this.getJspContext().getOut().append(texto_pagina.toString());
	}

	/**
	 * Proceso de ordenacion de la coleccion de roles por descripcion en oreden
	 * ascendente.<br/>
	 * De esta forma se presetan al usuario de la misma forma.
	 */
	public int compare(Roles rol1, Roles rol2) {

		return 0;
	}

}
