/* 
 * LogisticOperatorList.java
 *
 * Created on 12 de agosto de 2004, 11:36 --> fecha de creación del archivo
 */

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 el listado de operadores logísticos dentro del sistema,
 * permite obtener los datos todos los operadores agrupándolos en un solo
 * objeto.
 * 
 * @author Néstor Romero León
 */
public class LogisticOperatorList
{
	/**
	 * Este <CODE>Hashtable</CODE> agrupa los objetos del tipo <CODE>
	 * LogisticOperator</CODE> que conforman el listado, está diseñado de la
	 * siguiente forma: key: id del operador logístico <CODE>logisticOperatorId
	 * </CODE> value: Objeto del tipo <CODE>LogisticOperator</CODE>
	 */
	private Vector logisticOperators;

	public LogisticOperatorList( )
	{
		this.logisticOperators = new Vector();
		this.loadData();
	}

	/**
	 * Constructor que recibe como parámetro un identificador de ciudad dentro
	 * del sistema, con el cual carga un listado de los operadores logísticos de
	 * la ciudad especificada desde la base de datos llamando al método <CODE>
	 * loadData</CODE>.
	 * 
	 * Este constructor puede recibir el parámetro por defecto (-1) para cargar
	 * una lista de todos los operadores logísticos.
	 * 
	 * Este constructor será llamado a la hora de presentar un listado de
	 * operadores logísticos al usuario y al realizar búsquedas por ciudad sobre
	 * el mismo.
	 * 
	 * @param cityId
	 *            Identificador de la ciudad en la base de datos
	 */
	public LogisticOperatorList( int cityId)
	{
		// TODO: implement
		this.logisticOperators = new Vector();
		this.loadData(cityId);
	}

	public boolean loadData( )
	{
		// TODO: implement
		try
		{
			Vector results = new Vector();
			results = SQLUtilities.query("SELECT oper_logi_id, oper_logi_nombre " +
                                                    "FROM operador_logistico " +
                                                    "ORDER BY oper_logi_nombre " +
                                                    ";");
                        
			for( int i = 0; i < results.size(); i++ )
			{
				Hashtable temp = new Hashtable();
				temp = (Hashtable) results.elementAt(i);
				Integer key = (Integer) temp.get("oper_logi_id");
				//this.logisticOperators.put(key, new LogisticOperator(key.intValue()));
                                this.logisticOperators.addElement( new LogisticOperator( key.intValue() ) );
			}
		}
		catch (QueryException qe)
		{
			System.out.println(qe.getMessage());
			return false;
		}
		return true;
	}

	/**
	 * Método que realiza la operación de carga desde la base de datos hacia el
	 * objeto, este método utiliza el método <CODE>query</CODE> de la clase
	 * <CODE>SQLUtilities</CODE> para realizar la consulta sobre la base de
	 * datos.
	 * 
	 * Se recibe como parámetro un identificador de ciudad que representa ya sea
	 * a una ciudad en la base de datos o el parámetro por defecto (-1). Con
	 * este parámetro se carga un listado de los operadores de dicha ciudad o si
	 * se recibe el parámetro por defecto se carga un listado general de todos 
	 * los operadores logísticos.
	 * 
	 * @param cityId
	 *            Identificadorde la ciudad en la base de datos
	 * @return Valor booleano que indica si la operación tuvo éxito o no.
	 */
	public boolean loadData( int cityId )
	{
		// TODO: implement
		String sql = new String("SELECT oper_logi_id, oper_logi_nombre FROM operador_logistico ");
		if( cityId != -1 )
		{
			sql = sql.concat("WHERE ciud_id=" + cityId + " ");
		}

		sql = sql.concat("ORDER BY oper_logi_nombre;");
		try
		{
			Vector results = new Vector();
			results = SQLUtilities.query(sql);
			for( int i = 0; i < results.size(); i++ )
			{
				Hashtable temp = new Hashtable();
				temp = (Hashtable) results.elementAt(i);
				Integer key = (Integer) temp.get("oper_logi_id");
				//this.logisticOperators.put(key, new LogisticOperator(key.intValue()));
                                this.logisticOperators.addElement( new LogisticOperator( key.intValue() ) );
			}
		}
		catch (QueryException qe)
		{
			System.out.println(qe.getMessage());
			return false;
		}
		return true;
	}

	/**
	 * Consultor para el atributo logisticOperators.
	 * 
	 * @return Valor del atributo logisticOperators.
	 */
	public Vector getLogisticOperators( )
	{
		return this.logisticOperators;
	}

	/**
	 * Modificador para el atributo logisticOperators.
	 * 
	 * @param logisticOperators
	 *            Nuevo valor del atributo logisticOperators.
	 */
	public void setLogisticOperators( Vector logisticOperators )
	{
		this.logisticOperators = logisticOperators;
	}

	public static void main( String args[] )
	{
		LogisticOperatorList lol = new LogisticOperatorList(1);
		Enumeration e = lol.getLogisticOperators().elements();
		while( e.hasMoreElements() )
		{
			LogisticOperator lo = new LogisticOperator();
			lo = (LogisticOperator) e.nextElement();
			String s = lo.getName();
			String d = lo.getEmail();
			System.out.println("nombre: " + s);
			System.out.println("mail: " + d);
		}
	}

}