/*
 * Zone.java
 *
 * Created on 30 de septiembre de 2004, 19:05
 */

package com.fenalco.entities;

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

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

/**
 * 
 * @author Juan Ernesto Peña Kaltekis
 */
public class Zone
{

	/**
	 * id de la zona en la base de datos
	 */
	private int id;

	/**
	 * Nombre de la zona
	 */
	private String name;

	/**
	 * id de la ciudad
	 */
	private int city;

	/** Constructor por defecto del la clase */
	public Zone( )
	{
	}

	/**
	 * Constructor de la clase
	 * 
	 * @param id
	 *            id del zona en la base de datos
	 */
	public Zone( int id)
	{
		this.id = id;
		loadData(id);
	}

	/**
	 * Operación para guardar el objeto de base de datos
	 * 
	 * @return booleano quer indica el éxito de la operación
	 */
	public boolean loadData( int id )
	{

		try
		{
			Vector results = new Vector();
			results = SQLUtilities
					.query("SELECT zona_nombre, ciud_id FROM zona WHERE zona_id="
							+ id + ";");
			Hashtable datos = (Hashtable) results.elementAt(0);

			name = ((String) datos.get("zona_nombre"));
			city = (Integer.parseInt(datos.get("ciud_id").toString()));

		}
		catch (QueryException qe)
		{
			System.out.println(qe.getMessage());
			return false;
		}
		return true;

	}

	/**
	 * Operación para guardar el objeto de base de datos
	 * 
	 * @return booleano quer indica el éxito de la operación
	 */
	public boolean saveData( Transaction transaction )
	{
		id = this.hashCode();
		String sql = "INSERT INTO zona VALUES(" + id + "," + city + ",\'"
				+ name + "\');";
		transaction.addSql(sql);

		return true;
	}

	/**
	 * Operación para actualizar la sección en la base de datos
	 * 
	 * @return booleano que indica el éxito de la operación
	 */
	public boolean update( Transaction transaction )
	{
		return true;
	}

	/**
	 * Operación para eliminar la sección de la base de datos
	 * 
	 * @return booleano que indica el éxito de la operación
	 */
	public boolean delete( Transaction transaction )
	{

		boolean success = true;
		String sql1 = "SELECT zona_nombre FROM zona WHERE zona_id=" + id + ";";
		String sql2 = "SELECT * FROM barrio WHERE zona_id=" + id + ";";
		Vector result = new Vector();

		try
		{
			result = SQLUtilities.query(sql1);
			Hashtable temp = (Hashtable) result.elementAt(0);
			String name = (String) temp.get("zona_nombre");

			if( !name.equals("Indefinida") )
			{
				result = SQLUtilities.query(sql2);
				if( result != null && result.size() == 0 )
				{
					String sql = "DELETE FROM zona WHERE zona_id=" + id + ";";
					transaction.addSql(sql);
				}
				else
				{
					success = false;
				}
			}
			else
			{
				success = false;
			}
		}
		catch (QueryException qe)
		{
			System.out.println(qe);
		}

		return success;

	}

	/**
	 * Getter for property id.
	 * 
	 * @return Value of property id.
	 */
	public int getId( )
	{
		return id;
	}

	/**
	 * Setter for property id.
	 * 
	 * @param id
	 *            New value of property id.
	 */
	public void setId( int id )
	{
		this.id = id;
	}

	/**
	 * Getter for property name.
	 * 
	 * @return Value of property name.
	 */
	public java.lang.String getName( )
	{
		return name;
	}

	/**
	 * Setter for property name.
	 * 
	 * @param name
	 *            New value of property name.
	 */
	public void setName( java.lang.String name )
	{
		this.name = name;
	}

	/**
	 * Getter for property city.
	 * 
	 * @return Value of property city.
	 */
	public int getCity( )
	{
		return city;
	}

	/**
	 * Setter for property city.
	 * 
	 * @param city
	 *            New value of property city.
	 */
	public void setCity( int city )
	{
		this.city = city;
	}

}