/*
 * CompanyList.java
 * 
 * Created on 11 de agosto de 2004, 6:30
 */

/**
 *
 * @author  Juan Ernesto Peña Kaltekis
 *
 * Esta clase representa una lista de empresas
 * 
 * CONTROL DE CAMBIOS:
 *
 * Fecha        Autor       tipo        cambio      descripción
 *
 *
 */
package com.fenalco.entities;

import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;

import com.fenalco.utilities.database.QueryException;
import com.fenalco.utilities.database.SQLUtilities;

/**
 * Esta clase representa una lista de empresas
 */
public class CompanyList
{
	/**
	 * Es un Hashtable que tiene como llave un INTEGER que representa el id de
	 * una empresa, el objeto es de tipo <CODE>Company</CODE>
	 */
	private Hashtable companies;

	/**
	 * Constructor por defecto de la clase CompanyList
	 */
	public CompanyList( )
	{
		this.companies = new Hashtable();
		this.loadData();
	}

	/**
	 * Hace una consulta en la tabla empresa por medio del método <CODE>query
	 * </CODE> de la clase <CODE>SqlUtilities</CODE> para cargar la lista de
	 * empresas y llenar la variable companies con todas las empresas
	 * registradas en el sistema
	 * 
	 * @return Indica el éxito de la carga de las empresas
	 */
	public boolean loadData( )
	{
		boolean response = true;
		Vector result = new Vector();
		String sql = "SELECT empr_id FROM empresa ORDER BY empr_id ASC;";
		Hashtable aux = new Hashtable();
		try
		{

			//Consulta Base de datos
			result = SQLUtilities.query(sql);

			//Carga de objetos
			for( int i = 0; i < result.size(); i++ )
			{
				aux = (Hashtable) result.elementAt(i);
				this.companies.put((Integer) aux.get("empr_id"), new Company(
						((Integer) aux.get("empr_id")).intValue()));
			}
			;

		}
		catch (QueryException qe)
		{
			//System.out.println("Query error :"+qe);
			response = false;
		}

		return response;
	}

	/**
	 * Consultor para el atributo companies.
	 * 
	 * @return Valor para el atributo companies.
	 */
	public Hashtable getCompanies( )
	{
		return companies;
	}

	/**
	 * Modificador para el atributo companies.
	 * 
	 * @param companies
	 *            Nuevo valor para el atributo companies.
	 */
	public void setCompanies( Hashtable companies )
	{
		this.companies = companies;
	}

	/**
	 * Deja en la lista de empresas las empresas que cumplan con el criterio
	 * 
	 * @param companyType
	 *            Identifica el tipo de empresa que se desea buscar 0: nueva, 1:
	 *            minorista, 2: proveedor.
	 */
	public void filter( int companyType )
	{
		Enumeration keys = this.companies.keys();
		Company c;
		Integer currentKey;
		while( keys.hasMoreElements() )
		{
			currentKey = (Integer) keys.nextElement();
			c = (Company) companies.get(currentKey);
			if( c.getType() != companyType )
			{
				companies.remove(currentKey);
			}
		}

	}

	/**
	 * Deja en la lista de empresas las empresas que cumplan con el criterio
	 * 
	 * @param companyStatus
	 *            Identifica el estado que se desea buscar 1: nueva
	 */
	public void filterStatus( int companyStatus )
	{
		Enumeration keys = this.companies.keys();
		Company c;
		Integer currentKey;
		while( keys.hasMoreElements() )
		{
			currentKey = (Integer) keys.nextElement();
			c = (Company) companies.get(currentKey);
			if( c.getStatus() != companyStatus )
			{
				companies.remove(currentKey);
			}
		}
	}

	public static void main( String[] args )
	{
		CompanyList compa = new CompanyList();
		System.out.println(compa.getCompanies());
	}

}