/*
 * Message.java
 *
 * Created on 20 de septiembre de 2004, 12:48 PM
 */

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;

/**
 * Esta clase representa la tabla mensaje de la base de datos y encapsula cada
 * una de las operaciones que sobre esta se puedan realizar : inserción,
 * actualización, eliminación, consulta
 * 
 * @author Mario Linares Vásquez
 */
public class Message
{

	private int id;

	private String message;

	/**
	 * Constructor por omisión de la clase. Se debe usar para el caso de
	 * insertar un nuevo mensaje en la base de datos
	 */
	public Message( )
	{
		message = "";

	}

	/**
	 * Constructor que recibe el id del mensaje del sistema en la base de datos.
	 * Se debe usar en el caso de actualizaciones, borrado y consulta. Este
	 * constructor llama a la función miembro <CODE>loadData</CODE> con el
	 * parámetro id con el fin de cargar los datos propios del mensaje del
	 * sistema que residen en la base de datos. Al usar este constructor si se
	 * desea modificar el valor de algún campo se deben utilizar los métodos
	 * consultores (setter).
	 * 
	 * @param id
	 *            int que representa el id del mensaje del sistema en la base de
	 *            datos
	 */
	public Message( int id)
	{
		this();
		this.loadData(id);
	}

	/**
	 * Este método carga de la tabla mensaje de la base de datos todos los
	 * valores de los campos en los atributos de la clase, a través del método
	 * <CODE>query</CODE> de la clase <CODE>SQLUtilities</CODE>
	 * 
	 * @return boolean que representa el exito del proceso de carga de los datos
	 * @param id
	 *            identificador del item de ayuda del sistema
	 */
	public boolean loadData( int id )
	{
		// TODO: implement
		Vector result = new Vector();
		String sql = "SELECT mens_expresion" + "FROM mensaje "
				+ "WHERE mens_id=" + id + ";";
		try
		{
			result = SQLUtilities.query(sql);

			Hashtable parameter = (Hashtable) result.elementAt(0);

			this.setId(id);
			this.setMessage((String) parameter.get("mens_expresion"));

		}
		catch (QueryException qe)
		{
			return false;
		}

		return true;
	}

	/**
	 * Este método guarda los atributos del mensaje en la base de datos. Se debe
	 * usar solo cuando se ha creado una instancia con el constructor por
	 * omisión. Para almacenar los datos en la tabla mensaje debe construir una
	 * consulta SQL de tipo <B>insert </B> y la adiciona a la transacción con el
	 * método <CODE>addSql</CODE>
	 * 
	 * @return boolean que representa el exito del proceso de inserción
	 * @param transaction
	 *            la transacción que se está ejecutando
	 */
	public boolean saveData( Transaction transaction )
	{
		int nextId;
		boolean flag = true;

		try
		{
			nextId = SQLUtilities.getNextId("mensaje", "mens_id");
			String sql = "INSERT INTO mensaje VALUES(" + nextId + ",\'"
					+ this.getMessage() + "\');";

			transaction.addSql(sql);
		}
		catch (QueryException qe)
		{
			System.out
					.println("QueryException en Message-->" + qe.getMessage());
			flag = false;
		}

		return flag;
	}

	/**
	 * Realiza una consulta SQL de tipo update con el fin de actualizar los
	 * campos del parámetro del sistema modificados a través de los métodos
	 * setter.Para actualizar los datos en la tabla parametros_sistema debe
	 * construir una consulta SQL de tipo <B>update </B> y la adiciona a la
	 * transacción con el método <CODE>addSql</CODE>
	 * 
	 * @return boolean que representa el exito del proceso de actualización
	 * @param transaction
	 *            la transacción que se está ejecutando
	 */
	public boolean update( Transaction transaction )
	{
		// TODO: implement
		String sql = "UPDATE mensaje SET " + "mens_expresion=\'"
				+ this.getMessage() + "\' WHERE mens_id=" + this.getId() + ";";

		transaction.addSql(sql);

		return true;
	}

	/**
	 * Realiza una consulta SQL de tipo delete con el fin de eliminar el item de
	 * ayuda de la base de datos cuando se creo la instancia con el constructor
	 * que recibe el id como parámetro.Para eliminar los datos en la tabla ayuda
	 * debe construir una consulta SQL de tipo <B>deletete </B> y la adiciona a
	 * la transacción con el método <CODE>addSql</CODE>
	 * 
	 * @return boolean que representa el exito del proceso de borrado
	 * @param transaction
	 *            la transacción que se está ejecutando
	 */
	public boolean delete( Transaction transaction )
	{

		String sql = "DELETE FROM mensaje WHERE mens_id=" + this.getId() + ";";
		transaction.addSql(sql);

		return true;
	}

	/**
	 * Consultor para el atributo id.
	 * 
	 * @return Valor del atributo id.
	 */
	public int getId( )
	{
		return id;
	}

	/**
	 * Modificador para el atributo id.
	 * 
	 * @param id
	 *            Nuevo valor del atributo id.
	 */
	public void setId( int id )
	{
		this.id = id;
	}

	/**
	 * Consultor para el atributo message.
	 * 
	 * @return Valor del atributo message.
	 */
	public java.lang.String getMessage( )
	{
		return message;
	}

	/**
	 * Modificador para el atributo message.
	 * 
	 * @param message
	 *            Nuevo valor del atributo message.
	 */
	public void setMessage( java.lang.String message )
	{
		this.message = message;
	}

}