/*
 * Transaction.java
 *
 * Created on 14 de agosto de 2004, 11:28
 */

package com.fenalco.utilities.database;

import java.util.Vector;

/**
 * Esta clase se encarga de encapsular una transacción, cuando se requieran ejecutar
 * varias consultas sql dentro de una transacción, se crea un onjeto de esta clase y
 * se le añaden las consultas; por último de llama al método execute, el cual ejecuta
 * la transacción.
 * @author andres
 */
public class Transaction
{
    
    /**
     * Vector que va a almacenar todas las consultas sql que vayan dentro de la
     * transacción
     */    
    private Vector sqls;
    
    /**
     * Crea una nueva instancia de esta clase
     */
    public Transaction()
    {
        sqls = new Vector();
    }
    
    /**
     * Adiciona un String sql a la transacción, el orden en el que se ejecutan las
     * instrucciones es el mismo usado para adicionarlas a la transacción.
     * @param sql Instrucción sql que se va a adicionar a la transacción
     */    
    public void addSql( String sql )
    {
        sqls.addElement( sql );
    }
    
    /**
     * Intenta ejecutar la transacción, si la transacción se ejecuta exitosamente
     * elimina todas las instrucciones que hacen parte de la transacción
     * @return booleano que indica si la transacción se pudo ejecutar o no. Si la transacción
     * se ejecuta correctamente todas las instrucciones que la componen son eliminadas,
     * en caso contrario las instrucciones permanecen.
     */    
    public boolean execute()
    {
        boolean res = false;
        try
        {
            SQLUtilities.executeOnTransaction( sqls );
            res = true;
        }
        catch( TransactionException e )
        {
            res = false;
            System.out.println( "Error ejecutando la transaccion --> " + e );
        }
        if( res )
        {
            sqls.removeAllElements();
        }
        return res;
    }
}
