com.egt.core.db.xdp.RecursoCachedRowSet.java Source code

Java tutorial

Introduction

Here is the source code for com.egt.core.db.xdp.RecursoCachedRowSet.java

Source

/*
 * Copyright (C) 2008, EGT Consultores, C.A.
 *
 * Este programa es software libre; usted puede redistribuirlo y/o modificarlo bajo los trminos
 * de la licencia "GNU General Public License" publicada por la Fundacin "Free Software Foundation".
 *
 * Este programa se distribuye con la esperanza de que pueda ser til, pero SIN NINGUNA GARANTIA;
 * vea la licencia "GNU General Public License" para obtener mas informacin.
 *
 */
package com.egt.core.db.xdp;

import com.egt.base.constants.CBM2;
import com.egt.commons.util.IntUtils;
import com.egt.commons.util.LongUtils;
import com.egt.commons.util.ThrowableUtils;
import com.egt.core.aplicacion.Bitacora;
import com.egt.core.aplicacion.ExcepcionAplicacion;
import com.egt.core.aplicacion.TLC;
import com.egt.core.constants.Global;
import com.egt.core.db.util.DBUtils;
import com.egt.core.enums.EnumOpcionZumNodo;
import com.sun.data.provider.RowKey;
import com.sun.sql.rowset.CachedRowSetXImpl;
import com.sun.sql.rowset.SyncResolverX;
import java.sql.Connection;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Hashtable;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.sql.rowset.spi.SyncProviderException;
import javax.sql.rowset.spi.SyncResolver;
import org.apache.commons.lang.StringUtils;

public class RecursoCachedRowSet extends CachedRowSetXImpl {

    private static final long serialVersionUID = 7869446608483773881L;

    /**
     * Conserva el valor de la propiedad inicializado.
     */
    private boolean inicializado;

    /**
     * Conserva el valor de la propiedad soloReferencia.
     */
    private boolean soloReferencia;

    /**
     * Conserva el valor de la propiedad filaEscogida.
     */
    private RowKey filaEscogida;

    /**
     * Conserva el valor de la propiedad identificacionFilaEscogida.
     */
    private Long identificacionFilaEscogida;

    /**
     * Conserva el valor de la propiedad numeroFilaEscogida.
     */
    private Integer numeroFilaEscogida;

    /**
     * Conserva el valor de la propiedad codigoFilaEscogida.
     */
    private String codigoFilaEscogida;

    /**
     * Conserva el valor de la propiedad tablaMaestro.
     */
    private String tablaMaestro;

    /**
     * Conserva el valor de la propiedad columnaMaestro.
     */
    private String columnaMaestro;

    /**
     * Conserva el valor de la propiedad columnaMaestroAnterior.
     */
    private String columnaMaestroAnterior;

    /**
     * Conserva el valor de la propiedad identificacionMaestro.
     */
    private Long identificacionMaestro;

    /**
     * Conserva el valor de la propiedad identificacionMaestroAnterior.
     */
    private Long identificacionMaestroAnterior;

    /**
     * Conserva el valor de la propiedad filasProcesadas.
     */
    private Map filasProcesadas;

    /**
     * Conserva el valor de la propiedad filasRemovidas.
     */
    private Map filasRemovidas;

    /**
     * Conserva el valor de la propiedad filasConflictivas.
     */
    private Map filasConflictivas;

    /**
     * Conserva el valor de la propiedad filasEliminadas.
     */
    private int filasEliminadas;

    /**
     * Conserva el valor de la propiedad filtroFuncionSelect.
     */
    private Long filtroFuncionSelect;

    /**
     * Conserva el valor de la propiedad filtroFuncionSelectAnterior.
     */
    private Long filtroFuncionSelectAnterior;

    /**
     * Conserva el valor de la propiedad filtroFuncionSelectModificado.
     */
    private boolean filtroFuncionSelectModificado;

    /**
     * Conserva el valor de la propiedad codigoFuncionSelect.
     */
    private String codigoFuncionSelect;

    /**
     * Conserva el valor de la propiedad codigoFuncionSelectAnterior.
     */
    private String codigoFuncionSelectAnterior;

    /**
     * Conserva el valor de la propiedad codigoFuncionSelectModificado.
     */
    private boolean codigoFuncionSelectModificado;

    /**
     * Conserva el valor de la propiedad nombreFuncionSelect.
     */
    private String nombreFuncionSelect;

    /**
     * Conserva el valor de la propiedad nombreFuncionSelectAnterior.
     */
    private String nombreFuncionSelectAnterior;

    /**
     * Conserva el valor de la propiedad nombreFuncionSelectModificado.
     */
    private boolean nombreFuncionSelectModificado;

    /**
     * Conserva el valor de la propiedad segmentoFuncionSelect.
     */
    private Long segmentoFuncionSelect;

    /**
     * Conserva el valor de la propiedad funcionSelect.
     */
    private long funcionSelect;

    /**
     * Conserva el valor de la propiedad funcionInsert.
     */
    private long funcionInsert;

    /**
     * Conserva el valor de la propiedad funcionUpdate.
     */
    private long funcionUpdate;

    /**
     * Conserva el valor de la propiedad funcionDelete.
     */
    private long funcionDelete;

    /**
     * Conserva el valor de la propiedad funcionBusinessProcess.
     */
    private long funcionBusinessProcess;

    /**
     * Conserva el valor de la propiedad funcionSelectAutorizada.
     */
    private boolean funcionSelectAutorizada;

    /**
     * Conserva el valor de la propiedad funcionInsertAutorizada.
     */
    private boolean funcionInsertAutorizada;

    /**
     * Conserva el valor de la propiedad funcionUpdateAutorizada.
     */
    private boolean funcionUpdateAutorizada;

    /**
     * Conserva el valor de la propiedad funcionDeleteAutorizada.
     */
    private boolean funcionDeleteAutorizada;

    /**
     * Conserva el valor de la propiedad funcionBusinessProcessAutorizada.
     */
    private boolean funcionBusinessProcessAutorizada;

    /**
     * Conserva el valor de la propiedad funcionSelectEjecutada.
     */
    private boolean funcionSelectEjecutada;

    /**
     * Conserva el valor de la propiedad funcionInsertEjecutada.
     */
    private boolean funcionInsertEjecutada;

    /**
     * Conserva el valor de la propiedad funcionUpdateEjecutada.
     */
    private boolean funcionUpdateEjecutada;

    /**
     * Conserva el valor de la propiedad funcionDeleteEjecutada.
     */
    private boolean funcionDeleteEjecutada;

    // <editor-fold defaultstate="collapsed">
    /**
     * Conserva el valor de la propiedad funcionBusinessProcessEjecutada.
     */
    //  private boolean funcionBusinessProcessEjecutada;
    // </editor-fold>
    /**/
    private boolean filtroEscondido;

    /**
     * Conserva el valor de la propiedad versionComandoSelect.
     */
    private long versionComandoSelect;

    /**
     * Conserva el valor de la propiedad versionComandoSelectAnterior.
     */
    private long versionComandoSelectAnterior;

    /**
     * Conserva el valor de la propiedad versionComandoInsert.
     */
    private long versionComandoInsert;

    /**
     * Conserva el valor de la propiedad criteriosBusqueda.
     */
    private String criteriosBusqueda;

    /**
     * Conserva el valor de la propiedad criteriosOrden.
     */
    private String criteriosOrden;

    /**
     * Conserva el valor de la propiedad comandoSelectAnsi.
     */
    private String comandoSelectAnsi;

    /**
     * Conserva el valor de la propiedad comandoSelectAnterior.
     */
    private String comandoSelectAnterior;

    /**
     * Conserva el valor de la propiedad opcionZumNodo.
     */
    private EnumOpcionZumNodo opcionZumNodo;

    //  /**
    //   * Conserva el valor de la propiedad segmentoKeyColumn.
    //   */
    //  private String segmentoKeyColumn;
    //
    //  /**
    //   * Conserva el valor de la propiedad segmentoFunctionName.
    //   */
    //  private String segmentoFunctionName;
    //
    private Map<String, Class<?>> columnTypes;

    /**
     * @return the columnTypes
     */
    public Map<String, Class<?>> getColumnTypes() {
        return columnTypes;
    }

    /**
     * Creates a new instance of RecursoCachedRowSet
     */
    public RecursoCachedRowSet() {
        super();
        this.init();
    }

    /**
     * Creates a new instance of RecursoCachedRowSet
     */
    public RecursoCachedRowSet(Hashtable env) throws SQLException {
        super(env);
        this.init();
    }

    private void init() {
        this.inicializado = false;
        this.soloReferencia = false;
        this.filaEscogida = null;
        this.identificacionFilaEscogida = null;
        this.numeroFilaEscogida = null;
        this.codigoFilaEscogida = null;
        this.tablaMaestro = null;
        this.columnaMaestro = null;
        this.columnaMaestroAnterior = null;
        this.identificacionMaestro = null;
        this.identificacionMaestroAnterior = null;
        this.filasProcesadas = new LinkedHashMap();
        this.filasRemovidas = new LinkedHashMap();
        this.filasConflictivas = new LinkedHashMap();
        this.filasEliminadas = 0;
        this.filtroFuncionSelect = null;
        this.filtroFuncionSelectAnterior = null;
        this.filtroFuncionSelectModificado = true;
        this.codigoFuncionSelect = null;
        this.codigoFuncionSelectAnterior = null;
        this.codigoFuncionSelectModificado = true;
        this.nombreFuncionSelect = null;
        this.nombreFuncionSelectAnterior = null;
        this.nombreFuncionSelectModificado = true;
        this.segmentoFuncionSelect = null;
        this.funcionSelect = -1L;
        this.funcionInsert = -1L;
        this.funcionUpdate = -1L;
        this.funcionDelete = -1L;
        this.funcionBusinessProcess = -1L;
        this.funcionSelectAutorizada = false;
        this.funcionInsertAutorizada = false;
        this.funcionUpdateAutorizada = false;
        this.funcionDeleteAutorizada = false;
        this.funcionBusinessProcessAutorizada = false;
        this.funcionSelectEjecutada = false;
        this.funcionInsertEjecutada = false;
        this.funcionUpdateEjecutada = false;
        this.funcionDeleteEjecutada = false;
        //      this.funcionBusinessProcessEjecutada = false;
        this.filtroEscondido = false;
        this.versionComandoSelect = 0L;
        this.versionComandoSelectAnterior = 0L;
        this.versionComandoInsert = 0L;
        this.criteriosBusqueda = null;
        this.criteriosOrden = null;
        this.comandoSelectAnsi = null;
        this.comandoSelectAnterior = null;
        this.opcionZumNodo = null;
        //      this.segmentoKeyColumn = null;
        //      this.segmentoFunctionName = null;
        this.columnTypes = new LinkedHashMap<>();
        //      this.initColumnTypes();
        this.setPrintStatements(false);
    }

    /**
     * Getter para propiedad inicializado.
     *
     * @return Valor de la propiedad inicializado.
     */
    boolean isInicializado() {
        return this.inicializado;
    }

    /**
     * Setter para propiedad inicializado.
     *
     * @param inicializado Nuevo valor de la propiedad inicializado.
     */
    void setInicializado(boolean inicializado) {
        this.inicializado = inicializado;
    }

    /**
     * Getter para propiedad soloReferencia.
     *
     * @return Valor de la propiedad soloReferencia.
     */
    boolean isSoloReferencia() {
        return soloReferencia;
    }

    /**
     * Setter para propiedad soloReferencia.
     *
     * @param soloReferencia Nuevo valor de la propiedad soloReferencia.
     */
    void setSoloReferencia(boolean soloReferencia) {
        this.soloReferencia = soloReferencia;
    }

    /**
     * Getter para propiedad filaEscogida.
     *
     * @return Valor de la propiedad filaEscogida.
     */
    RowKey getFilaEscogida() {
        return this.filaEscogida;
    }

    /**
     * Setter para propiedad filaEscogida.
     *
     * @param filaElegida Nuevo valor de la propiedad filaEscogida.
     */
    void setFilaEscogida(RowKey filaEscogida) {
        this.filaEscogida = filaEscogida;
    }

    /**
     * Getter para propiedad identificacionFilaEscogida.
     *
     * @return Valor de la propiedad identificacionFilaEscogida.
     */
    public Long getIdentificacionFilaEscogida() {
        return this.identificacionFilaEscogida;
    }

    /**
     * Setter para propiedad identificacionFilaEscogida.
     *
     * @param identificacionFilaEscogida Nuevo valor de la propiedad identificacionFilaEscogida.
     */
    void setIdentificacionFilaEscogida(Long identificacionFilaEscogida) {
        this.identificacionFilaEscogida = identificacionFilaEscogida;
    }

    /**
     * Getter para propiedad numeroFilaEscogida.
     *
     * @return Valor de la propiedad numeroFilaEscogida.
     */
    Integer getNumeroFilaEscogida() {
        return this.numeroFilaEscogida;
    }

    /**
     * Setter para propiedad numeroFilaEscogida.
     *
     * @param numeroFilaEscogida Nuevo valor de la propiedad numeroFilaEscogida.
     */
    void setNumeroFilaEscogida(Integer numeroFilaEscogida) {
        this.numeroFilaEscogida = numeroFilaEscogida;
    }

    /**
     * Getter para propiedad codigoFilaEscogida.
     *
     * @return Valor de la propiedad codigoFilaEscogida.
     */
    String getCodigoFilaEscogida() {
        return this.codigoFilaEscogida;
    }

    /**
     * Setter para propiedad codigoFilaEscogida.
     *
     * @param codigoFilaEscogida Nuevo valor de la propiedad codigoFilaEscogida.
     */
    void setCodigoFilaEscogida(String codigoFilaEscogida) {
        this.codigoFilaEscogida = codigoFilaEscogida;
    }

    /**
     * Getter para propiedad tablaMaestro.
     *
     * @return Valor de la propiedad tablaMaestro.
     */
    String getTablaMaestro() {
        return this.tablaMaestro;
    }

    /**
     * Setter para propiedad tablaMaestro.
     *
     * @param tablaMaestro Nuevo valor de la propiedad tablaMaestro.
     */
    void setTablaMaestro(String tablaMaestro) {
        this.tablaMaestro = tablaMaestro;
    }

    /**
     * Getter para propiedad columnaMaestro.
     *
     * @return Valor de la propiedad columnaMaestro.
     */
    String getColumnaMaestro() {
        return this.columnaMaestro;
    }

    /**
     * Setter para propiedad columnaMaestro.
     *
     * @param columnaMaestro Nuevo valor de la propiedad columnaMaestro.
     */
    void setColumnaMaestro(String columnaMaestro) {
        this.columnaMaestro = columnaMaestro;
    }

    /**
     * Getter para propiedad columnaMaestroAnterior.
     *
     * @return Valor de la propiedad columnaMaestroAnterior.
     */
    String getColumnaMaestroAnterior() {
        return this.columnaMaestroAnterior;
    }

    /**
     * Setter para propiedad columnaMaestroAnterior.
     *
     * @param columnaMaestroAnterior Nuevo valor de la propiedad columnaMaestroAnterior.
     */
    void setColumnaMaestroAnterior(String columnaMaestroAnterior) {
        this.columnaMaestroAnterior = columnaMaestroAnterior;
    }

    /**
     * Getter para propiedad identificacionMaestro.
     *
     * @return Valor de la propiedad identificacionMaestro.
     */
    Long getIdentificacionMaestro() {
        return this.identificacionMaestro;
    }

    /**
     * Setter para propiedad identificacionMaestro.
     *
     * @param identificacionMaestro Nuevo valor de la propiedad identificacionMaestro.
     */
    void setIdentificacionMaestro(Long identificacionMaestro) {
        this.identificacionMaestro = identificacionMaestro;
    }

    /**
     * Getter para propiedad identificacionMaestroAnterior.
     *
     * @return Valor de la propiedad identificacionMaestroAnterior.
     */
    Long getIdentificacionMaestroAnterior() {
        return this.identificacionMaestroAnterior;
    }

    /**
     * Setter para propiedad identificacionMaestroAnterior.
     *
     * @param identificacionMaestroAnterior Nuevo valor de la propiedad identificacionMaestroAnterior.
     */
    void setIdentificacionMaestroAnterior(Long identificacionMaestroAnterior) {
        this.identificacionMaestroAnterior = identificacionMaestroAnterior;
    }

    /**
     * Getter para propiedad filasProcesadas.
     *
     * @return Valor de la propiedad filasProcesadas.
     */
    Map getFilasProcesadas() {
        return this.filasProcesadas;
    }

    /**
     * Getter para propiedad filasRemovidas.
     *
     * @return Valor de la propiedad filasRemovidas.
     */
    Map getFilasRemovidas() {
        return this.filasRemovidas;
    }

    /**
     * Getter para propiedad filasConflictivas.
     *
     * @return Valor de la propiedad filasConflictivas.
     */
    Map getFilasConflictivas() {
        return this.filasConflictivas;
    }

    /**
     * Getter para propiedad filasEliminadas.
     *
     * @return Valor de la propiedad filasEliminadas.
     */
    int getFilasEliminadas() {
        return this.filasEliminadas;
    }

    /**
     * Setter para propiedad filasEliminadas.
     *
     * @param filasEliminadas Nuevo valor de la propiedad filasEliminadas.
     */
    void setFilasEliminadas(int filasEliminadas) {
        this.filasEliminadas = filasEliminadas;
    }

    /**
     * Getter para propiedad filtroFuncionSelect.
     *
     * @return Valor de la propiedad filtroFuncionSelect.
     */
    Long getFiltroFuncionSelect() {
        return this.filtroFuncionSelect;
    }

    /**
     * Setter para propiedad filtroFuncionSelect.
     *
     * @param filtroFuncionSelect Nuevo valor de la propiedad filtroFuncionSelect.
     */
    void setFiltroFuncionSelect(Long filtroFuncionSelect) {
        if (this.filtroFuncionSelect == null && filtroFuncionSelect != null) {
            this.filtroFuncionSelectModificado = true;
        } else if (this.filtroFuncionSelect != null && !this.filtroFuncionSelect.equals(filtroFuncionSelect)) {
            this.filtroFuncionSelectModificado = true;
        }
        this.filtroFuncionSelect = filtroFuncionSelect;
    }

    /**
     * Getter para propiedad filtroFuncionSelectAnterior.
     *
     * @return Valor de la propiedad filtroFuncionSelectAnterior.
     */
    Long getFiltroFuncionSelectAnterior() {
        return this.filtroFuncionSelectAnterior;
    }

    /**
     * Setter para propiedad filtroFuncionSelectAnterior.
     *
     * @param filtroFuncionSelectAnterior Nuevo valor de la propiedad filtroFuncionSelectAnterior.
     */
    void setFiltroFuncionSelectAnterior(Long filtroFuncionSelectAnterior) {
        this.filtroFuncionSelectAnterior = filtroFuncionSelectAnterior;
    }

    /**
     * Getter para propiedad filtroFuncionSelectModificado.
     *
     * @return Valor de la propiedad filtroFuncionSelectModificado.
     */
    boolean isFiltroFuncionSelectModificado() {
        return this.filtroFuncionSelectModificado;
    }

    /**
     * Setter para propiedad filtroFuncionSelectModificado.
     *
     * @param filtroFuncionSelectModificado Nuevo valor de la propiedad filtroFuncionSelectModificado.
     */
    void setFiltroFuncionSelectModificado(boolean filtroFuncionSelectModificado) {
        this.filtroFuncionSelectModificado = filtroFuncionSelectModificado;
    }

    /**
     * Getter para propiedad codigoFuncionSelect.
     *
     * @return Valor de la propiedad codigoFuncionSelect.
     */
    String getCodigoFuncionSelect() {
        return this.codigoFuncionSelect;
    }

    /**
     * Setter para propiedad codigoFuncionSelect.
     *
     * @param codigoFuncionSelect Nuevo valor de la propiedad codigoFuncionSelect.
     */
    void setCodigoFuncionSelect(String codigoFuncionSelect) {
        if (this.codigoFuncionSelect == null && codigoFuncionSelect != null) {
            this.codigoFuncionSelectModificado = true;
        } else if (this.codigoFuncionSelect != null && !this.codigoFuncionSelect.equals(codigoFuncionSelect)) {
            this.codigoFuncionSelectModificado = true;
        }
        this.codigoFuncionSelect = codigoFuncionSelect;
    }

    /**
     * Getter para propiedad codigoFuncionSelectAnterior.
     *
     * @return Valor de la propiedad codigoFuncionSelectAnterior.
     */
    String getCodigoFuncionSelectAnterior() {
        return this.codigoFuncionSelectAnterior;
    }

    /**
     * Setter para propiedad codigoFuncionSelectAnterior.
     *
     * @param codigoFuncionSelectAnterior Nuevo valor de la propiedad codigoFuncionSelectAnterior.
     */
    void setCodigoFuncionSelectAnterior(String codigoFuncionSelectAnterior) {
        this.codigoFuncionSelectAnterior = codigoFuncionSelectAnterior;
    }

    /**
     * Getter para propiedad codigoFuncionSelectModificado.
     *
     * @return Valor de la propiedad codigoFuncionSelectModificado.
     */
    boolean isCodigoFuncionSelectModificado() {
        return this.codigoFuncionSelectModificado;
    }

    /**
     * Setter para propiedad codigoFuncionSelectModificado.
     *
     * @param codigoFuncionSelectModificado Nuevo valor de la propiedad codigoFuncionSelectModificado.
     */
    void setCodigoFuncionSelectModificado(boolean codigoFuncionSelectModificado) {
        this.codigoFuncionSelectModificado = codigoFuncionSelectModificado;
    }

    /**
     * Getter para propiedad nombreFuncionSelect.
     *
     * @return Valor de la propiedad nombreFuncionSelect.
     */
    String getNombreFuncionSelect() {
        return this.nombreFuncionSelect;
    }

    /**
     * Setter para propiedad nombreFuncionSelect.
     *
     * @param nombreFuncionSelect Nuevo valor de la propiedad nombreFuncionSelect.
     */
    void setNombreFuncionSelect(String nombreFuncionSelect) {
        if (this.nombreFuncionSelect == null && nombreFuncionSelect != null) {
            this.nombreFuncionSelectModificado = true;
        } else if (this.nombreFuncionSelect != null && !this.nombreFuncionSelect.equals(nombreFuncionSelect)) {
            this.nombreFuncionSelectModificado = true;
        }
        this.nombreFuncionSelect = nombreFuncionSelect;
    }

    /**
     * Getter para propiedad nombreFuncionSelectAnterior.
     *
     * @return Valor de la propiedad nombreFuncionSelectAnterior.
     */
    String getNombreFuncionSelectAnterior() {
        return this.nombreFuncionSelectAnterior;
    }

    /**
     * Setter para propiedad nombreFuncionSelectAnterior.
     *
     * @param nombreFuncionSelectAnterior Nuevo valor de la propiedad nombreFuncionSelectAnterior.
     */
    void setNombreFuncionSelectAnterior(String nombreFuncionSelectAnterior) {
        this.nombreFuncionSelectAnterior = nombreFuncionSelectAnterior;
    }

    /**
     * Getter para propiedad nombreFuncionSelectModificado.
     *
     * @return Valor de la propiedad nombreFuncionSelectModificado.
     */
    boolean isNombreFuncionSelectModificado() {
        return this.nombreFuncionSelectModificado;
    }

    /**
     * Setter para propiedad nombreFuncionSelectModificado.
     *
     * @param nombreFuncionSelectModificado Nuevo valor de la propiedad nombreFuncionSelectModificado.
     */
    void setNombreFuncionSelectModificado(boolean nombreFuncionSelectModificado) {
        this.nombreFuncionSelectModificado = nombreFuncionSelectModificado;
    }

    /**
     * Getter para propiedad segmentoFuncionSelect.
     *
     * @return Valor de la propiedad segmentoFuncionSelect.
     */
    Long getSegmentoFuncionSelect() {
        return this.segmentoFuncionSelect;
    }

    /**
     * Setter para propiedad segmentoFuncionSelect.
     *
     * @param segmentoFuncionSelect Nuevo valor de la propiedad segmentoFuncionSelect.
     */
    void setSegmentoFuncionSelect(Long segmentoFuncionSelect) {
        this.segmentoFuncionSelect = segmentoFuncionSelect;
    }

    /**
     * Getter para propiedad funcionSelect.
     *
     * @return Valor de la propiedad funcionSelect.
     */
    long getFuncionSelect() {
        return this.funcionSelect;
    }

    /**
     * Setter para propiedad funcionSelect.
     *
     * @param funcionSelect Nuevo valor de la propiedad funcionSelect.
     */
    void setFuncionSelect(long funcion) throws ExcepcionAplicacion {
        if (funcion > 0) {
            if (funcion != this.funcionSelect) {
                if (this.soloReferencia) {
                    this.funcionSelectAutorizada = true;
                } else {
                    this.funcionSelectAutorizada = TLC.getControlador().esFuncionAutorizada(funcion);
                }
            }
            if (this.funcionSelectAutorizada) {
                this.funcionSelect = funcion;
            } else {
                this.funcionSelect = -1;
                throw new ExcepcionAplicacion(TLC.getBitacora().error(CBM2.SELECT_ROW_EXCEPTION_1));
            }
        } else {
            this.funcionSelectAutorizada = false;
            this.funcionSelect = -1;
        }
    }

    /**
     * Getter para propiedad funcionInsert.
     *
     * @return Valor de la propiedad funcionInsert.
     */
    long getFuncionInsert() {
        return this.funcionInsert;
    }

    /**
     * Setter para propiedad funcionInsert.
     *
     * @param funcionInsert Nuevo valor de la propiedad funcionInsert.
     */
    void setFuncionInsert(long funcion) throws ExcepcionAplicacion {
        if (funcion > 0) {
            if (funcion != this.funcionInsert) {
                if (this.funcionInsertEjecutada) {
                    throw new ExcepcionAplicacion(TLC.getBitacora().error(CBM2.INSERT_ROW_EXCEPTION_0));
                }
                this.funcionInsertAutorizada = TLC.getControlador().esFuncionAutorizada(funcion);
            }
            if (this.funcionInsertAutorizada && !this.soloReferencia) {
                this.funcionInsert = funcion;
            } else {
                this.funcionInsert = -1;
                throw new ExcepcionAplicacion(TLC.getBitacora().error(CBM2.INSERT_ROW_EXCEPTION_1));
            }
        } else {
            this.funcionInsertAutorizada = false;
            this.funcionInsert = -1;
        }
    }

    /**
     * Getter para propiedad funcionUpdate.
     *
     * @return Valor de la propiedad funcionUpdate.
     */
    long getFuncionUpdate() {
        return this.funcionUpdate;
    }

    /**
     * Setter para propiedad funcionUpdate.
     *
     * @param funcionUpdate Nuevo valor de la propiedad funcionUpdate.
     */
    void setFuncionUpdate(long funcion) throws ExcepcionAplicacion {
        if (funcion > 0) {
            if (funcion != this.funcionUpdate) {
                if (this.funcionUpdateEjecutada) {
                    throw new ExcepcionAplicacion(TLC.getBitacora().error(CBM2.UPDATE_ROW_EXCEPTION_0));
                }
                this.funcionUpdateAutorizada = TLC.getControlador().esFuncionAutorizada(funcion);
            }
            if (this.funcionUpdateAutorizada && !this.soloReferencia) {
                this.funcionUpdate = funcion;
            } else {
                this.funcionUpdate = -1;
                throw new ExcepcionAplicacion(TLC.getBitacora().error(CBM2.UPDATE_ROW_EXCEPTION_1));
            }
        } else {
            this.funcionUpdateAutorizada = false;
            this.funcionUpdate = -1;
        }
    }

    /**
     * Getter para propiedad funcionDelete.
     *
     * @return Valor de la propiedad funcionDelete.
     */
    long getFuncionDelete() {
        return this.funcionDelete;
    }

    /**
     * Setter para propiedad funcionDelete.
     *
     * @param funcionDelete Nuevo valor de la propiedad funcionDelete.
     */
    void setFuncionDelete(long funcion) throws ExcepcionAplicacion {
        if (funcion > 0) {
            if (funcion != this.funcionDelete) {
                if (this.funcionDeleteEjecutada) {
                    throw new ExcepcionAplicacion(TLC.getBitacora().error(CBM2.DELETE_ROW_EXCEPTION_0));
                }
                this.funcionDeleteAutorizada = TLC.getControlador().esFuncionAutorizada(funcion);
            }
            if (this.funcionDeleteAutorizada && !this.soloReferencia) {
                this.funcionDelete = funcion;
            } else {
                this.funcionDelete = -1;
                throw new ExcepcionAplicacion(TLC.getBitacora().error(CBM2.DELETE_ROW_EXCEPTION_1));
            }
        } else {
            this.funcionDeleteAutorizada = false;
            this.funcionDelete = -1;
        }
    }

    /**
     * Getter para propiedad funcionBusinessProcess.
     *
     * @return Valor de la propiedad funcionBusinessProcess.
     */
    long getFuncionBusinessProcess() {
        return this.funcionBusinessProcess;
    }

    /**
     * Setter para propiedad funcionBusinessProcess.
     *
     * @param funcionBusinessProcess Nuevo valor de la propiedad funcionBusinessProcess.
     */
    void setFuncionBusinessProcess(long funcion) throws ExcepcionAplicacion {
        if (funcion > 0) {
            if (funcion != this.funcionBusinessProcess) {
                this.funcionBusinessProcessAutorizada = TLC.getControlador().esFuncionAutorizada(funcion);
            }
            if (this.funcionBusinessProcessAutorizada) {
                this.funcionBusinessProcess = funcion;
            } else {
                this.funcionBusinessProcess = -1;
                throw new ExcepcionAplicacion(TLC.getBitacora().error(CBM2.PROCESS_ROW_EXCEPTION_1));
            }
        } else {
            this.funcionBusinessProcessAutorizada = false;
            this.funcionBusinessProcess = -1;
        }
    }

    /**
     * Getter para propiedad funcionSelectAutorizada.
     *
     * @return Valor de la propiedad funcionSelectAutorizada.
     */
    boolean isFuncionSelectAutorizada() {
        return this.funcionSelectAutorizada;
    }

    /**
     * Getter para propiedad funcionInsertAutorizada.
     *
     * @return Valor de la propiedad funcionInsertAutorizada.
     */
    boolean isFuncionInsertAutorizada() {
        return this.funcionInsertAutorizada;
    }

    /**
     * Getter para propiedad funcionUpdateAutorizada.
     *
     * @return Valor de la propiedad funcionUpdateAutorizada.
     */
    boolean isFuncionUpdateAutorizada() {
        return this.funcionUpdateAutorizada;
    }

    /**
     * Getter para propiedad funcionDeleteAutorizada.
     *
     * @return Valor de la propiedad funcionDeleteAutorizada.
     */
    boolean isFuncionDeleteAutorizada() {
        return this.funcionDeleteAutorizada;
    }

    /**
     * Getter para propiedad funcionBusinessProcessAutorizada.
     *
     * @return Valor de la propiedad funcionBusinessProcessAutorizada.
     */
    boolean isFuncionBusinessProcessAutorizada() {
        return this.funcionBusinessProcessAutorizada;
    }

    /**
     * Getter para propiedad funcionSelectEjecutada.
     *
     * @return Valor de la propiedad funcionSelectEjecutada.
     */
    boolean isFuncionSelectEjecutada() {
        return this.funcionSelectEjecutada;
    }

    /**
     * Setter para propiedad funcionSelectEjecutada.
     *
     * @param funcionSelectEjecutada Nuevo valor de la propiedad funcionSelectEjecutada.
     */
    void setFuncionSelectEjecutada(boolean funcionSelectEjecutada) {
        this.funcionSelectEjecutada = funcionSelectEjecutada;
    }

    /**
     * Getter para propiedad funcionInsertEjecutada.
     *
     * @return Valor de la propiedad funcionInsertEjecutada.
     */
    boolean isFuncionInsertEjecutada() {
        return this.funcionInsertEjecutada;
    }

    /**
     * Setter para propiedad funcionInsertEjecutada.
     *
     * @param funcionInsertEjecutada Nuevo valor de la propiedad funcionInsertEjecutada.
     */
    void setFuncionInsertEjecutada(boolean funcionInsertEjecutada) {
        this.funcionInsertEjecutada = funcionInsertEjecutada;
    }

    /**
     * Getter para propiedad funcionUpdateEjecutada.
     *
     * @return Valor de la propiedad funcionUpdateEjecutada.
     */
    boolean isFuncionUpdateEjecutada() {
        return this.funcionUpdateEjecutada;
    }

    /**
     * Setter para propiedad funcionUpdateEjecutada.
     *
     * @param funcionUpdateEjecutada Nuevo valor de la propiedad funcionUpdateEjecutada.
     */
    void setFuncionUpdateEjecutada(boolean funcionUpdateEjecutada) {
        this.funcionUpdateEjecutada = funcionUpdateEjecutada;
    }

    /**
     * Getter para propiedad funcionDeleteEjecutada.
     *
     * @return Valor de la propiedad funcionDeleteEjecutada.
     */
    boolean isFuncionDeleteEjecutada() {
        return this.funcionDeleteEjecutada;
    }

    /**
     * Setter para propiedad funcionDeleteEjecutada.
     *
     * @param funcionDeleteEjecutada Nuevo valor de la propiedad funcionDeleteEjecutada.
     */
    void setFuncionDeleteEjecutada(boolean funcionDeleteEjecutada) {
        this.funcionDeleteEjecutada = funcionDeleteEjecutada;
    }

    //  /**
    //   * Getter para propiedad funcionBusinessProcessEjecutada.
    //   *
    //   * @return Valor de la propiedad funcionBusinessProcessEjecutada.
    //   */
    //  boolean isFuncionBusinessProcessEjecutada() {
    //      return this.funcionBusinessProcessEjecutada;
    //  }
    //
    //  /**
    //   * Setter para propiedad funcionBusinessProcessEjecutada.
    //   *
    //   * @param funcionBusinessProcessEjecutada Nuevo valor de la propiedad funcionBusinessProcessEjecutada.
    //   */
    //  void setFuncionBusinessProcessEjecutada(boolean funcionBusinessProcessEjecutada) {
    //      this.funcionBusinessProcessEjecutada = funcionBusinessProcessEjecutada;
    //  }
    //
    public boolean isFiltroEscondido() {
        return filtroEscondido;
    }

    public void setFiltroEscondido(boolean filtroEscondido) {
        this.filtroEscondido = filtroEscondido;
    }

    /**
     * Getter para propiedad versionComandoSelect.
     *
     * @return Valor de la propiedad versionComandoSelect.
     */
    long getVersionComandoSelect() {
        return this.versionComandoSelect;
    }

    /**
     * Setter para propiedad versionComandoSelect.
     *
     * @param versionComandoSelect Nuevo valor de la propiedad versionComandoSelect.
     */
    void setVersionComandoSelect(long versionComandoSelect) {
        this.versionComandoSelect = versionComandoSelect;
    }

    /**
     * Getter para propiedad versionComandoSelectAnterior.
     *
     * @return Valor de la propiedad versionComandoSelectAnterior.
     */
    long getVersionComandoSelectAnterior() {
        return this.versionComandoSelectAnterior;
    }

    /**
     * Setter para propiedad versionComandoSelectAnterior.
     *
     * @param versionComandoSelectAnterior Nuevo valor de la propiedad versionComandoSelectAnterior.
     */
    void setVersionComandoSelectAnterior(long versionComandoSelectAnterior) {
        this.versionComandoSelectAnterior = versionComandoSelectAnterior;
    }

    /**
     * Getter para propiedad versionComandoInsert.
     *
     * @return Valor de la propiedad versionComandoInsert.
     */
    long getVersionComandoInsert() {
        return this.versionComandoInsert;
    }

    /**
     * Setter para propiedad versionComandoInsert.
     *
     * @param versionComandoInsert Nuevo valor de la propiedad versionComandoInsert.
     */
    void setVersionComandoInsert(long versionComandoInsert) {
        this.versionComandoInsert = versionComandoInsert;
    }

    /**
     * Getter para propiedad criteriosBusqueda.
     *
     * @return Valor de la propiedad criteriosBusqueda.
     */
    String getCriteriosBusqueda() {
        return this.criteriosBusqueda;
    }

    /**
     * Setter para propiedad criteriosBusqueda.
     *
     * @param criteriosBusqueda Nuevo valor de la propiedad criteriosBusqueda.
     */
    void setCriteriosBusqueda(String criteriosBusqueda) {
        this.criteriosBusqueda = criteriosBusqueda;
    }

    /**
     * Getter para propiedad criteriosOrden.
     *
     * @return Valor de la propiedad criteriosOrden.
     */
    String getCriteriosOrden() {
        return this.criteriosOrden;
    }

    /**
     * Setter para propiedad criteriosOrden.
     *
     * @param criteriosOrden Nuevo valor de la propiedad criteriosOrden.
     */
    void setCriteriosOrden(String criteriosOrden) {
        this.criteriosOrden = criteriosOrden;
    }

    /**
     * Getter para propiedad comandoSelectAnsi.
     *
     * @return Valor de la propiedad comandoSelectAnsi.
     */
    String getComandoSelectAnsi() {
        return this.comandoSelectAnsi;
    }

    /**
     * Setter para propiedad comandoSelectAnsi.
     *
     * @param comandoSelectAnsi Nuevo valor de la propiedad comandoSelectAnsi.
     */
    void setComandoSelectAnsi(String comandoSelectAnsi) {
        this.comandoSelectAnsi = comandoSelectAnsi;
    }

    /**
     * Getter para propiedad comandoSelectAnterior.
     *
     * @return Valor de la propiedad comandoSelectAnterior.
     */
    String getComandoSelectAnterior() {
        return this.comandoSelectAnterior;
    }

    /**
     * Setter para propiedad comandoSelectAnterior.
     *
     * @param comandoSelectAnterior Nuevo valor de la propiedad comandoSelectAnterior.
     */
    void setComandoSelectAnterior(String comandoSelectAnterior) {
        this.comandoSelectAnterior = comandoSelectAnterior;
    }

    /**
     * Getter para propiedad opcionZumNodo.
     *
     * @return Valor de la propiedad opcionZumNodo.
     */
    EnumOpcionZumNodo getOpcionZumNodo() {
        return opcionZumNodo;
    }

    /**
     * Setter para propiedad opcionZumNodo.
     *
     * @param opcionZumNodo Nuevo valor de la propiedad opcionZumNodo.
     */
    void setOpcionZumNodo(EnumOpcionZumNodo opcionZumNodo) {
        this.opcionZumNodo = opcionZumNodo;
    }

    //  public String getSegmentoKeyColumn() {
    //      return segmentoKeyColumn;
    //  }
    //
    //  public void setSegmentoKeyColumn(String segmentoKeyColumn) {
    //      this.segmentoKeyColumn = segmentoKeyColumn;
    //  }
    //
    //  public String getSegmentoFunctionName() {
    //      return segmentoFunctionName;
    //  }
    //
    //  public void setSegmentoFunctionName(String segmentoFunctionName) {
    //      this.segmentoFunctionName = segmentoFunctionName;
    //  }
    //
    @Override
    public void setCommand(String command) throws SQLException {
        boolean autoCommit;
        Bitacora.trace(getClass(), "setCommand", command);
        Connection connection = getConnection();
        Bitacora.trace("connection=" + connection);
        if (connection != null) {
            autoCommit = connection.getAutoCommit();
            Bitacora.trace("autocommit=" + autoCommit);
            if (autoCommit) {
                connection.setAutoCommit(false);
                autoCommit = connection.getAutoCommit();
                Bitacora.trace("autocommit=" + autoCommit);
            }
        }
        super.setCommand(command);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void acceptChanges() throws SyncProviderException {
        try {
            this.getFilasConflictivas().clear();
            super.acceptChanges();
        } catch (SyncProviderException spe) {
            SyncResolver resolver = spe.getSyncResolver();
            if (resolver != null && resolver instanceof SyncResolverX) {
                boolean showDeleted = this.tryToGetShowDeleted();
                boolean sinDuplicados = TLC.getBitacora().isSinDuplicados();
                int conflictos = 0;
                int row;
                int status = SyncResolver.NO_ROW_CONFLICT;
                String transaction = DBUtils.getTransactionLabel(status);
                SQLException sqlException;
                int errorCode;
                String message;
                String localizedMessage;
                String sqlState;
                String heading;
                String clave = CBM2.COMMIT_CHANGES_UNKNOWN_EXCEPTION;
                int tipoError; /* OJO con la constante, 1 -> fila con un error desconocido */
                String mensaje;
                String prefijo = Global.PREFIJO_ETIQUETA_ID_RECURSO;
                try {
                    this.tryToSetShowDeleted(true);
                    TLC.getBitacora().setSinDuplicados(true);
                    while (resolver.nextConflict()) {
                        conflictos++;
                        row = resolver.getRow();
                        status = resolver.getStatus();
                        transaction = DBUtils.getTransactionLabel(status);
                        sqlException = ((SyncResolverX) resolver).getSQLException();
                        errorCode = sqlException.getErrorCode();
                        message = sqlException.getMessage();
                        localizedMessage = StringUtils.substringBefore(sqlException.getLocalizedMessage(),
                                " Where: ");
                        sqlState = sqlException.getSQLState();
                        heading = "Row:" + row + ", Status:" + status + ", Code:" + errorCode + ", State:"
                                + sqlState;
                        Bitacora.trace(heading + message);
                        if (TLC.getInterpreteSql().isCommandIgnoredException(sqlException)) {
                            clave = CBM2.COMMIT_CHANGES_COMMAND_IGNORED_EXCEPTION;
                            tipoError = 0; /* OJO con la constante, 0 -> fila "ignorada" (no se sabe si tiene o no errores) */
                            mensaje = tipoError + Bitacora.getTextoMensaje(clave, transaction, prefijo + row);
                            TLC.getBitacora().error(CBM2.COMMIT_CHANGES_COMMAND_IGNORED);
                            if (status == SyncResolver.DELETE_ROW_CONFLICT) {
                                this.tryToSetShowDeleted(false);
                            }
                        } else {
                            String columna = TLC.getInterpreteSql()
                                    .getNotNullConstraintViolationColumn(sqlException);
                            if (StringUtils.isNotBlank(columna)) {
                                clave = CBM2.DATABASE_NOT_NULL_CONSTRAINT_VIOLATION;
                                tipoError = 2; /* OJO con la constante, 2 -> fila con un error conocido */
                                mensaje = tipoError
                                        + TLC.getBitacora().error(clave, transaction, prefijo + row, columna);
                            } else {
                                clave = DBUtils.getConstraintMessageKey(message, status);
                                if (clave == null) {
                                    clave = CBM2.COMMIT_CHANGES_UNKNOWN_EXCEPTION;
                                    tipoError = 1; /* OJO con la constante, 1 -> fila con un error desconocido */
                                    mensaje = tipoError + TLC.getBitacora().error(clave, transaction, prefijo + row,
                                            localizedMessage);
                                } else {
                                    tipoError = 2; /* OJO con la constante, 2 -> fila con un error conocido */
                                    mensaje = tipoError
                                            + TLC.getBitacora().error(clave, transaction, prefijo + row);
                                }
                            }
                        }
                        this.getFilasConflictivas().put(String.valueOf(row - 1), mensaje);
                        //                      if (status == SyncResolver.DELETE_ROW_CONFLICT)
                        //                          if (this.absolute(row))
                        //                              if (this.rowDeleted()) // RETORNA FALSO!
                        //                                  this.undoDelete();
                    }
                    if (conflictos == 0) { /* esto parece un BUG, y pasa cuando se elimina la ultima fila y showDeleted==false */
                        TLC.getBitacora().error(clave, transaction, "", spe.getLocalizedMessage());
                    }
                } catch (SQLException ex) {
                    TLC.getBitacora().fatal(ex);
                } finally {
                    this.tryToSetShowDeleted(showDeleted);
                    TLC.getBitacora().setSinDuplicados(sinDuplicados);
                    throw new SyncProviderException(this.getSyncProviderExceptionString(spe));
                }
            }
            throw spe;
        }
    }

    boolean tryToGetShowDeleted() {
        boolean showDeleted = false;
        try {
            showDeleted = this.getShowDeleted();
        } catch (SQLException sqle) {
            TLC.getBitacora().fatal(sqle);
        }
        return showDeleted;
    }

    void tryToSetShowDeleted(boolean showDeleted) {
        try {
            this.setShowDeleted(showDeleted);
        } catch (SQLException sqle) {
            TLC.getBitacora().fatal(sqle);
        }
    }

    private String getSyncProviderExceptionString(SyncProviderException spe) {
        String mensaje = ThrowableUtils.getString(spe);
        return mensaje.replace("Number of conflicts while synchronizing", "Nmero de conflictos al confirmar");
    }

    @Override
    public Object getObject(int columnIndex) throws SQLException {
        //      Bitacora.trace(RecursoCachedRowSet.class, "getObject", columnIndex);
        Object object = super.getObject(columnIndex);
        return getJavaValue(columnIndex, findColumn(columnIndex), object);
    }

    @Override
    public Object getObject(int columnIndex, Map map) throws SQLException {
        //      Bitacora.trace(RecursoCachedRowSet.class, "getObject", columnIndex, "map");
        Object object = super.getObject(columnIndex, map);
        return getJavaValue(columnIndex, findColumn(columnIndex), object);
    }

    @Override
    public Object getObject(String columnName) throws SQLException {
        //      Bitacora.trace(RecursoCachedRowSet.class, "getObject", columnName);
        Object object = super.getObject(columnName);
        return getJavaValue(findColumn(columnName), columnName, object);
    }

    @Override
    public Object getObject(String columnName, Map map) throws SQLException {
        //      Bitacora.trace(RecursoCachedRowSet.class, "getObject", columnName, "map");
        Object object = super.getObject(columnName, map);
        return getJavaValue(findColumn(columnName), columnName, object);
    }

    private String findColumn(int columnIndex) {
        try {
            ResultSetMetaData rsmd = getMetaData();
            return rsmd.getColumnName(columnIndex);
        } catch (SQLException ex) {
            TLC.getBitacora().fatal(ex);
        }
        return null;
    }

    private Object getJavaValue(int columnIndex, String columnName, Object x) {
        if (x == null) {
            return x;
        }
        Class<?> cx = x.getClass();
        Class<?> cy = columnTypes.get(columnName.toLowerCase());
        if (cy == null || cy.isAssignableFrom(cx)) {
            return x;
        } else if (cy.equals(Long.class)) {
            return LongUtils.toLong(x);
        } else if (cy.equals(Integer.class)) {
            return IntUtils.toInteger(x);
        } else {
            return x;
        }
    }

    // <editor-fold defaultstate="collapsed" desc="updateObject">
    //  @Override
    //  public void updateObject(int columnIndex, Object x) throws SQLException {
    //      Bitacora.trace(RecursoCachedRowSet.class, "updateObject", columnIndex, x);
    //      Object object = getSqlValue(columnIndex, findColumn(columnIndex), x);
    //      super.updateObject(columnIndex, object);
    //  }
    //
    //  @Override
    //  public void updateObject(int columnIndex, Object x, int scale) throws SQLException {
    //      Bitacora.trace(RecursoCachedRowSet.class, "updateObject", columnIndex, x, scale);
    //      Object object = getSqlValue(columnIndex, findColumn(columnIndex), x);
    //      super.updateObject(columnIndex, object, scale);
    //  }
    //
    //  @Override
    //  public void updateObject(String columnName, Object x) throws SQLException {
    //      Bitacora.trace(RecursoCachedRowSet.class, "updateObject", columnName, x);
    //      Object object = getSqlValue(findColumn(columnName), columnName, x);
    //      super.updateObject(columnName, object);
    //  }
    //
    //  @Override
    //  public void updateObject(String columnName, Object x, int scale) throws SQLException {
    //      Bitacora.trace(RecursoCachedRowSet.class, "updateObject", columnName, x, scale);
    //      Object object = getSqlValue(findColumn(columnName), columnName, x);
    //      super.updateObject(columnName, object, scale);
    //  }
    // </editor-fold>
    //
    // <editor-fold defaultstate="collapsed" desc="updateInt">
    //  @Override
    //  public void updateInt(int columnIndex, int x) throws SQLException {
    //      super.updateObject(columnIndex, BigDecimal.valueOf(x));
    //  }
    //
    //  @Override
    //  public void updateInt(String columnName, int x) throws SQLException {
    //      super.updateObject(columnName, BigDecimal.valueOf(x));
    //  }
    // </editor-fold>
    //
    // <editor-fold defaultstate="collapsed" desc="updateLong">
    //  @Override
    //  public void updateLong(int columnIndex, long x) throws SQLException {
    //      super.updateObject(columnIndex, BigDecimal.valueOf(x));
    //  }
    //
    //  @Override
    //  public void updateLong(String columnName, long x) throws SQLException {
    //      super.updateObject(columnName, BigDecimal.valueOf(x));
    //  }
    // </editor-fold>
    //
    // <editor-fold defaultstate="collapsed" desc="getColumnType">
    //  private int getColumnType(int columnIndex) {
    //      try {
    //          ResultSetMetaData rsmd = getMetaData();
    //          return rsmd.getColumnType(columnIndex);
    //      } catch (SQLException ex) {
    //          TLC.getBitacora().fatal(ex);
    //      }
    //      return java.sql.Types.OTHER;
    //  }
    // </editor-fold>
    //
    // <editor-fold defaultstate="collapsed" desc="initColumnTypes">
    //  private void initColumnTypes() {
    //      try {
    //          ResultSetMetaData rsmd = getMetaData();
    //          int numberOfColumns = rsmd.getColumnCount();
    //          String columnName;
    //          int columnType;
    //          for (int i = 1; i <= numberOfColumns; i++) {
    //              columnName = rsmd.getColumnName(i);
    //              columnType = rsmd.getColumnType(i);
    //              switch (columnType) {
    //                  case java.sql.Types.BOOLEAN:
    //                      columnTypes.put(columnName, Boolean.class);
    //                      break;
    //                  case java.sql.Types.CHAR:
    //                  case java.sql.Types.VARCHAR:
    //                  case java.sql.Types.LONGVARCHAR:
    //                  case java.sql.Types.NCHAR:
    //                  case java.sql.Types.NVARCHAR:
    //                  case java.sql.Types.LONGNVARCHAR:
    //                      columnTypes.put(columnName, String.class);
    //                      break;
    //                  case java.sql.Types.BIT:
    //                  case java.sql.Types.TINYINT:
    //                  case java.sql.Types.SMALLINT:
    //                  case java.sql.Types.INTEGER:
    //                      columnTypes.put(columnName, Integer.class);
    //                      break;
    //                  case java.sql.Types.BIGINT:
    //                      columnTypes.put(columnName, Long.class);
    //                      break;
    //                  case java.sql.Types.FLOAT:
    //                  case java.sql.Types.REAL:
    //                      columnTypes.put(columnName, Float.class);
    //                      break;
    //                  case java.sql.Types.DOUBLE:
    //                      columnTypes.put(columnName, Double.class);
    //                      break;
    //                  case java.sql.Types.NUMERIC:
    //                  case java.sql.Types.DECIMAL:
    //                      columnTypes.put(columnName, BigDecimal.class);
    //                      break;
    //                  case java.sql.Types.DATE:
    //                  case java.sql.Types.TIME:
    //                  case java.sql.Types.TIMESTAMP:
    //                      columnTypes.put(columnName, Timestamp.class);
    //                      break;
    //              }
    //          }
    //      } catch (Exception ex) {
    //          TLC.getBitacora().fatal(ex);
    //      }
    //  }
    // </editor-fold>
    //
    // <editor-fold defaultstate="collapsed" desc="getSqlValue">
    //  private Object getSqlValue(int columnIndex, String columnName, Object x) {
    //      if (x == null) {
    //          return x;
    //      }
    //      Class<?> cx = x.getClass();
    //      String cxsn = cx.getSimpleName();
    //      Bitacora.trace("[#]" + columnIndex + ":" + columnName + "[" + cxsn + "]" + x);
    //      if (x instanceof Integer) {
    //          return BigDecimal.valueOf(((Integer) x).longValue());
    //      } else if (x instanceof Long) {
    //          return BigDecimal.valueOf(((Long) x).longValue());
    //      } else if (x instanceof BigInteger) {
    //          return BigDecimal.valueOf(((BigInteger) x).longValue());
    //      } else if (x instanceof Double) {
    //          return BigDecimal.valueOf(((Double) x).doubleValue());
    //      }
    //      return x;
    //  }
    // </editor-fold>
    //
}