com.egt.core.aplicacion.web.GestorPaginaActualizacion.java Source code

Java tutorial

Introduction

Here is the source code for com.egt.core.aplicacion.web.GestorPaginaActualizacion.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.aplicacion.web;

import com.egt.base.constants.CBM2;
import com.egt.base.enums.EnumOperadorCom;
import com.egt.base.util.BundleDominios;
import com.egt.core.aplicacion.Bitacora;
import com.egt.core.aplicacion.ExcepcionAplicacion;
import com.egt.core.aplicacion.FiltroBusqueda;
import com.egt.core.aplicacion.TLC;
import com.egt.core.constants.Global;
import com.egt.core.db.xdp.RecursoCodificableDataProvider;
import com.egt.core.db.xdp.RecursoConsultableDataProvider;
import com.egt.core.db.xdp.RecursoIdentificableDataProvider;
import com.egt.core.db.xdp.RecursoNombrableDataProvider;
import com.egt.core.db.xdp.RecursoSegmentableDataProvider;
import com.egt.core.enums.EnumOpcionAbrirVentana;
import com.egt.core.enums.EnumSeveridadMensaje;
import com.egt.core.util.Bundle;
import com.egt.core.util.JS;
import com.egt.core.util.STP;
import com.sun.data.provider.RowKey;
import com.sun.webui.jsf.model.Option;
import java.lang.reflect.Method;
import java.sql.SQLException;
import org.apache.commons.lang.StringUtils;

public class GestorPaginaActualizacion extends GestorPaginaBasica {

    public GestorPaginaActualizacion() {
        super();
    }

    public GestorPaginaActualizacion(PaginaAbstracta paginaAbstracta) {
        super(paginaAbstracta);
    }

    private static final int LIMITE_FILAS_FUNCION_SELECT = 500;

    // <editor-fold defaultstate="collapsed" desc="propiedades estandar de la pagina de actualizacion">
    /**
     * Getter para propiedad paginaActualizacion.
     *
     * @return Valor de la propiedad paginaActualizacion.
     */
    protected PaginaActualizacion getPaginaActualizacion() {
        return this.getPaginaAbstracta() instanceof PaginaActualizacion
                ? (PaginaActualizacion) this.getPaginaAbstracta()
                : null;
    }

    /**
     * Getter para propiedad paginaActualizacionConAccionMultiple.
     *
     * @return Valor de la propiedad paginaActualizacionConAccionMultiple.
     */
    protected PaginaActualizacionConAccionMultiple getPaginaActualizacionConAccionMultiple() {
        return this.getPaginaAbstracta() instanceof PaginaActualizacionConAccionMultiple
                ? (PaginaActualizacionConAccionMultiple) this.getPaginaAbstracta()
                : null;
    }

    /**
     * Getter para propiedad paginaActualizacionConEdicionMultiple.
     *
     * @return Valor de la propiedad paginaActualizacionConEdicionMultiple.
     */
    protected PaginaActualizacionConEdicionMultiple getPaginaActualizacionConEdicionMultiple() {
        return this.getPaginaAbstracta() instanceof PaginaActualizacionConEdicionMultiple
                ? (PaginaActualizacionConEdicionMultiple) this.getPaginaAbstracta()
                : null;
    }

    /**
     * Getter para propiedad paginaConsultaConFiltro.
     *
     * @return Valor de la propiedad paginaConsultaConFiltro.
     */
    protected PaginaConsultaConFiltro getPaginaConsultaConFiltro() {
        return this.getPaginaAbstracta() instanceof PaginaConsultaConFiltro
                ? (PaginaConsultaConFiltro) this.getPaginaAbstracta()
                : null;
    }

    /**
     * Getter para propiedad paginaConsultaConMaestro.
     *
     * @return Valor de la propiedad paginaConsultaConMaestro.
     */
    protected PaginaConsultaConMaestro getPaginaConsultaConMaestro() {
        return this.getPaginaAbstracta() instanceof PaginaConsultaConMaestro
                ? (PaginaConsultaConMaestro) this.getPaginaAbstracta()
                : null;
    }

    public boolean isPaginaConsultaConMaestro() {
        if (designing) {
            return true;
        }
        return this.getPaginaAbstracta() instanceof PaginaConsultaConMaestro;
    }

    public boolean isPaginaConsultaConArbol() {
        if (designing) {
            return true;
        }
        return this.getPaginaAbstracta() instanceof PaginaConsultaConArbol;
    }

    public boolean isPaginaConsultaConTabla() {
        if (designing) {
            return true;
        }
        return this.getPaginaAbstracta() instanceof PaginaConsultaConTabla;
    }

    public boolean isPaginaConsultaConFiltro() {
        if (designing) {
            return true;
        }
        return this.getPaginaAbstracta() instanceof PaginaConsultaConFiltro;
    }

    public boolean isPaginaConsultaSinFiltro() {
        return !this.isPaginaConsultaConFiltro();
    }

    protected boolean isPaginaActualizacionConAccionMultiple() {
        return this.getPaginaAbstracta() instanceof PaginaActualizacionConAccionMultiple;
    }

    protected boolean isPaginaActualizacionConEdicionMultiple() {
        return this.getPaginaAbstracta() instanceof PaginaActualizacionConEdicionMultiple;
    }

    protected RecursoIdentificableDataProvider getRecursoIdentificableDataProvider() {
        return this.getPaginaActualizacion().getRecursoDataProvider().getRecursoIdentificableDataProvider();
    }

    protected RecursoIdentificableDataProvider getRecursoMaestroIdentificableDataProvider() {
        return this.isPaginaConsultaConMaestro()
                ? this.getPaginaConsultaConMaestro().getRecursoMaestroDataProvider()
                        .getRecursoIdentificableDataProvider()
                : null;
    }

    protected RecursoCodificableDataProvider getRecursoCodificableDataProvider() {
        return this.getPaginaActualizacion().getRecursoDataProvider().getRecursoCodificableDataProvider();
    }

    protected RecursoNombrableDataProvider getRecursoNombrableDataProvider() {
        return this.getPaginaActualizacion().getRecursoDataProvider().getRecursoNombrableDataProvider();
    }

    protected RecursoSegmentableDataProvider getRecursoSegmentableDataProvider() {
        return this.getPaginaActualizacion().getRecursoDataProvider().getRecursoSegmentableDataProvider();
    }

    protected RecursoConsultableDataProvider getRecursoConsultableDataProvider() {
        return this.getPaginaActualizacion().getRecursoDataProvider().getRecursoConsultableDataProvider();
    }

    protected RecursoConsultableDataProvider getRecursoMaestroConsultableDataProvider() {
        return this.isPaginaConsultaConMaestro()
                ? this.getPaginaConsultaConMaestro().getRecursoMaestroDataProvider()
                        .getRecursoConsultableDataProvider()
                : null;
    }

    protected String getRecursoDataProviderDataSourceName() {
        return this.getPaginaActualizacion().getRecursoDataProvider().getCachedRowSet().getDataSourceName();
    }

    protected String getRecursoMaestroDataProviderDataSourceName() {
        return this.getPaginaConsultaConMaestro().getRecursoMaestroDataProvider().getCachedRowSet()
                .getDataSourceName();
    }

    protected boolean isConsultaInsert() {
        if (designing) {
            return false;
        }
        return this.getPaginaActualizacion().getRecursoDataProvider().isConsultaInsertDisponible();
    }

    protected boolean isConsultaAnteriorDisponible() {
        if (designing) {
            return true;
        }
        return this.getPaginaActualizacion().getRecursoDataProvider().isConsultaAnteriorDisponible();
    }

    protected boolean isConsultaValida() {
        if (designing) {
            return true;
        }
        this.track("isConsultaValida");
        boolean ok = !this.isRestauracion()
                && this.getPaginaActualizacion().getRecursoDataProvider().isFuncionSelectAutorizada();
        if (ok) {
            long f1 = this.getPaginaActualizacion().getRecursoDataProvider().getFuncionSelect();
            long f2 = this.getPaginaActualizacion().getFuncionConsultarRecurso();
            this.trace("funcion-actual=" + f1 + ", funcion-anterior=" + f2);
            ok = f1 == f2;
        }
        if (ok) {
            long v1 = this.getPaginaActualizacion().getRecursoDataProvider().getVersionComandoSelect();
            long v2 = this.getPaginaActualizacion().getContextoSesion()
                    .getVersionComandoSelectPagina(this.getClavePagina());
            this.trace("version-actual=" + v1 + ", version-anterior=" + v2);
            ok = v1 == v2;
        }
        if (ok && this.isReinicio()) {
            String c1 = StringUtils
                    .trimToNull(this.getPaginaActualizacion().getRecursoDataProvider().getCriteriosBusqueda());
            String c2 = StringUtils
                    .trimToNull(this.getPaginaActualizacion().getContextoPeticion().getCriteriosBusqueda());
            this.trace("criterio-actual=" + c1 + ", criterio-anterior=" + c2);
            ok = c1 == null ? c2 == null : c1.equals(c2);
        }
        //      if (ok && this.isPaginaConsultaConMaestro()) {
        //          Long i1 = this.getIdentificacionRecursoMaestro();
        //          Long i2 = this.getPaginaActualizacion().getContextoSesion().getIdentificacionRecursoMaestroPagina(this.getClavePagina());
        //          this.trace("maestro-actual=" + i1 + ", maestro-anterior=" + i2);
        //          ok = i1 == null ? i2 == null : i1.equals(i2);
        //      }
        if (ok) {
            //          String c1 = this.getColumnaIdentificacionRecursoMaestro();
            String c1 = this.getPaginaActualizacion().getRecursoDataProvider().getColumnaMaestro();
            String c2 = this.getPaginaActualizacion().getContextoSesion()
                    .getColumnaIdentificacionRecursoMaestroPagina(this.getClavePagina());
            this.trace("maestro-actual=" + c1 + ", maestro-anterior=" + c2);
            ok = c1 == null ? c2 == null : c1.equals(c2);
        }
        if (ok) {
            //          Long i1 = this.getIdentificacionRecursoMaestro();
            Long i1 = this.getPaginaActualizacion().getRecursoDataProvider().getIdentificacionMaestro();
            Long i2 = this.getPaginaActualizacion().getContextoSesion()
                    .getIdentificacionRecursoMaestroPagina(this.getClavePagina());
            this.trace("maestro-actual=" + i1 + ", maestro-anterior=" + i2);
            ok = i1 == null ? i2 == null : i1.equals(i2);
        }
        return ok;
    }

    protected boolean isConsultaInvalida() {
        return !this.isConsultaValida();
    }

    protected Long getIdentificacionRecursoActual() {
        if (designing) {
            return null;
        }
        Long valor = null;
        try {
            if (this.getPaginaActualizacion().getRecursoDataProvider().isRecursoIdentificable()) {
                RowKey rowKey = this.getCurrentRowKey();
                if (this.getPaginaActualizacion().getRecursoDataProvider().isRowAvailable(rowKey)) {
                    valor = this.getRecursoIdentificableDataProvider().getIdentificacionRecurso(rowKey);
                }
            }
        } catch (Exception ex) {
            this.handle(ex);
        } finally {
            return valor;
        }
    }

    protected Long getIdentificacionRecursoEscogido() {
        if (designing) {
            return null;
        }
        Long valor = null;
        try {
            if (this.getPaginaActualizacion().getRecursoDataProvider().isRecursoIdentificable()) {
                if (this.getPaginaActualizacion().getRecursoDataProvider().isFilaEscogidaDisponible()) {
                    RowKey rowKey = this.getPaginaActualizacion().getRecursoDataProvider().getFilaEscogida();
                    valor = this.getRecursoIdentificableDataProvider().getIdentificacionRecurso(rowKey);
                }
            }
        } catch (Exception ex) {
            this.handle(ex);
        } finally {
            return valor;
        }
    }

    protected String getColumnaIdentificacionRecurso() {
        if (designing) {
            return null;
        }
        String columna = null;
        if (this.getPaginaActualizacion().getRecursoDataProvider().isRecursoIdentificable()) {
            columna = this.getRecursoIdentificableDataProvider().getColumnaIdentificacionRecurso();
        }
        return columna;
    }

    protected String getColumnaIdentificacionRecursoMaestro() {
        if (designing) {
            return null;
        }
        String columna = null;
        if (this.isPaginaConsultaConMaestro()) {
            columna = this.getPaginaConsultaConMaestro().getColumnaIdentificacionRecursoMaestro();
            if (columna == null || columna.equals("")) {
                if (this.getPaginaConsultaConMaestro().getRecursoMaestroDataProvider().isRecursoIdentificable()) {
                    columna = this.getRecursoMaestroIdentificableDataProvider().getColumnaIdentificacionRecurso();
                }
            }
        }
        return columna;
    }

    protected Long getIdentificacionRecursoMaestro() {
        if (designing) {
            return null;
        }
        Long valor = null;
        try {
            if (this.isPaginaConsultaConMaestro()) {
                if (this.getPaginaConsultaConMaestro().getRecursoMaestroDataProvider().isRecursoIdentificable()) {
                    if (this.getPaginaConsultaConMaestro().getRecursoMaestroDataProvider()
                            .isFilaEscogidaDisponible()) {
                        RowKey rowKey = this.getPaginaConsultaConMaestro().getRecursoMaestroDataProvider()
                                .getFilaEscogida();
                        valor = this.getRecursoMaestroIdentificableDataProvider().getIdentificacionRecurso(rowKey);
                    }
                }
            }
        } catch (Exception ex) {
            this.handle(ex);
        } finally {
            return valor;
        }
    }

    public String getDenominacionFilaMaestro() {
        if (designing) {
            return null;
        }
        return this.isPaginaConsultaConMaestro()
                ? this.getPaginaConsultaConMaestro().getRecursoMaestroDataProvider().getDenominacionFilaEscogida()
                : null;
    }

    public RowKey getCurrentRowKey() {
        if (designing) {
            return null;
        }
        return this.getPaginaActualizacion().getRecursoDataProvider().getCursorRow();
    }

    public String getIdentificacionFila() {
        if (designing) {
            return null;
        }
        RowKey rowKey = this.getCurrentRowKey();
        return this.getPaginaActualizacion().getRecursoDataProvider().isRowAvailable(rowKey)
                ? String.valueOf(Integer.parseInt(rowKey.getRowId()) + 1)
                : null;
    }

    public boolean isFuncionSelectHabilitada() {
        if (designing) {
            return true;
        }
        return (this.getPaginaActualizacion().getFuncionConsultarRecurso() > 0
                && this.getPaginaActualizacion().getRecursoDataProvider().isFuncionSelectHabilitada());
    }

    public boolean isFuncionSelectInhabilitada() {
        return !this.isFuncionSelectHabilitada();
    }

    public boolean isFuncionInsertHabilitada() {
        if (designing) {
            return true;
        }
        return (this.getPaginaActualizacion().getFuncionCrearRecurso() > 0
                && this.getPaginaActualizacion().getRecursoDataProvider().isFuncionInsertHabilitada());
    }

    public boolean isFuncionInsertInhabilitada() {
        return !this.isFuncionInsertHabilitada();
    }

    public boolean isFuncionUpdateHabilitada() {
        if (designing) {
            return true;
        }
        return (this.getPaginaActualizacion().getFuncionModificarRecurso() > 0
                && this.getPaginaActualizacion().getRecursoDataProvider().isFuncionUpdateHabilitada()
                && this.isEdicionMultiFuncionInhabilitada());
    }

    public boolean isFuncionUpdateInhabilitada() {
        return !this.isFuncionUpdateHabilitada();
    }

    public boolean isFuncionDeleteHabilitada() {
        if (designing) {
            return true;
        }
        return (this.getPaginaActualizacion().getFuncionEliminarRecurso() > 0
                && this.getPaginaActualizacion().getRecursoDataProvider().isFuncionDeleteHabilitada());
    }

    public boolean isFuncionDeleteInhabilitada() {
        return !this.isFuncionDeleteHabilitada();
    }

    public boolean isFuncionCheckChangesHabilitada() {
        if (designing) {
            return true;
        }
        return (this.isFilaDisponible()
                && this.getPaginaActualizacion().getRecursoDataProvider().esFilaProcesada(this.getCurrentRowKey()));
    }

    public boolean isFuncionCheckChangesInhabilitada() {
        return !this.isFuncionCheckChangesHabilitada();
    }

    public boolean isFuncionCancelUpdateHabilitada() {
        if (designing) {
            return true;
        }
        return (this.isFilaDisponible()
                && this.getPaginaActualizacion().getRecursoDataProvider().esFilaProcesada(this.getCurrentRowKey()));
    }

    public boolean isFuncionCancelUpdateInhabilitada() {
        return !this.isFuncionCancelUpdateHabilitada();
    }

    public boolean isFuncionCommitHabilitada() {
        if (designing) {
            return true;
        }
        return this.isLoteConCambios();
    }

    public boolean isFuncionCommitInhabilitada() {
        return !this.isFuncionCommitHabilitada();
    }

    public boolean isFuncionRevertHabilitada() {
        if (designing) {
            return true;
        }
        return this.isLoteConCambios();
    }

    public boolean isFuncionRevertInhabilitada() {
        return !this.isFuncionRevertHabilitada();
    }

    public boolean isFuncionExecuteHabilitada() {
        if (designing) {
            return true;
        }
        return this.isAccionMultiFuncionHabilitada()
                && this.getPaginaActualizacion().getRecursoDataProvider().isFuncionBusinessProcessHabilitada();
    }

    public boolean isFuncionExecuteInhabilitada() {
        return !this.isFuncionExecuteHabilitada();
    }

    public boolean isFuncionRefreshHabilitada() {
        if (designing) {
            return true;
        }
        //      return this.getPaginaActualizacion().getRecursoDataProvider().isFuncionSelectEjecutada();
        return (this.getPaginaActualizacion().getRecursoDataProvider().isFuncionSelectEjecutada()
                && this.getPaginaActualizacion().getRecursoDataProvider().isFuncionSelectHabilitada());
    }

    public boolean isFuncionRefreshInhabilitada() {
        return !this.isFuncionRefreshHabilitada();
    }

    public boolean isFuncionRequeryHabilitada() {
        if (designing) {
            return true;
        }
        return this.isFuncionSelectHabilitada() && this.isConsultaAnteriorDisponible() && this.isConsultaInsert();
    }

    public boolean isFuncionRequeryInhabilitada() {
        return !this.isFuncionRequeryHabilitada();
    }

    public boolean isFuncionRestoreFilterHabilitada() {
        if (designing) {
            return true;
        }
        return this.isFuncionSelectHabilitada() && this.isConsultaAnteriorDisponible();
    }

    public boolean isFuncionRestoreFilterInhabilitada() {
        return !this.isFuncionRestoreFilterHabilitada();
    }

    public boolean isFuncionReturnHabilitada() {
        if (designing) {
            return true;
        }
        return (this.isFilaDisponible() && this.isValorRetornoRecursoDisponible()
                && this.getPaginaActualizacion().getRecursoDataProvider().isLoteSinCambios());
    }

    public boolean isFuncionReturnInhabilitada() {
        return !this.isFuncionReturnHabilitada();
    }

    public boolean isFuncionReturnFilaEscogidaHabilitada() {
        if (designing) {
            return true;
        }
        return (this.isFilaEscogidaDisponible() && this.isValorRetornoRecursoDisponible()
                && this.getPaginaActualizacion().getRecursoDataProvider().isLoteSinCambios());
    }

    public boolean isFuncionReturnFilaEscogidaInhabilitada() {
        return !this.isFuncionReturnFilaEscogidaHabilitada();
    }

    public boolean isFuncionReturnVisible() {
        if (designing) {
            return true;
        }
        return this.getPaginaActualizacion().getContextoSesion().getOpcionCampoRetorno() != null;
    }

    public boolean isFuncionReturnInvisible() {
        return !this.isFuncionReturnVisible();
    }

    public boolean isFuncionPickItemHabilitada() {
        return true;
    }

    public boolean isFuncionPickItemInhabilitada() {
        return !this.isFuncionPickItemHabilitada();
    }

    public boolean isFuncionOpenLinkHabilitada() {
        if (designing) {
            return true;
        }
        return this.isFilaEscogidaDisponible() && this.isLoteSinCambios();
    }

    public boolean isFuncionOpenLinkInhabilitada() {
        return !this.isFuncionOpenLinkHabilitada();
    }

    public boolean isFilaDisponible() {
        if (designing) {
            return true;
        }
        return this.getPaginaActualizacion().getRecursoDataProvider().isRowAvailable(this.getCurrentRowKey());
    }

    public boolean isFilaNoDisponible() {
        if (designing) {
            return true; /* OJO: para que muestre el correspondiente grid de la P2 */
        }
        return !this.isFilaDisponible();
    }

    public boolean isFilaEscogida() {
        if (designing) {
            return false; /* OJO: para que las filas de la tabla no aparezcan todas resaltadas */
        }
        return this.getPaginaActualizacion().getRecursoDataProvider().esFilaEscogida(this.getCurrentRowKey());
    }

    public boolean isFilaEscogidaDisponible() {
        if (designing) {
            return true;
        }
        return (this.getPaginaActualizacion().getRecursoDataProvider()
                .isRowAvailable(this.getPaginaActualizacion().getRecursoDataProvider().getFilaEscogida()));
    }

    public boolean isFilaEscogidaNoDisponible() {
        return !this.isFilaEscogidaDisponible();
    }

    public boolean isFilaCreada() { /* 14/08/2007 "Fila procesada por FuncionCrearRecurso" */
        if (designing) {
            return true;
        }
        return (this.getPaginaActualizacion().getRecursoDataProvider().esFilaProcesada(this.getCurrentRowKey())
                && this.getPaginaActualizacion().getRecursoDataProvider().isFuncionInsertEjecutada()
                && this.getPaginaActualizacion().getRecursoDataProvider().getFuncionInsert() == this
                        .getPaginaActualizacion().getFuncionCrearRecurso());
    }

    public boolean isFilaNoCreada() { /* 14/08/2007 "Fila no procesada por FuncionCrearRecurso" */
        return !this.isFilaCreada();
    }

    public boolean isFilaModificada() { /* 14/08/2007 "Fila procesada por FuncionModificarRecurso" */
        if (designing) {
            return true;
        }
        return (this.getPaginaActualizacion().getRecursoDataProvider().esFilaProcesada(this.getCurrentRowKey())
                && this.getPaginaActualizacion().getRecursoDataProvider().isFuncionUpdateEjecutada()
                && this.getPaginaActualizacion().getRecursoDataProvider().getFuncionUpdate() == this
                        .getPaginaActualizacion().getFuncionModificarRecurso());
    }

    public boolean isFilaNoModificada() { /* 14/08/2007 "Fila no procesada por FuncionModificarRecurso" */
        return !this.isFilaModificada();
    }

    public boolean isFilaProcesada() {
        if (designing) {
            return true;
        }
        // 19/06/2007 a partir de hoy significa "Fila procesada por FuncionCrearRecurso o FuncionModificarRecurso"
        if (this.getPaginaActualizacion().getRecursoDataProvider().esFilaProcesada(this.getCurrentRowKey())) {
            if (this.getPaginaActualizacion().getRecursoDataProvider().isFuncionInsertEjecutada()) {
                return (this.getPaginaActualizacion().getRecursoDataProvider().getFuncionInsert() == this
                        .getPaginaActualizacion().getFuncionCrearRecurso());
            }
            if (this.getPaginaActualizacion().getRecursoDataProvider().isFuncionUpdateEjecutada()) {
                return (this.getPaginaActualizacion().getRecursoDataProvider().getFuncionUpdate() == this
                        .getPaginaActualizacion().getFuncionModificarRecurso());
            }
        }
        return false;
    }

    public boolean isFilaNoProcesada() {
        return !this.isFilaProcesada();
    }

    public boolean isFilaDisponibleProcesada() {
        return this.isFilaDisponible() && this.isFilaProcesada();
    }

    public boolean isFilaDisponibleNoProcesada() {
        return this.isFilaDisponible() && this.isFilaNoProcesada();
    }

    public boolean isFilaConCambios() {
        if (designing) {
            return true;
        }
        try {
            return (this.getPaginaActualizacion().getRecursoDataProvider().getCachedRowSet().rowInserted()
                    || this.getPaginaActualizacion().getRecursoDataProvider().getCachedRowSet().rowUpdated()
                    || this.getPaginaActualizacion().getRecursoDataProvider().getCachedRowSet().rowDeleted());
        } catch (Exception ex) {
            this.handle(ex);
        }
        return false;
    }

    public boolean isFilaSinCambios() {
        if (designing) {
            return true;
        }
        return !this.isFilaConCambios();
    }

    public boolean isLoteConCambios() {
        if (designing) {
            return true;
        }
        return this.getPaginaActualizacion().getRecursoDataProvider().isLoteConCambios();
    }

    public boolean isLoteSinCambios() {
        if (designing) {
            return true;
        }
        return !this.isLoteConCambios();
    }

    public boolean isLoteConFilas() {
        if (designing) {
            return true;
        }
        return this.getPaginaActualizacion().getRecursoDataProvider().isLoteConFilas();
    }

    public boolean isLoteSinFilas() {
        if (designing) {
            return true;
        }
        return !this.isLoteConFilas();
    }

    //  public boolean isLoteConFilasEliminadas() {
    //      if (designing) {
    //          return true;
    //      }
    //      return this.getPaginaActualizacion().getRecursoDataProvider().isLoteConFilasEliminadas();
    //  }
    //
    //  public boolean isLoteSinFilasEliminadas() {
    //      return !this.isLoteConFilasEliminadas();
    //  }
    //
    /**
     * Conserva el valor de la propiedad nuevaPosicionCursor.
     */
    private boolean nuevaPosicionCursor = false;

    /**
     * Getter para propiedad nuevaPosicionCursor.
     *
     * @return Valor de la propiedad nuevaPosicionCursor.
     */
    public boolean isNuevaPosicionCursor() {
        return this.nuevaPosicionCursor;
    }

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

    public String getMensajeCambiosPorConfirmar() {
        if (designing) {
            return this.getDesignTimeString("getMensajeCambiosPorConfirmar");
        }
        return this.getPaginaActualizacion().getRecursoDataProvider().getMensajeCambiosPorConfirmar();
    }

    public String getMensajeCambiosPorDescartar() {
        if (designing) {
            return this.getDesignTimeString("getMensajeCambiosPorDescartar");
        }
        return this.getPaginaActualizacion().getRecursoDataProvider().getMensajeCambiosPorDescartar();
    }

    public String getMensajeFilaNoDisponible() {
        if (designing) {
            return this.getDesignTimeString("getMensajeFilaNoDisponible");
        }
        String mensaje1 = this.getPaginaActualizacion().getRecursoDataProvider().getMensajeCambiosPorConfirmar();
        String mensaje2 = this.getMensaje();
        String mensaje3 = Bitacora.getTextoMensaje(CBM2.NO_CHANGES_TO_COMMIT);
        return mensaje1 == null ? mensaje2 == null ? mensaje3 : mensaje2 : mensaje1;
    }

    /**
     * Conserva el valor de la propiedad peticionInsert.
     */
    private boolean peticionInsert = false;

    /**
     * Getter para propiedad peticionInsert.
     *
     * @return Valor de la propiedad peticionInsert.
     */
    public boolean isPeticionInsert() {
        return this.peticionInsert;
    }

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

    /**
     * Conserva el valor de la propiedad reposicionPendiente.
     */
    private boolean reposicionPendiente = false;

    /**
     * Getter para propiedad reposicionPendiente.
     *
     * @return Valor de la propiedad reposicionPendiente.
     */
    public boolean isReposicionPendiente() {
        return this.reposicionPendiente;
    }

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

    /**
     * Conserva el valor de la propiedad consultaPendiente.
     */
    private boolean consultaPendiente = false;

    /**
     * Getter para propiedad consultaPendiente.
     *
     * @return Valor de la propiedad consultaPendiente.
     */
    public boolean isConsultaPendiente() {
        return this.consultaPendiente;
    }

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

    /**
     * Conserva el valor de la propiedad iniciacionPendiente.
     */
    private boolean iniciacionPendiente = false;

    /**
     * Getter para propiedad iniciacionPendiente.
     *
     * @return Valor de la propiedad iniciacionPendiente.
     */
    public boolean isIniciacionPendiente() {
        return this.iniciacionPendiente;
    }

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

    /**
     * Conserva el valor de la propiedad readOnlyProcessing.
     */
    private boolean readOnlyProcessing = false;

    /**
     * Getter para propiedad readOnlyProcessing.
     *
     * @return Valor de la propiedad readOnlyProcessing.
     */
    public boolean isReadOnlyProcessing() {
        return this.readOnlyProcessing;
    }

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

    public String getTituloConsulta() {
        if (designing) {
            return this.getDesignTimeString("getTituloConsulta");
        }
        String titulo = this.getPaginaActualizacion().getRecursoDataProvider().getNombreDominioRecurso();
        if (this.isPaginaConsultaConMaestro()) {
            String detalle = this.getPaginaConsultaConMaestro().getEtiquetaClaseDetalle();
            String maestro = this.getPaginaConsultaConMaestro().getEtiquetaClaseMaestro();
            if (StringUtils.isNotBlank(detalle)) {
                String etiqueta = detalle.trim();
                if (StringUtils.isNotBlank(maestro)) {
                    etiqueta += " " + maestro.trim();
                }
                titulo = this.getPaginaConsultaConMaestro().getRecursoMaestroDataProvider()
                        .getDenominacionFilaEscogida(etiqueta);
            }
        } else if (this.isPaginaConsultaConArbol() || this.isPaginaConsultaConTabla()) {
        } else {
            String detalle = this.getPaginaActualizacion().getEtiquetaClaseDetalle();
            if (StringUtils.isNotBlank(detalle)) {
                String etiqueta = detalle.trim();
                titulo = this.getPaginaActualizacion().getRecursoDataProvider()
                        .getDenominacionFilaEscogida(etiqueta);
            }
        }
        return titulo;
    }

    @Override
    protected String getToolTipHipervinculoMigasPan() {
        if (designing) {
            return null;
        }
        //      if (this.getPaginaActualizacion().getRecursoDataProvider().isFilaEscogidaDisponible()) {
        //          return this.getPaginaActualizacion().getRecursoDataProvider().getDenominacionFilaEscogida();
        //      } else {
        //          return this.getTituloConsulta();
        //      }
        return this.getTituloConsulta();
    }

    @Override
    protected String getMensajePeticionPorOmision() {
        return this.getMensajeCambiosPorConfirmar();
    }

    public String getValorRetornoRecursoActual() {
        if (designing) {
            return null;
        }
        return this.getValorRetornoRecurso(this.getCurrentRowKey());
    }

    public void setValorRetornoRecursoActual(String valor) {
        this.track("setValorRetornoRecursoActual", "valor=" + valor);
    }

    public String getValorRetornoRecursoEscogido() {
        if (designing) {
            return null;
        }
        return this
                .getValorRetornoRecurso(this.getPaginaActualizacion().getRecursoDataProvider().getFilaEscogida());
    }

    public void setValorRetornoRecursoEscogido(String valor) {
        this.track("setValorRetornoRecursoEscogido", "valor=" + valor);
    }

    protected String getValorRetornoRecurso(RowKey rowKey) {
        if (designing) {
            return null;
        }
        this.track("getValorRetornoRecurso", "RowKey=" + rowKey);
        try {
            if (this.getPaginaActualizacion().getRecursoDataProvider().isRowAvailable(rowKey)) {
                String opcion = this.getPaginaActualizacion().getContextoSesion().getOpcionCampoRetorno();
                if (StringUtils.isBlank(opcion)
                        || opcion.equals(String.valueOf(EnumOpcionAbrirVentana.BUSCAR_ID.intValue()))) {
                    if (this.getPaginaActualizacion().getRecursoDataProvider().isRecursoIdentificable()) {
                        return STP.getString(
                                this.getRecursoIdentificableDataProvider().getIdentificacionRecurso(rowKey));
                    }
                } else {
                    if (opcion.equals(String.valueOf(EnumOpcionAbrirVentana.BUSCAR_CODIGO.intValue()))) {
                        if (this.getPaginaActualizacion().getRecursoDataProvider().isRecursoCodificable()) {
                            return this.getRecursoCodificableDataProvider().getCodigoRecurso(rowKey);
                        } else if (this.getPaginaActualizacion().getRecursoDataProvider()
                                .isRecursoIdentificable()) {
                            return Global.PREFIJO_STRING_ID_RECURSO
                                    + this.getRecursoIdentificableDataProvider().getIdentificacionRecurso(rowKey);
                        }
                    } else {
                        Object obj = this.getPaginaActualizacion().getRecursoDataProvider().getValue(opcion,
                                rowKey);
                        if (obj != null) {
                            if (obj instanceof Long) {
                                return Global.PREFIJO_STRING_ID_RECURSO + obj;
                            } else {
                                return STP.getString(obj);
                            }
                        }
                    }
                }
            }
        } catch (Exception ex) {
            Bitacora.logTrace(ex);
        }
        return null;
    }

    private boolean isValorRetornoRecursoDisponible() {
        String opcion = this.getPaginaActualizacion().getContextoSesion().getOpcionCampoRetorno();
        if (StringUtils.isBlank(opcion)) {
            return false;
        }
        if (opcion.equals(String.valueOf(EnumOpcionAbrirVentana.BUSCAR_ID.intValue()))) {
            return this.getPaginaActualizacion().getRecursoDataProvider().isRecursoIdentificable();
        }
        if (opcion.equals(String.valueOf(EnumOpcionAbrirVentana.BUSCAR_CODIGO.intValue()))) {
            return (this.getPaginaActualizacion().getRecursoDataProvider().isRecursoCodificable()
                    || this.getPaginaActualizacion().getRecursoDataProvider().isRecursoIdentificable());
        }
        return this.getPaginaActualizacion().getRecursoDataProvider().isColumnaDisponible(opcion);
    }
    // </editor-fold>

    @Override
    protected void autorizar() {
        this.track("autorizar");
        long funcion = this.getPaginaActualizacion().getFuncionConsultarRecurso();
        this.paginaAutorizada = funcion == -1L || TLC.getControlador().esFuncionAutorizada(funcion);
    }

    @Override
    public void iniciar() {
        super.iniciar();
        this.iniciarDataProvider();
        this.setReposicionPendiente(true);
        //      this.setConsultaPendiente(this.isRestauracion());
        this.setConsultaPendiente(false);
        this.setPeticionProcesada(false);
        this.setPeticionInsert(false);
    }

    private void iniciarDataProvider() {
        int limite = this.getLimiteFilasFuncionSelect();
        String tabla = null;
        this.getPaginaActualizacion().getRecursoDataProvider().setLimiteFilasFuncionSelect(limite);
        if (this.isPaginaConsultaConMaestro()) {
            tabla = this.getPaginaConsultaConMaestro().getRecursoMaestroDataProvider().getTablaDestino();
        }
        this.getPaginaActualizacion().getRecursoDataProvider().setTablaMaestro(tabla);
    }

    private int getLimiteFilasFuncionSelect() {
        String dominio = this.getPaginaActualizacion().getRecursoDataProvider().getCodigoDominioRecurso();
        String string = BundleDominios.getLimiteFilasFuncionSelect(dominio);
        int limite = StringUtils.isNotBlank(string) && StringUtils.isNumeric(string) ? Integer.valueOf(string) : -1;
        return limite < 0 ? LIMITE_FILAS_FUNCION_SELECT : limite;
    }

    @Override
    public void preprocesar() { /* no se ejecuta si al apenas abrir la pagina se hace click en un link con url */
        super.preprocesar();
        this.inicializarFunciones(true);
        this.reposicionar(); /* no es necesario si es PaginaConsultaConTabla  */
    }

    @Override
    public void prepresentar() {
        this.track("prepresentar");
        this.setIniciacionPendiente(false);
        boolean consultaInsert = this.isConsultaInsert();
        boolean consultaValida = !consultaInsert && this.isConsultaValida();
        boolean reinicioFiltro = this.isReinicio()
                && this.getPaginaActualizacion().getContextoPeticion().getCriteriosBusqueda() != null;
        //      this.trace();
        //      this.trace("consultaInsert=" + consultaInsert);
        //      this.trace("consultaValida=" + consultaValida);
        //      this.trace("reinicioFiltro=" + reinicioFiltro);
        if (consultaInsert && this.isRetruque()) {
            this.retrucarAgregar();
        } else if (consultaValida && this.isRetruque()) {
            this.retrucar();
        } else if (reinicioFiltro || this.isConsultaPendiente() || this.isPaginaConsultaConMaestro()
                || this.isPaginaConsultaSinFiltro()) {
            this.inquirir();
        } else if (consultaValida && this.getPaginaActualizacion().getRecursoDataProvider().isLoteSinCambios()) {
            this.continuar();
        } else if (consultaValida && this.getPaginaActualizacion().getRecursoDataProvider().isLoteConCambios()) {
            this.refrescar();
        } else if (this.getPaginaActualizacion().getRecursoDataProvider().getLimiteFilasFuncionSelect() > 0) {
            this.iniciarConsulta();
        } else {
            this.inquirir();
        }
        this.posprepresentar();
    }

    private void trace() {
        this.track("trace@GestorPaginaActualizacion");
        this.trace("isRecursion=" + this.isRecursion());
        this.trace("isReinicio=" + this.isReinicio());
        this.trace("isRestauracion=" + this.isRestauracion());
        this.trace("isRetorno=" + this.isRetorno());
        this.trace("isRetruque=" + this.isRetruque());
        this.trace("isConsultaPendiente=" + this.isConsultaPendiente());
        this.trace("isPaginaConsultaConMaestro=" + this.isPaginaConsultaConMaestro());
        this.trace("isPaginaConsultaSinFiltro=" + this.isPaginaConsultaSinFiltro());
        this.trace("isLoteSinCambios=" + this.getPaginaActualizacion().getRecursoDataProvider().isLoteSinCambios());
        this.trace("isLoteConCambios=" + this.getPaginaActualizacion().getRecursoDataProvider().isLoteConCambios());
        this.trace("getLimiteFilasFuncionSelect="
                + this.getPaginaActualizacion().getRecursoDataProvider().getLimiteFilasFuncionSelect());
    }

    // <editor-fold defaultstate="collapsed">
    //  private boolean isConsultaConLimiteConFiltroSinMaestro() {
    //      return !this.isConsultaPendiente() &&
    //              this.getPaginaActualizacion().getRecursoDataProvider().getLimiteFilasFuncionSelect() != 0 &&
    //              this.isPaginaConsultaConFiltro() && !this.isPaginaConsultaConMaestro();
    //  }
    // </editor-fold>
    protected void retrucarAgregar() {
        this.track("retrucarAgregar");
        if (this.isConsultaPendiente()) {
            this.consultar();
        } else if (this.getPaginaActualizacion().getRecursoDataProvider().isLoteSinCambios()) {
            TLC.getBitacora().info(Bundle.getString("filtro_solo_filas_agregadas"));
        }
        this.continuar();
    }

    protected void retrucar() {
        this.track("retrucar");
        if (this.isConsultaPendiente()) {
            this.consultar();
        }
        this.continuar();
    }

    protected void continuar() {
        this.track("continuar");
        // OJO: reposicionar() y cursorSet(0) no son necesarios si es PaginaConsultaConTabla, pero no hacen dao
        if (this.isReposicionPendiente()) {
            this.reposicionar();
        } else {
            this.cursorSet(0); /* OJO con la constante: reposicionar [+ cursorNext [+ cursorFirst]] */
        }
    }

    protected void iniciarConsulta() {
        this.track("iniciarConsulta");
        try {
            this.getPaginaActualizacion().getRecursoDataProvider()
                    .setFuncionSelect(this.getPaginaActualizacion().getFuncionConsultarRecurso());
            if (this.isReinicio()) {
                this.getPaginaActualizacion().getRecursoDataProvider().setCriteriosBusqueda(
                        this.getPaginaActualizacion().getContextoPeticion().getCriteriosBusqueda());
            }
            this.getPaginaActualizacion().getRecursoDataProvider().setComandoEmptyCachedRowSet();
            this.getPaginaActualizacion().getRecursoDataProvider().setFiltroEscondido(false);
            TLC.getBitacora().warn(CBM2.SELECT_SET_SEARCH_CRITERIA,
                    this.getPaginaActualizacion().getRecursoDataProvider().getLimiteFilasFuncionSelect());
        } catch (ExcepcionAplicacion ex) {
            Bitacora.logError(ex);
            this.inquirir();
        }
    }

    protected void inquirir() {
        this.track("inquirir");
        this.consultar();
        if (this.getPaginaActualizacion().getRecursoDataProvider().isFuncionSelectAutorizada()) {
            this.inicializarFunciones(true);
            this.setIniciacionPendiente(true);
            this.getPaginaActualizacion().posconsultar();
            if (this.isRetruque() || this.isPaginaConsultaSinFiltro()) {
            } else {
                this.getPaginaActualizacion().getRecursoDataProvider().setFiltroEscondido(true);
            }
        }
    }

    // <editor-fold defaultstate="collapsed" desc="metodos estandar para consultar">
    protected void consultar() {
        this.track("consultar");
        this.setConsultaPendiente(true);
        if (this.isReinicio()) {
            this.getPaginaActualizacion().getRecursoDataProvider().setCriteriosBusqueda(
                    this.getPaginaActualizacion().getContextoPeticion().getCriteriosBusqueda());
            this.consultarPorIdentificacionRecurso();
            if (this.isConsultaPendiente()) {
                this.consultarMaestroPorIdentificacionRecursoMaestro();
            }
        }
        if (this.isConsultaPendiente()) {
            this.getPaginaActualizacion().consultar();
            if (this.isConsultaInsert()) {
            } else {
                this.getPaginaActualizacion().getRecursoDataProvider().storeQuery();
            }
        }
        if (this.isConsultaPendiente()) {
            this.release(); /* OJO: realmente hay que retornar un rowset vacio? */
        } else {
            if (this.getPaginaActualizacion().getRecursoDataProvider().isFuncionSelectAutorizada()) {
                this.setVersionComandoSelectPagina();
                this.setMaestroPagina();
                this.setNuevaPosicionCursor(true);
            } else {
                this.release(); /* OJO: realmente hay que retornar un rowset vacio? */
            }
        }
        this.descartarFormulariosVirtuales();
    }

    protected void consultarPorIdentificacionRecurso() {
        // consulta y posiciona el cursor utilizando la identificacion del recurso
        this.track("consultarPorIdentificacionRecurso");
        if (this.getPaginaActualizacion().getRecursoDataProvider().isRecursoIdentificable()) {
            String clave = this.getRecursoIdentificableDataProvider().getColumnaIdentificacionRecurso();
            Long valor = this.getPaginaActualizacion().getContextoPeticion().getIdentificacionRecurso();
            // this.trace(clave + "=" + valor);
            if (valor != null) {
                RowKey rowKey = this.getRowRecurso(clave, valor);
                if (rowKey != null) {
                    this.posicionar(rowKey);
                    this.setConsultaPendiente(false);
                    if (this.isPaginaConsultaConMaestro()) {
                        this.consultarMaestroPorColumnaIdentificacionRecursoMaestro();
                    }
                }
            }
        }
    }

    protected RowKey getRowRecurso(String clave, Object valor) {
        this.track("getRow", clave + "=" + valor);
        RowKey rowKey = null;
        try {
            if (this.getPaginaActualizacion().getRecursoDataProvider().isRecursoConsultable()) {
                //              FiltroBusqueda filtroBusqueda = new FiltroBusqueda(this.getRecursoDataProviderDataSourceName());
                FiltroBusqueda filtroBusqueda = new FiltroBusqueda();
                filtroBusqueda.addCriterio(clave, valor);
                long funcion = this.getPaginaActualizacion().getFuncionConsultarRecurso();
                this.getPaginaActualizacion().getRecursoDataProvider().setFuncionSelect(funcion);
                this.getRecursoConsultableDataProvider().ejecutarFuncionSelect(filtroBusqueda);
                if (this.getPaginaActualizacion().getRecursoDataProvider().cursorFirst()) {
                    rowKey = this.getPaginaActualizacion().getRecursoDataProvider().getCursorRow();
                }
            }
        } catch (Exception ex) {
            rowKey = null;
        }
        return this.getPaginaActualizacion().getRecursoDataProvider().isRowAvailable(rowKey) ? rowKey : null;
    }

    protected void consultarMaestroPorIdentificacionRecursoMaestro() {
        this.track("consultarMaestroPorIdentificacionRecursoMaestro");
        if (this.isPaginaConsultaConMaestro()) {
            if (this.getPaginaConsultaConMaestro().getRecursoMaestroDataProvider().isRecursoIdentificable()) {
                String clave = this.getRecursoMaestroIdentificableDataProvider().getColumnaIdentificacionRecurso();
                Long valor = this.getPaginaActualizacion().getContextoPeticion().getIdentificacionRecursoMaestro();
                // this.trace(clave + "=" + valor);
                if (valor != null) {
                    this.getRowMaestro(clave, valor);
                }
            }
        }
    }

    protected void consultarMaestroPorColumnaIdentificacionRecursoMaestro() {
        this.track("consultarMaestroPorColumnaIdentificacionRecursoMaestro");
        if (this.isPaginaConsultaConMaestro()) {
            if (this.getPaginaConsultaConMaestro().getRecursoMaestroDataProvider().isRecursoIdentificable()) {
                String columna = this.getPaginaConsultaConMaestro().getColumnaIdentificacionRecursoMaestro();
                Long valor = (Long) this.getPaginaActualizacion().getRecursoDataProvider().getValue(columna);
                // this.trace(columna + "=" + valor);
                if (valor != null) {
                    String clave = this.getRecursoMaestroIdentificableDataProvider()
                            .getColumnaIdentificacionRecurso();
                    this.getRowMaestro(clave, valor);
                }
            }
        }
    }

    protected RowKey getRowMaestro(String clave, Object valor) {
        this.track("getRowMaestro", clave + "=" + valor);
        RowKey rowKey = null;
        if (this.isPaginaConsultaConMaestro()) {
            try {
                if (this.getPaginaConsultaConMaestro().getRecursoMaestroDataProvider().isRecursoConsultable()) {
                    //                  FiltroBusqueda filtroBusqueda = new FiltroBusqueda(this.getRecursoMaestroDataProviderDataSourceName());
                    FiltroBusqueda filtroBusqueda = new FiltroBusqueda();
                    filtroBusqueda.addCriterio(clave, valor);
                    // int funcion = this.getRecursoMaestroConsultableDataProvider().getFuncionConsultarRecurso();
                    // this.getPaginaConsultaConMaestro().getRecursoMaestroDataProvider().setFuncionSelect(funcion);
                    this.getRecursoMaestroConsultableDataProvider().ejecutarFuncionSelect(filtroBusqueda);
                    if (this.getPaginaConsultaConMaestro().getRecursoMaestroDataProvider().cursorFirst()) {
                        rowKey = this.getPaginaActualizacion().getRecursoDataProvider().getCursorRow();
                    }
                }
            } catch (Exception ex) {
                rowKey = null;
            }
        }
        return this.getPaginaConsultaConMaestro().getRecursoMaestroDataProvider().isRowAvailable(rowKey) ? rowKey
                : null;
    }

    protected void setVersionComandoSelectPagina() {
        long version = this.getPaginaActualizacion().getRecursoDataProvider().getVersionComandoSelect();
        this.getPaginaActualizacion().getContextoSesion().setVersionComandoSelectPagina(this.getClavePagina(),
                version);
    }

    protected void setMaestroPagina() {
        String p = this.getClavePagina();
        String c = this.isPaginaConsultaConMaestro() ? this.getColumnaIdentificacionRecursoMaestro() : null;
        Long irm = this.isPaginaConsultaConMaestro() ? this.getIdentificacionRecursoMaestro() : null;
        this.getPaginaActualizacion().getContextoSesion().setColumnaIdentificacionRecursoMaestroPagina(p, c);
        this.getPaginaActualizacion().getContextoSesion().setIdentificacionRecursoMaestroPagina(p, irm);
    }

    protected boolean release() {
        this.track("release");
        this.setConsultaPendiente(false);
        boolean ok = false;
        try {
            this.getPaginaActualizacion().getRecursoDataProvider().release();
            ok = true;
        } catch (SQLException ex) {
            this.handle(ex);
        } finally {
            return ok;
        }
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="metodos estandar para posicionar/reposicionar">
    public boolean reposicionar() {
        RowKey rowKey = this.getPaginaActualizacion().getRecursoDataProvider().getFilaEscogida();
        return this.posicionar(rowKey);
    }

    public boolean posicionar(
            Long identificacion) { /* posiciona el cursor utilizando la identificacion del recurso */
        this.track("posicionar", "identificacion=" + identificacion);
        RowKey rowKey = null;
        if (this.getPaginaActualizacion().getRecursoDataProvider().isRecursoIdentificable()) {
            String clave = this.getRecursoIdentificableDataProvider().getColumnaIdentificacionRecurso();
            Long valor = identificacion;
            // this.trace(clave + "=" + valor);
            if (valor != null && this.getPaginaActualizacion().getRecursoDataProvider().isLoteConFilas()) {
                rowKey = this.getPaginaActualizacion().getRecursoDataProvider().findFirst(clave, valor);
            }
        }
        return this.posicionar(rowKey);
    }

    public boolean posicionar(String codigo) { /* posiciona el cursor utilizando el codigo del recurso */
        this.track("posicionar", "codigo=" + codigo);
        RowKey rowKey = null;
        if (this.getPaginaActualizacion().getRecursoDataProvider().isRecursoCodificable()) {
            String clave = this.getRecursoCodificableDataProvider().getColumnaCodigoRecurso();
            String valor = codigo;
            // this.trace(clave + "=" + valor);
            if (valor != null && this.getPaginaActualizacion().getRecursoDataProvider().isLoteConFilas()) {
                rowKey = this.getPaginaActualizacion().getRecursoDataProvider().findFirst(clave, valor);
            }
        }
        return this.posicionar(rowKey);
    }

    protected boolean posicionar(RowKey rowKey) {
        this.track("posicionar", "RowKey=" + rowKey);
        this.setReposicionPendiente(false);
        boolean ok = false;
        try {
            if (this.getPaginaActualizacion().getRecursoDataProvider().isRowAvailable(rowKey)) {
                this.getPaginaActualizacion().getRecursoDataProvider().setCursorRow(rowKey);
                this.getPaginaActualizacion().getRecursoDataProvider().setFilaEscogida(rowKey);
                ok = true;
            }
        } catch (Exception ex) {
            this.handle(ex);
        } finally {
            return ok;
        }
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="metodos estandar para obtener el filtro de busqueda">
    public FiltroBusqueda getFiltroBusqueda(Long filtro, String codigo, String nombre) {
        return this.getFiltroBusqueda(filtro, codigo, nombre, null);
    }

    public FiltroBusqueda getFiltroBusqueda(Long filtro, Long segmento) {
        return this.getFiltroBusqueda(filtro, null, null, segmento);
    }

    public FiltroBusqueda getFiltroBusqueda(Long filtro, String codigo, String nombre, Long segmento) {
        this.track("getFiltroBusqueda", "filtro=" + filtro, "codigo=" + codigo, "nombre=" + nombre,
                "segmento=" + segmento);
        this.getPaginaActualizacion().getRecursoDataProvider().setFiltroFuncionSelect(filtro);
        this.getPaginaActualizacion().getRecursoDataProvider().setCodigoFuncionSelect(null);
        this.getPaginaActualizacion().getRecursoDataProvider().setNombreFuncionSelect(null);
        this.getPaginaActualizacion().getRecursoDataProvider().setSegmentoFuncionSelect(null);
        FiltroBusqueda filtroBusqueda;
        if (filtro == null) {
            //          filtroBusqueda = new FiltroBusqueda(this.getRecursoDataProviderDataSourceName());
            filtroBusqueda = new FiltroBusqueda();
        } else {
            //          filtroBusqueda = new FiltroBusqueda(this.getRecursoDataProviderDataSourceName(), filtro);
            filtroBusqueda = new FiltroBusqueda(filtro);
        }
        if (StringUtils.isNotBlank(codigo)
                && this.getPaginaActualizacion().getRecursoDataProvider().isRecursoCodificable()) {
            filtroBusqueda.addCriterio(this.getRecursoCodificableDataProvider().getColumnaCodigoRecurso(),
                    this.getOperadorCom(codigo), this.getValorComparacion(codigo));
        }
        if (StringUtils.isNotBlank(nombre)
                && this.getPaginaActualizacion().getRecursoDataProvider().isRecursoNombrable()) {
            filtroBusqueda.addCriterio(this.getRecursoNombrableDataProvider().getColumnaNombreRecurso(),
                    this.getOperadorCom(nombre), this.getValorComparacion(nombre));
        }
        if (segmento != null && this.getPaginaActualizacion().getRecursoDataProvider().isRecursoSegmentable()) {
            filtroBusqueda.addCriterio(this.getRecursoSegmentableDataProvider().getColumnaSegmentoRecurso(),
                    EnumOperadorCom.ES_IGUAL, segmento);
        }
        String columna;
        Long maestro;
        if (this.isPaginaConsultaConMaestro()) {
            columna = this.getColumnaIdentificacionRecursoMaestro();
            maestro = this.getIdentificacionRecursoMaestro();
        } else {
            columna = null;
            maestro = null;
        }
        if (columna != null) {
            if (maestro == null) {
                filtroBusqueda.addCriterio(columna, true); /* OJO: rowset de filas SIN maestro? */
            } else {
                filtroBusqueda.addCriterio(columna, EnumOperadorCom.ES_IGUAL, maestro);
            }
        }
        /**/
        this.getPaginaActualizacion().getRecursoDataProvider().setCodigoFuncionSelect(codigo);
        this.getPaginaActualizacion().getRecursoDataProvider().setNombreFuncionSelect(nombre);
        this.getPaginaActualizacion().getRecursoDataProvider().setSegmentoFuncionSelect(segmento);
        this.getPaginaActualizacion().getRecursoDataProvider().setColumnaMaestro(columna);
        this.getPaginaActualizacion().getRecursoDataProvider().setIdentificacionMaestro(maestro);
        /**/
        return filtroBusqueda;
    }

    //  public FiltroBusqueda getFiltroBusqueda(String clave, Long valor) {
    //      this.track("getFiltroBusqueda", "clave=" + clave, "valor=" + valor);
    ////    FiltroBusqueda filtroBusqueda = new FiltroBusqueda(this.getRecursoDataProviderDataSourceName());
    //      FiltroBusqueda filtroBusqueda = new FiltroBusqueda();
    //      filtroBusqueda.addCriterio(clave, valor);
    //      return filtroBusqueda;
    //  }
    //
    private EnumOperadorCom getOperadorCom(String string) {
        String not = "-";
        String any = TLC.getInterpreteSql().getLikeString();
        return StringUtils.isBlank(string) ? EnumOperadorCom.ES_NULO
                : string.startsWith(not + any) && string.endsWith(any) ? EnumOperadorCom.NO_CONTIENE
                        : string.startsWith(not + any) ? EnumOperadorCom.NO_TERMINA_EN
                                : string.startsWith(not) && string.endsWith(any) ? EnumOperadorCom.NO_COMIENZA_POR
                                        : string.startsWith(not) ? EnumOperadorCom.NO_ES_IGUAL
                                                : string.startsWith(any) && string.endsWith(any)
                                                        ? EnumOperadorCom.CONTIENE
                                                        : string.startsWith(any) ? EnumOperadorCom.TERMINA_EN
                                                                : string.endsWith(any)
                                                                        ? EnumOperadorCom.COMIENZA_POR
                                                                        : EnumOperadorCom.ES_IGUAL;
    }

    private String getValorComparacion(String string) {
        String not = "-";
        String any = TLC.getInterpreteSql().getLikeString();
        String valor = StringUtils.trimToNull(string);
        int endIndex = valor == null ? 0 : valor.length() - 1;
        valor = valor == null ? null // ES_NULO
                : valor.startsWith(not + any) && valor.endsWith(any) ? valor.substring(2, endIndex) // NO_CONTIENE
                        : valor.startsWith(not + any) ? valor.substring(2) // NO_TERMINA_EN
                                : valor.startsWith(not) && valor.endsWith(any) ? valor.substring(1, endIndex) // NO_COMIENZA_POR
                                        : valor.startsWith(not) ? valor.substring(1) // NO_ES_IGUAL
                                                : valor.startsWith(any) && valor.endsWith(any)
                                                        ? valor.substring(1, endIndex) // CONTIENE
                                                        : valor.startsWith(any) ? valor.substring(1) // TERMINA_EN
                                                                : valor.endsWith(any) ? valor.substring(0, endIndex) // COMIENZA_POR
                                                                        : valor; // ES_IGUAL
        /**/
        valor = StringUtils.trimToNull(valor);
        return valor == null ? null : valor.replace('/' + not + '/', not).replace('/' + any + '/', any);
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="metodos estandar para agregar">
    protected void appendRow(long funcion) throws ExcepcionAplicacion {
        this.track("appendRow", "funcion=" + funcion);
        this.setPeticionInsert(true);
        try {
            this.getPaginaActualizacion().getRecursoDataProvider().setFuncionInsert(funcion);
            RowKey rowKey = this.getPaginaActualizacion().getRecursoDataProvider().appendRow();
            this.getPaginaActualizacion().getRecursoDataProvider().setCursorRow(rowKey);
            this.getPaginaActualizacion().getRecursoDataProvider().setFilaEscogida(rowKey);
            this.setNuevaPosicionCursor(true);
            String columna;
            Long maestro;
            if (this.isPaginaConsultaConMaestro()) {
                columna = this.getColumnaIdentificacionRecursoMaestro();
                maestro = this.getIdentificacionRecursoMaestro();
            } else {
                columna = this.getPaginaActualizacion().getRecursoDataProvider().getColumnaMaestro();
                maestro = this.getPaginaActualizacion().getRecursoDataProvider().getIdentificacionMaestro();
            }
            if (columna != null && maestro != null) {
                this.trace(columna + "=" + maestro);
                this.getPaginaActualizacion().getRecursoDataProvider().setValue(columna, maestro);
            }
            this.getPaginaActualizacion().getRecursoDataProvider().setSegmento(rowKey);
        } catch (Exception ex) {
            throw ex instanceof ExcepcionAplicacion ? (ExcepcionAplicacion) ex : new ExcepcionAplicacion(ex);
        }
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="metodos estandar para el manejo de la tabla (inicializarFunciones...)">
    //  public void inicializarFuncionSelect() {
    //      this.inicializarFuncionSelect(false);
    //  }
    //
    //  public void inicializarFuncionSelect(boolean nohandle) {
    //      this.track("inicializarFuncionSelect", "nohandle=" + nohandle);
    //      EnumSeveridadMensaje severidad = TLC.getBitacora().getSeveridadMinima();
    //      if (nohandle) {
    //          TLC.getBitacora().setSeveridadMinima(EnumSeveridadMensaje.FATAL);
    //      }
    //      try {
    //          if (this.getPaginaActualizacion().getRecursoDataProvider().getFuncionSelect() < 0 && this.getPaginaActualizacion().getFuncionConsultarRecurso() > 0) {
    //              this.getPaginaActualizacion().getRecursoDataProvider().setFuncionSelect(this.getPaginaActualizacion().getFuncionConsultarRecurso());
    //          }
    //      } catch (ExcepcionAplicacion ex) {
    //          if (!nohandle) {
    //              this.handle(ex);
    //          }
    //      }
    //      TLC.getBitacora().setSeveridadMinima(severidad);
    //      if (this.getPaginaActualizacion().getRecursoDataProvider().isFuncionSelectAutorizada()) {
    //          this.inicializarFunciones(nohandle);
    //      }
    //  }
    //
    public void inicializarFunciones() {
        this.inicializarFunciones(false);
    }

    public void inicializarFunciones(boolean nohandle) {
        this.track("inicializarFunciones", "nohandle=" + nohandle);
        EnumSeveridadMensaje severidad = TLC.getBitacora().getSeveridadMinima();
        if (nohandle) {
            TLC.getBitacora().setSeveridadMinima(EnumSeveridadMensaje.FATAL);
        }
        try {
            if (this.getPaginaActualizacion().getRecursoDataProvider().getFuncionInsert() < 0
                    && this.getPaginaActualizacion().getFuncionCrearRecurso() > 0) {
                this.getPaginaActualizacion().getRecursoDataProvider()
                        .setFuncionInsert(this.getPaginaActualizacion().getFuncionCrearRecurso());
            }
        } catch (ExcepcionAplicacion ex) {
            if (!nohandle) {
                this.handle(ex);
            }
        }
        try {
            if (this.getPaginaActualizacion().getRecursoDataProvider().getFuncionUpdate() < 0
                    && this.getPaginaActualizacion().getFuncionModificarRecurso() > 0) {
                this.getPaginaActualizacion().getRecursoDataProvider()
                        .setFuncionUpdate(this.getPaginaActualizacion().getFuncionModificarRecurso());
            }
        } catch (ExcepcionAplicacion ex) {
            if (!nohandle) {
                this.handle(ex);
            }
        }
        try {
            if (this.getPaginaActualizacion().getRecursoDataProvider().getFuncionDelete() < 0
                    && this.getPaginaActualizacion().getFuncionEliminarRecurso() > 0) {
                this.getPaginaActualizacion().getRecursoDataProvider()
                        .setFuncionDelete(this.getPaginaActualizacion().getFuncionEliminarRecurso());
            }
        } catch (ExcepcionAplicacion ex) {
            if (!nohandle) {
                this.handle(ex);
            }
        }
        TLC.getBitacora().setSeveridadMinima(severidad);
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="metodos estandar para ejecutar las acciones de la pagina de actualizacion">
    public boolean irAlPrimero() {
        this.track("irAlPrimero");
        return this.cursorSet(1); /* OJO con la constante: cursorFirst */
    }

    public boolean irAlAnterior() {
        this.track("irAlAnterior");
        return this.cursorSet(2); /* OJO con la constante: cursorPrevious */
    }

    public boolean irAlSiguiente() {
        this.track("irAlSiguiente");
        return this.cursorSet(3); /* OJO con la constante: cursorNext */
    }

    public boolean irAlUltimo() {
        this.track("irAlUltimo");
        return this.cursorSet(4); /* OJO con la constante: cursorLast */
    }

    public boolean refrescar() {
        this.track("refrescar");
        return this.refresh();
    }

    public boolean reconsultar() {
        this.track("reconsultar");
        return this.requery();
    }

    public boolean agregar() {
        return this.agregar(this.getPaginaActualizacion().getFuncionCrearRecurso());
    }

    public boolean agregar(long funcion) {
        this.track("agregar", "funcion=" + funcion);
        try {
            this.appendRow(funcion);
            return true;
        } catch (Exception ex) {
            this.handle(ex);
        }
        return false;
    }

    public boolean editar() {
        return this.editar(this.getFuncionEdicionSeleccionada());
    }

    public boolean editar(long funcion) {
        this.track("editar", "funcion=" + funcion);
        try {
            if (this.isFilaEscogidaDisponible()) {
                RowKey rowKey = this.getPaginaActualizacion().getRecursoDataProvider().getFilaEscogida();
                this.getPaginaActualizacion().getRecursoDataProvider().setFuncionUpdate(funcion);
                this.getPaginaActualizacion().getRecursoDataProvider().editRow(rowKey);
                this.descartarFormulariosVirtuales();
                return true;
            }
            TLC.getBitacora().warn(CBM2.UPDATE_NONE);
        } catch (Exception ex) {
            this.handle(ex);
        }
        return false;
    }

    public boolean eliminar() {
        return this.eliminar(this.getPaginaActualizacion().getFuncionEliminarRecurso());
    }

    public boolean eliminar(long funcion) {
        this.track("eliminar", "funcion=" + funcion);
        try {
            if (this.isFilaEscogidaDisponible()) {
                RowKey rowKey = this.getPaginaActualizacion().getRecursoDataProvider().getFilaEscogida();
                this.getPaginaActualizacion().getRecursoDataProvider().setFuncionDelete(funcion);
                this.getPaginaActualizacion().getRecursoDataProvider().removeRow(rowKey);
                this.descartarFormulariosVirtuales();
                this.cursorSet(3, true); /* OJO con la constante: cursorNext [+ cursorFirst] */
                return true;
            }
            TLC.getBitacora().warn(CBM2.DELETE_NONE);
        } catch (Exception ex) {
            this.handle(ex);
        }
        return false;
    }

    public boolean aplicar() {
        //      this.track("aplicar");
        return true;
    }

    public boolean deshacer() {
        this.track("deshacer");
        try {
            if (this.isFilaEscogidaDisponible()) {
                RowKey rowKey = this.getPaginaActualizacion().getRecursoDataProvider().getFilaEscogida();
                this.getPaginaActualizacion().getRecursoDataProvider().undoRow(rowKey);
                this.descartarFormulariosVirtuales();
                this.cursorSet(0); /* OJO con la constante: reposicionar [+ cursorNext [+ cursorFirst]] */
                return true;
            }
            TLC.getBitacora().warn(CBM2.UNDO_CHANGES_NONE);
        } catch (Exception ex) {
            this.handle(ex);
        }
        return false;
    }

    public boolean confirmar() {
        this.track("confirmar");
        try {
            this.getPaginaActualizacion().getRecursoDataProvider().commitChanges();
            this.refresh();
            TLC.getBitacora().info(CBM2.COMMIT_CHANGES_OK);
            return true;
        } catch (Exception ex) {
            this.handle(ex);
        }
        return false;
    }

    public boolean descartar() {
        this.track("descartar");
        try {
            this.getPaginaActualizacion().getRecursoDataProvider().revertChanges();
            this.refresh();
            TLC.getBitacora().info(CBM2.REVERT_CHANGES_OK);
            return true;
        } catch (Exception ex) {
            this.handle(ex);
        }
        return false;
    }

    public boolean procesar() {
        return this.procesar(this.getFuncionAccionSeleccionada());
    }

    public boolean procesar(long funcion) {
        this.track("procesar", "funcion=" + funcion);
        try {
            if (this.isFilaEscogidaDisponible()) {
                RowKey rowKey = this.getPaginaActualizacion().getRecursoDataProvider().getFilaEscogida();
                this.getPaginaActualizacion().getRecursoDataProvider().setFuncionBusinessProcess(funcion);
                this.getPaginaActualizacion().getRecursoDataProvider().processRow(rowKey, funcion);
                this.refresh(); /* this.descartarFormulariosVirtuales(); */
                return true;
            }
            TLC.getBitacora().warn(CBM2.PROCESS_NONE);
        } catch (Exception ex) {
            this.handle(ex);
        }
        return false;
    }

    public boolean procesar(RowProcessor processor) {
        this.track("procesar", processor);
        try {
            if (this.isFilaEscogidaDisponible()) {
                RowKey rowKey = this.getPaginaActualizacion().getRecursoDataProvider().getFilaEscogida();
                TLC.getBitacora().info(CBM2.CHECK_CHANGES_1,
                        this.getPaginaActualizacion().getRecursoDataProvider().getEtiquetaRecurso(rowKey));
                processor.processRow(rowKey);
                TLC.getBitacora().warn(CBM2.PROCESS_EXECUTION_END, "");
                this.refresh(); /* this.descartarFormulariosVirtuales(); */
                return true;
            }
            TLC.getBitacora().warn(CBM2.PROCESS_NONE);
        } catch (Exception ex) {
            this.handle(ex);
        }
        return false;
    }

    public boolean procesar(String metodo) {
        this.track("procesar", metodo);
        try {
            if (this.isFilaEscogidaDisponible()) {
                Object object = this.getPaginaActualizacion();
                Method method = this.getPaginaActualizacion().getClass().getMethod(metodo,
                        new Class[] { RowKey.class });
                RowKey rowKey = this.getPaginaActualizacion().getRecursoDataProvider().getFilaEscogida();
                TLC.getBitacora().info(CBM2.CHECK_CHANGES_1,
                        this.getPaginaActualizacion().getRecursoDataProvider().getEtiquetaRecurso(rowKey));
                method.invoke(object, rowKey);
                TLC.getBitacora().warn(CBM2.PROCESS_EXECUTION_END, metodo);
                this.refresh(); /* this.descartarFormulariosVirtuales(); */
                return true;
            }
            TLC.getBitacora().warn(CBM2.PROCESS_NONE);
        } catch (Exception ex) {
            this.handle(ex);
        }
        return false;
    }

    public boolean retornar() {
        //      this.track("retornar");
        //      HttpServletRequest request = (HttpServletRequest) this.getPaginaActualizacion().getFacesContext().getExternalContext().getRequest();
        //      HttpSession session = request.getSession(false);
        //      session.invalidate();
        return true;
    }

    public boolean vincular() {
        return this.vincular(2); /* OJO con la constante: valida que el lote no tenga cambios */
    }

    public boolean vincular(int validacion) {
        return this.vincular(validacion, false);
    }

    //  public boolean vincular(boolean remover) {
    //      return this.vincular(2, remover); /* OJO con la constante: valida que el lote no tenga cambios */
    //  }
    //
    public boolean vincular(int validacion, boolean remover) {
        return this.vincular(validacion, remover, 0); /* OJO con la constante: usa la fila actual */
    }

    protected boolean vincular(int validacion, boolean remover, int origen) {
        this.track("vincular", "validacion=" + validacion, "remover=" + remover, "origen=" + origen);
        this.descartarFormulariosVirtuales();
        //      boolean ok = this.setIdentificacionRecursoPagina(validacion, origen);
        boolean ok;
        boolean filaDisponible = this.setIdentificacionRecursoPagina(origen);
        switch (validacion) {
        case 1: /* OJO con la constante /* valida que la fila no tenga cambios */
            ok = filaDisponible ? this.isFilaSinCambios() : false;
            break;
        case 2: /* OJO con la constante /* valida que el lote no tenga cambios */
            ok = this.isLoteSinCambios();
            break;
        case 3: /* OJO con la constante /* valida que el lote no tenga cambios */
            filaDisponible = true; /* no importa si no hay fila disponible */
            ok = this.isLoteSinCambios(); /* con tal que el lote no tenga cambios */
            break;
        default: /* solo valida que la fila este disponible */
            ok = filaDisponible;
            break;
        }
        if (filaDisponible) {
            if (ok) {
                this.removerHipervinculo(remover);
            } else {
                TLC.getBitacora().error(CBM2.HYPERLINK_EXCEPTION_1);
            }
        } else {
            TLC.getBitacora().error(CBM2.PROCESS_NONE);
        }
        return filaDisponible && ok;
    }

    protected String accionVincular(String vinculo, int validacion, boolean remover, int origen) {
        return StringUtils.isNotBlank(vinculo) && this.vincular(validacion, remover, origen) ? vinculo : null;
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="metodos estandar para obtener el script de los botones de la pagina de actualizacion">
    public String getScriptIrAlPrimero() {
        //      this.track("getScriptIrAlPrimero");
        return null;
    }

    public String getScriptIrAlAnterior() {
        //      this.track("getScriptIrAlAnterior");
        return null;
    }

    public String getScriptIrAlSiguiente() {
        //      this.track("getScriptIrAlSiguiente");
        return null;
    }

    public String getScriptIrAlUltimo() {
        //      this.track("getScriptIrAlUltimo");
        return null;
    }

    public String getScriptRepaginar() {
        //      this.track("getScriptRepaginar");
        return null;
    }

    public String getScriptRefrescar() {
        //      this.track("getScriptRefrescar");
        return null;
    }

    public String getScriptReconsultar() {
        //      this.track("getScriptReconsultar");
        return null;
    }

    public String getScriptAgregar() {
        //      this.track("getScriptAgregar");
        return null;
    }

    public String getScriptEditar() {
        this.track("getScriptEditar");
        String table = null;
        String message1 = null;
        String message2 = null;
        String script = JS.getConfirmDialogJavaScript(table, message1, message2);
        return script;
    }

    public String getScriptEliminar() {
        this.track("getScriptEliminar");
        String table = null;
        String message1 = null;
        //      String message2 = Bitacora.getTextoMensaje(CBM2.DELETE_CONFIRM_MESSAGE);
        String message2 = null;
        String script = JS.getConfirmDialogJavaScript(table, message1, message2);
        return script;
    }

    public String getScriptAplicar() {
        //      this.track("getScriptAplicar");
        return null;
    }

    public String getScriptDeshacer() {
        this.track("getScriptDeshacer");
        String table = null;
        String message1 = null;
        String message2 = null;
        String script = JS.getConfirmDialogJavaScript(table, message1, message2);
        return script;
    }

    public String getScriptConfirmar() {
        this.track("getScriptConfirmar");
        String message1 = null; /* this.getMensajeCambiosPorConfirmar(); */
        String script = JS.getConfirmDialogJavaScript(message1, true);
        return script;
    }

    public String getScriptDescartar() {
        this.track("getScriptDescartar");
        String message1 = this.getMensajeCambiosPorDescartar();
        String script = JS.getConfirmDialogJavaScript(message1, true);
        return script;
    }

    public String getScriptProcesar() {
        this.track("getScriptProcesar");
        String message1 = Bitacora.getTextoMensaje(CBM2.PROCESS_CONFIRM_MESSAGE);
        String script = JS.getConfirmDialogJavaScript(message1, true);
        return script;
    }

    public String getScriptRetornar() {
        if (designing) {
            return null;
        }
        this.track("getScriptRetornar");
        String campo = this.getPaginaActualizacion().getContextoSesion().getCampoAccionRetorno();
        String valor = null; /* getSessionCookie(); */
        String boton = this.getPaginaActualizacion().getContextoSesion().getBotonAccionRetorno();
        String script = JS.getCloseWindowJavaScript(campo, valor, boton);
        //Bitacora.trace(script);
        return script;
    }

    public String getScriptRetornarRecursoActual() {
        if (designing) {
            return null;
        }
        this.track("getScriptRetornarRecursoActual");
        String campo = this.getPaginaActualizacion().getContextoSesion().getCampoAccionRetorno();
        String valor = campo == null ? null : this.getValorRetornoRecursoActual();
        String boton = this.getPaginaActualizacion().getContextoSesion().getBotonAccionRetorno();
        String script = JS.getCloseWindowJavaScript(campo, valor, boton);
        //Bitacora.trace(script);
        return script;
    }

    public String getScriptRetornarRecursoEscogido() {
        if (designing) {
            return null;
        }
        this.track("getScriptRetornarRecursoEscogido");
        String campo = this.getPaginaActualizacion().getContextoSesion().getCampoAccionRetorno();
        String valor = campo == null ? null : this.getValorRetornoRecursoEscogido();
        String boton = this.getPaginaActualizacion().getContextoSesion().getBotonAccionRetorno();
        String script = JS.getCloseWindowJavaScript(campo, valor, boton);
        //Bitacora.trace(script);
        return script;
    }

    public String getScriptAbrirVentana(String urx) {
        return this.getScriptAbrirVentana(urx, 0); /* OJO con la constante: usa la fila actual */
    }

    public String getScriptAbrirVentana(String urx, int origen) {
        Long recurso;
        switch (origen) {
        case 1: /* OJO con la constante: usa la fila escogida */
            recurso = this.getIdentificacionRecursoEscogido();
            break;
        default: /* usa la fila actual */
            recurso = this.getIdentificacionRecursoActual();
            break;
        }
        return recurso == null ? null : this.getScriptAbrirVentana(urx, recurso);
    }

    public String getScriptAbrirVentanaVerDetalle(String urx) {
        return this.getScriptAbrirVentanaVerDetalle(urx, 0); /* OJO con la constante: usa la fila actual */
    }

    public String getScriptAbrirVentanaVerDetalle(String urx, int origen) {
        Long recurso;
        switch (origen) {
        case 1: /* OJO con la constante: usa la fila escogida */
            recurso = this.getIdentificacionRecursoEscogido();
            break;
        default: /* usa la fila actual */
            recurso = this.getIdentificacionRecursoActual();
            break;
        }
        return recurso == null ? null : this.getScriptAbrirVentanaVerDetalle(urx, recurso);
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="metodos estandar para obtener el url de la imagen los botones de la pagina de actualizacion">
    public String getUrlImagenIrAlPrimero() {
        return "resources/pagination_first.gif";
    }

    public String getUrlImagenIrAlAnterior() {
        return "resources/pagination_prev.gif";
    }

    public String getUrlImagenIrAlSiguiente() {
        return "resources/pagination_next.gif";
    }

    public String getUrlImagenIrAlUltimo() {
        return "resources/pagination_last.gif";
    }

    public String getUrlImagenRepaginar() {
        return "resources/repaginate24.gif";
    }

    public String getUrlImagenRefrescar() {
        return this.isBotonesAccionSinImagen() ? null : "resources/refresh24.gif";
    }

    public String getUrlImagenAgregar() {
        return this.isBotonesAccionSinImagen() ? null : "resources/add24.gif";
    }

    public String getUrlImagenEditar() {
        return this.isBotonesAccionSinImagen() ? null : "resources/edit24.gif";
    }

    public String getUrlImagenDeshacer() {
        return this.isBotonesAccionSinImagen() ? null : "resources/undo24.gif";
    }

    public String getUrlImagenEliminar() {
        return this.isBotonesAccionSinImagen() ? null : "resources/delete24.gif";
    }

    public String getUrlImagenAplicar() {
        return this.isBotonesAccionSinImagen() ? null : "resources/apply24.gif";
    }

    public String getUrlImagenConfirmar() {
        return this.isBotonesAccionSinImagen() ? null : "resources/save24.gif";
    }

    public String getUrlImagenDescartar() {
        return this.isBotonesAccionSinImagen() ? null : "resources/discard24.gif";
    }

    public String getUrlImagenRetornar() {
        //      return this.isBotonesAccionSinImagen() ? null : "resources/return24.gif";
        return "resources/return.gif";
    }

    public String getUrlImagenDetallar() {
        return "resources/detail.gif";
    }

    public String getUrlImagenProcesar() {
        return "resources/run.gif";
    }

    public String getUrlImagenEscoger() {
        return "resources/pick.gif";
    }

    @Override
    public String getUrlImagenAbrirVinculo() {
        if (designing) {
            return "resources/open_link_enabled.gif";
        }
        if (this.isFuncionOpenLinkInhabilitada()) {
            return "resources/open_link_disabled.gif";
        } else {
            return "resources/open_link_enabled.gif";
        }
    }

    public String getUrlImagenAbrirVentanaVerDetalles() {
        return "resources/detail.gif";
    }

    public String getUrlImagenFilaProcesada() {
        if (designing) {
            return "resources/ok_small.gif";
        }
        if (this.getPaginaActualizacion().getRecursoDataProvider().esFilaProcesada(this.getCurrentRowKey())) {
            if (this.getPaginaActualizacion().getRecursoDataProvider().esFilaConflictiva(this.getCurrentRowKey())) {
                return this.getUrlImagenFilaConflictiva();
            } else {
                return "resources/ok_small.gif";
            }
        }
        return "resources/ok_dimmed.gif";
    }

    protected String getUrlImagenFilaConflictiva() {
        if (designing) {
            return "resources/failed_small.gif";
        }
        String clave = this.getCurrentRowKey().getRowId();
        String valor = (String) this.getPaginaActualizacion().getRecursoDataProvider().getFilasConflictivas()
                .get(clave);
        if (valor != null) {
            int severidad = Integer.parseInt(valor.substring(0, 1));
            if (severidad == 0) {
                return "resources/unknown_small.gif";
            }
            //          switch (severidad) {
            //              case 0: /* OJO con la constante: 0 -> fila "ignorada" (no se sabe si tiene o no errores) */
            //                  return "resources/unknown_small.gif";
            //              case 1: /* OJO con la constante: 1 -> fila con un error desconocido */
            //                  break;
            //              case 2: /* OJO con la constante: 2 -> fila con un error conocido */
            //                  break;
            //              case 3: /* OJO con la constante: 3 -> fila con uno o mas errores, todos conocidos */
            //                  break;
            //              default:
            //                  break;
            //              }
        }
        return "resources/failed_small.gif";
    }

    public String getUrlImagenMaestroFilaProcesada() {
        if (designing) {
            return "resources/ok_small.gif";
        }
        return this.getPaginaActualizacion().getRecursoDataProvider().esFilaProcesada(this.getCurrentRowKey())
                ? "resources/ok_small.gif"
                : "resources/ok_dimmed.gif";
    }

    public String getUrlImagenSeveridadMensajeFilaNoDisponible() {
        return "resources/info_medium.gif";
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="metodos estandar para obtener el toolTip de los botones de la pagina de actualizacion">
    public String getToolTipImagenFilaProcesada() {
        if (designing) {
            return null;
        }
        if (this.getPaginaActualizacion().getRecursoDataProvider().esFilaProcesada(this.getCurrentRowKey())) {
            if (this.getPaginaActualizacion().getRecursoDataProvider().esFilaConflictiva(this.getCurrentRowKey())) {
                return this.getToolTipImagenFilaConflictiva();
            } else {
                return Bundle.getString("imagenFilaProcesada.toolTip");
            }
        }
        return this.getToolTipImagenFilaNoProcesada();
    }

    protected String getToolTipImagenFilaNoProcesada() {
        return null;
    }

    protected String getToolTipImagenFilaConflictiva() {
        if (designing) {
            return null;
        }
        String clave = this.getCurrentRowKey().getRowId();
        String valor = (String) this.getPaginaActualizacion().getRecursoDataProvider().getFilasConflictivas()
                .get(clave);
        return valor == null ? null : valor.substring(1);
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="metodos estndar para establecer la identificacion del recurso (comentados)">
    //  protected boolean setIdentificacionRecursoPagina() {
    //      return this.setIdentificacionRecursoPagina(0); /* OJO con la constante: no valida nada */
    //  }
    //  protected boolean setIdentificacionRecursoPagina(int validacion) {
    //      return this.setIdentificacionRecursoPagina(validacion, 0); /* OJO con la constante: usa la fila actual */
    //  }
    //  protected boolean setIdentificacionRecursoPagina(int validacion, int origen) {
    //      this.track("setIdentificacionRecursoPagina", "validacion=" + validacion, "origen=" + origen);
    //      RowKey rowKey = null;
    //      switch (origen) {
    //          case 1:  /* OJO con la constante: usa la fila escogida */
    //              rowKey = this.getPaginaActualizacion().getRecursoDataProvider().getFilaEscogida();
    //              break;
    //          default: /* usa la fila actual */
    //              rowKey = this.getCurrentRowKey();
    //              break;
    //      }
    //      return this.setIdentificacionRecursoPagina(validacion, rowKey);
    //  }
    //  protected boolean setIdentificacionRecursoPagina(int validacion, RowKey rowKey) {
    //      boolean ok = false;
    //      Long valor = null;
    //      try {
    //          if (rowKey != null) {
    //              if (this.getPaginaActualizacion().getRecursoDataProvider().isRowAvailable(rowKey)) {
    //                  this.getPaginaActualizacion().getRecursoDataProvider().setCursorRow(rowKey);
    //                  if (this.getPaginaActualizacion().getRecursoDataProvider().isRecursoIdentificable()) {
    //                      valor = this.getRecursoIdentificableDataProvider().getIdentificacionRecurso(rowKey);
    //                  }
    //                  switch (validacion) {
    //                      case 1:  /* OJO con la constante: valida que la fila no tenga cambios */
    //                          ok = this.isFilaSinCambios();
    //                          break;
    //                      case 2:  /* OJO con la constante: valida que el lote no tenga cambios */
    //                          ok = this.isLoteSinCambios();
    //                          break;
    //                      default: /* no valida nada! */
    //                          ok = true;
    //                          break;
    //                  }
    //              } else {
    //                  rowKey = null;
    //              }
    //          }
    //      } catch (Exception ex) {
    //          rowKey = null;
    //          valor = null;
    //          this.handle(ex);
    //      }
    //      this.getPaginaActualizacion().getRecursoDataProvider().setFilaEscogida(rowKey);
    //      this.getPaginaActualizacion().getContextoPeticion().setIdentificacionRecurso(valor);
    //      return ok;
    //  }
    // </editor-fold>
    //
    // <editor-fold defaultstate="collapsed" desc="metodos estandar para establecer la identificacion del recurso">
    protected boolean setIdentificacionRecursoPagina() {
        return this.setIdentificacionRecursoPagina(0); /* OJO con la constante: usa la fila actual */
    }

    protected boolean setIdentificacionRecursoPagina(int origen) {
        this.track("setIdentificacionRecursoPagina", "origen=" + origen);
        RowKey rowKey;
        switch (origen) {
        case 1: /* OJO con la constante: usa la fila escogida */
            rowKey = this.getPaginaActualizacion().getRecursoDataProvider().getFilaEscogida();
            break;
        default: /* usa la fila actual */
            rowKey = this.getCurrentRowKey();
            break;
        }
        return this.setIdentificacionRecursoPagina(rowKey);
    }

    protected boolean setIdentificacionRecursoPagina(RowKey rowKey) {
        Long valor = null;
        if (rowKey != null) {
            try {
                if (this.getPaginaActualizacion().getRecursoDataProvider().isRowAvailable(rowKey)) {
                    this.getPaginaActualizacion().getRecursoDataProvider().setCursorRow(rowKey);
                    if (this.getPaginaActualizacion().getRecursoDataProvider().isRecursoIdentificable()) {
                        valor = this.getRecursoIdentificableDataProvider().getIdentificacionRecurso(rowKey);
                    }
                } else {
                    rowKey = null;
                }
            } catch (Exception ex) {
                rowKey = null;
                valor = null;
                this.handle(ex);
            }
        }
        this.getPaginaActualizacion().getRecursoDataProvider().setFilaEscogida(rowKey);
        this.getPaginaActualizacion().getContextoPeticion().setIdentificacionRecurso(valor);
        return rowKey != null;
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="metodos estandar para establecer la posicion del cursor">
    protected boolean cursorSet(int posicion) {
        return this.cursorSet(posicion, false);
    }

    protected boolean cursorSet(int posicion, boolean circular) {
        this.track("cursorSet", "posicion=" + posicion, "circular=" + circular);
        boolean ok = false;
        boolean reposicion = false;
        try {
            switch (posicion) {
            case 1:
                ok = this.getPaginaActualizacion().getRecursoDataProvider().cursorFirst();
                break;
            case 2:
                ok = this.getPaginaActualizacion().getRecursoDataProvider().cursorPrevious();
                if (!ok && circular) {
                    ok = this.getPaginaActualizacion().getRecursoDataProvider().cursorLast();
                }
                break;
            case 3:
                ok = this.getPaginaActualizacion().getRecursoDataProvider().cursorNext();
                if (!ok && circular) {
                    ok = this.getPaginaActualizacion().getRecursoDataProvider().cursorFirst();
                }
                break;
            case 4:
                ok = this.getPaginaActualizacion().getRecursoDataProvider().cursorLast();
                break;
            default:
                ok = this.reposicionar();
                reposicion = ok;
                if (!ok) {
                    ok = this.getPaginaActualizacion().getRecursoDataProvider().cursorNext();
                }
                if (!ok) {
                    ok = this.getPaginaActualizacion().getRecursoDataProvider().cursorFirst();
                }
                break;
            }
            if (ok && !reposicion) {
                RowKey rowKey = this.getPaginaActualizacion().getRecursoDataProvider().getCursorRow();
                this.getPaginaActualizacion().getRecursoDataProvider().setFilaEscogida(rowKey);
            }
        } catch (Exception ex) {
            this.handle(ex);
        } finally {
            if (!reposicion) {
                this.setNuevaPosicionCursor(ok);
            }
            return ok;
        }
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="metodos estandar para el refresh de la pagina de actualizacion">
    protected boolean refresh() {
        this.track("refresh");
        if (this.isReadOnlyProcessing()) {
            return true;
        }
        boolean ok = false;
        try {
            this.getPaginaActualizacion().getRecursoDataProvider().refresh();
            this.getPaginaActualizacion().posrefrescar();
            this.descartarFormulariosVirtuales();
            ok = this.getPaginaActualizacion().getRecursoDataProvider().isFilaEscogidaDisponible();
            // OJO: cursorSet(1) no es necesario si es PaginaConsultaConArbol  PaginaConsultaConTabla, pero no hace dao
            ok = ok || this.cursorSet(1); /* OJO con la constante: cursorFirst */
        } catch (Exception ex) {
            this.handle(ex);
        }
        this.setNuevaPosicionCursor(ok);
        return ok;
    }

    protected boolean requery() {
        this.track("requery");
        //      if (this.isReadOnlyProcessing()) {
        //          return true;
        //      }
        boolean ok = false;
        try {
            this.getPaginaActualizacion().getRecursoDataProvider().restoreQuery();
            this.getPaginaActualizacion().posconsultar();
            this.descartarFormulariosVirtuales();
            ok = this.getPaginaActualizacion().getRecursoDataProvider().isFilaEscogidaDisponible();
            // OJO: cursorSet(1) no es necesario si es PaginaConsultaConArbol  PaginaConsultaConTabla, pero no hace dao
            ok = ok || this.cursorSet(1); /* OJO con la constante: cursorFirst */
            this.setVersionComandoSelectPagina();
            this.setMaestroPagina();
        } catch (Exception ex) {
            this.handle(ex);
        }
        this.setNuevaPosicionCursor(ok);
        return ok;
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="metodos estandar para el manejo de multiples funciones de accion">
    public boolean isAccionMultiFuncion() {
        if (designing) {
            return true;
        }
        if (this.isPaginaActualizacionConAccionMultiple()) {
            Option[] items = this.getPaginaActualizacionConAccionMultiple().getOpcionesListaFuncionAccion();
            return items != null && items.length > 1;
        }
        return false;
    }

    public boolean isAccionMultiFuncionHabilitada() {
        if (designing) {
            return true;
        }
        return this.isAccionMultiFuncion() && this.isFilaDisponible() && this.isLoteSinCambios();
    }

    public boolean isAccionMultiFuncionInhabilitada() {
        if (designing) {
            return true;
        }
        return !isAccionMultiFuncionHabilitada();
    }

    public Long getFuncionAccionSeleccionada() {
        if (designing) {
            return null;
        }
        return this.getPaginaActualizacion().getRecursoDataProvider().getFuncionBusinessProcess();
    }

    public void setFuncionAccionSeleccionada(Long funcionAccionSeleccionada) {
        Long funcionProcesarRecurso = this.getFuncionProcesarRecurso(funcionAccionSeleccionada);
        long funcion = funcionProcesarRecurso == null ? -1L : funcionProcesarRecurso;
        try {
            this.getPaginaActualizacion().getRecursoDataProvider().setFuncionBusinessProcess(funcion);
        } catch (ExcepcionAplicacion ex) {
            this.handle(ex);
        }
    }

    public String getEtiquetaOpcionSeleccionadaListaFuncionAccion() {
        if (designing) {
            return null;
        }
        String label = this.isAccionMultiFuncion()
                ? STP.getToken(this.getEtiquetaOpcionSeleccionada(
                        this.getPaginaActualizacionConAccionMultiple().getListaFuncionAccion1()))
                : null; /* Bundle.getString("botonProcesar.text") */
        /**/
        return label == null ? this.getEtiquetaSeleccioneUnaOpcionListaFuncionAccion() : label;
    }

    public String getEtiquetaSeleccioneUnaOpcionListaFuncionAccion() {
        return Bundle.getString("listaFuncionAccion.opcion1");
    }

    private Long getFuncionProcesarRecurso(Long funcion) {
        Option opcion = null;
        if (this.isAccionMultiFuncion()) {
            opcion = this.getOpcionListaDesplegable(funcion,
                    this.getPaginaActualizacionConAccionMultiple().getListaFuncionAccion1());
        }
        //      return opcion == null ? this.getPaginaActualizacion().getFuncionModificarRecurso() : funcion;
        return opcion == null ? null : funcion;
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="metodos estandar para el manejo de multiples funciones de edicion">
    public boolean isEdicionMultiFuncion() {
        if (designing) {
            return true;
        }
        if (this.isPaginaActualizacionConEdicionMultiple()) {
            Option[] items = this.getPaginaActualizacionConEdicionMultiple().getOpcionesListaFuncionEdicion();
            return items != null && items.length > 1;
        }
        return false;
    }

    public boolean isEdicionMultiFuncionHabilitada() {
        if (designing) {
            return true;
        }
        return this.isEdicionMultiFuncion() && this.isFilaDisponible() && this.isLoteSinCambios();
    }

    public boolean isEdicionMultiFuncionInhabilitada() {
        if (designing) {
            return true;
        }
        return !isEdicionMultiFuncionHabilitada();
    }

    private Long funcionEdicionSeleccionada = null;

    public Long getFuncionEdicionSeleccionada() {
        if (designing) {
            return null;
        }
        if (this.getPaginaActualizacion().getRecursoDataProvider().isFuncionUpdateEjecutada()) {
            return this.getPaginaActualizacion().getRecursoDataProvider().getFuncionUpdate();
        }
        if (this.isEdicionMultiFuncion()) {
            return this.funcionEdicionSeleccionada;
        }
        //      return this.getPaginaActualizacion().getRecursoDataProvider().getFuncionUpdate();
        return this.getPaginaActualizacion().getRecursoDataProvider().isFuncionUpdateAutorizada()
                ? this.getPaginaActualizacion().getRecursoDataProvider().getFuncionUpdate()
                : this.getPaginaActualizacion().getFuncionModificarRecurso();
    }

    public void setFuncionEdicionSeleccionada(Long funcionEdicionSeleccionada) {
        Long funcion = this.getFuncionEditarRecurso(funcionEdicionSeleccionada);
        if (funcion != null) {
            this.funcionEdicionSeleccionada = funcion;
            this.editar(funcion);
        }
    }

    public String getEtiquetaOpcionSeleccionadaListaFuncionEdicion() {
        if (designing) {
            return null;
        }
        String label = this.isEdicionMultiFuncion()
                ? STP.getToken(this.getEtiquetaOpcionSeleccionada(
                        this.getPaginaActualizacionConEdicionMultiple().getListaFuncionEdicion1()))
                : Bundle.getString("botonEditar.text");
        /**/
        return label == null ? this.getEtiquetaSeleccioneUnaOpcionListaFuncionEdicion() : label;
    }

    public String getEtiquetaSeleccioneUnaOpcionListaFuncionEdicion() {
        return Bundle.getString("listaFuncionEdicion.opcion1");
    }

    private Long getFuncionEditarRecurso(Long funcion) {
        Option opcion = null;
        if (this.isEdicionMultiFuncion()) {
            opcion = this.getOpcionListaDesplegable(funcion,
                    this.getPaginaActualizacionConEdicionMultiple().getListaFuncionEdicion1());
        }
        //      return opcion == null ? this.getPaginaActualizacion().getFuncionModificarRecurso() : funcion;
        return opcion == null ? null : funcion;
    }
    // </editor-fold>
}