ips1ap101.lib.core.web.app.GestorPaginaActualizacionConArbol.java Source code

Java tutorial

Introduction

Here is the source code for ips1ap101.lib.core.web.app.GestorPaginaActualizacionConArbol.java

Source

/*
 * 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 ips1ap101.lib.core.web.app;

import com.sun.data.provider.RowKey;
import com.sun.webui.jsf.component.Tree;
import com.sun.webui.jsf.component.TreeNode;
import java.util.ArrayList;
import javax.el.ELContext;
import javax.el.ExpressionFactory;
import javax.el.MethodExpression;
import javax.faces.context.FacesContext;
import ips1ap101.lib.base.bundle.BundleWebui;
import ips1ap101.lib.core.app.TLC;
import ips1ap101.lib.core.db.xdp.RecursoCachedRowSetDataProvider;
import ips1ap101.lib.core.db.xdp.RecursoJerarquizableDataProvider;
import ips1ap101.lib.core.enumeration.EnumColumnaEtiqueta;
import ips1ap101.lib.core.enumeration.EnumOpcionZumNodo;
import ips1ap101.lib.core.jsf.JSF;
import ips1ap101.lib.core.util.ClassX;
import ips1ap101.lib.core.util.TypeValuePair;
import org.apache.commons.lang.StringUtils;

/**
 * @author Jorge Campins
 */
public class GestorPaginaActualizacionConArbol extends GestorPaginaActualizacion {

    public static GestorPaginaActualizacionConArbol newInstance() {
        Class<?> clase = GestorPaginaActualizacionConArbol.class;
        String subclase = ClassX.get().subclassName(clase, "page_delegate");
        Object instance = ClassX.get().newInstance(clase, subclase);
        return (GestorPaginaActualizacionConArbol) instance;
    }

    public static GestorPaginaActualizacionConArbol newInstance(PaginaActualizacion pagina) {
        Class<?> clase = GestorPaginaActualizacionConArbol.class;
        TypeValuePair parametro = new TypeValuePair(PaginaActualizacion.class, pagina);
        String subclase = ClassX.get().subclassName(clase, "page_delegate");
        Object instance = ClassX.get().newInstance(clase, subclase, parametro);
        return (GestorPaginaActualizacionConArbol) instance;
    }

    public GestorPaginaActualizacionConArbol() {
        super();
    }

    public GestorPaginaActualizacionConArbol(PaginaActualizacion pagina) {
        super(pagina);
    }

    // <editor-fold defaultstate="collapsed" desc="propiedades estandar de la pagina de actualizacion con arbol">
    /**
     * Getter para propiedad paginaConsultaConArbol.
     *
     * @return Valor de la propiedad paginaConsultaConArbol.
     */
    protected PaginaConsultaConArbol getPaginaConsultaConArbol() {
        return getPaginaBasica() instanceof PaginaConsultaConArbol ? (PaginaConsultaConArbol) getPaginaBasica()
                : null;
    }

    protected RecursoJerarquizableDataProvider getRecursoJerarquizableDataProvider() {
        return getPaginaConsultaConArbol().getRecursoDataProvider().getRecursoJerarquizableDataProvider();
    }

    public ArrayList getOpcionesZumNodo() {
        return JSF.getListaOpciones(EnumOpcionZumNodo.values(), false, false);
    }

    MethodExpression expresionAccionZum = null;

    protected MethodExpression getExpresionAccionEscogerNodo() {
        if (expresionAccionZum == null) {
            ExpressionFactory factory = FacesContext.getCurrentInstance().getApplication().getExpressionFactory();
            ELContext context = FacesContext.getCurrentInstance().getELContext();
            String expression = "#{" + getPaginaBasica().getManagedBeanName() + ".accionEscogerNodo}";
            expresionAccionZum = factory.createMethodExpression(context, expression, String.class, new Class[] {});
            track("getExpresionAccionEscogerNodo", expression);
        }
        return expresionAccionZum;
    }

    public String getEstiloArbol() {
        if (designing) {
            return "border-width: 1px; border-style: dotted; height: 24px; width: 100%";
        }
        return null;
    }
    // </editor-fold>

    public boolean isFuncionZoomHabilitada() {
        if (designing) {
            return true;
        }
        return isLoteSinCambios() || !isConsultaInsert();
    }

    public boolean isFuncionZoomInhabilitada() {
        return !isFuncionZoomHabilitada();
    }

    @Override
    protected void retrucarAgregar() {
        super.retrucar(); /* OJO: retrucar en lugar de retrucarAgregar */
        if (isConsultaInsert()) {
            prune();
        } else if (isRetorno() || !isPeticionProcesada() || isNuevaPosicionCursor()) {
            populate();
        }
    }

    @Override
    protected void retrucar() {
        super.retrucar();
        if (isRetorno() || !isPeticionProcesada() || isNuevaPosicionCursor()) {
            populate();
        }
    }

    @Override
    protected void consultar() {
        track("consultar");
        if (isRetorno() && !isPeticionProcesada() && !isConsultaInsert()) {
            populate();
        } else {
            super.consultar();
            //          if (isRetruque()) {
            //              paginate();
            //          } else {
            populate();
            //          }
        }
    }

    protected boolean prune() {
        track("prune");
        getPaginaConsultaConArbol().getTree1().getChildren().clear();
        TLC.getBitacora().info(BundleWebui.getString("filtro_solo_nodos_agregados"));
        return true;
    }

    protected boolean paginate() {
        track("paginate");
        return true;
    }

    protected boolean populate() {
        track("populate");
        Long id = getPaginaActualizacion().getContextoPeticion().getIdentificacionRecurso();
        if (id != null) {
            posicionar(id);
        }
        return zumNodo(getPaginaConsultaConArbol().getRecursoDataProvider().getOpcionZumNodo());
    }

    @Override
    public boolean refrescar() {
        setConsultaPendiente(true);
        getPaginaConsultaConArbol().getRecursoDataProvider().setOpcionZumNodo(null);
        return true;
    }

    //  protected boolean seleccionarNodo(Long id) {
    //      return JSF.setNodoSeleccionado(getPaginaConsultaConArbol().getTree1(), id) != null;
    //  }
    //
    protected boolean seleccionarNodoFilaEscogida() {
        track("seleccionarNodoFilaEscogida");
        if (getPaginaActualizacion().getRecursoDataProvider().isRecursoIdentificable()) {
            if (getPaginaActualizacion().getRecursoDataProvider().isFilaEscogidaDisponible()) {
                RowKey rowKey = getPaginaActualizacion().getRecursoDataProvider().getFilaEscogida();
                return JSF.setNodoSeleccionado(getPaginaConsultaConArbol().getTree1(),
                        getRecursoIdentificableDataProvider().getIdentificacionRecurso(rowKey)) != null;
            }
        }
        return false;
    }

    public boolean rearborizar() {
        return rearborizar(null, false);
    }

    protected boolean rearborizar(Long id, boolean base) {
        Object columna = getPaginaConsultaConArbol().getColumnaEtiqueta();
        if (columna == null) {
            return rearborizar(null, EnumColumnaEtiqueta.AMBAS_COLUMNAS, id, base);
        } else if (columna instanceof String) {
            return rearborizar((String) columna, EnumColumnaEtiqueta.AMBAS_COLUMNAS, id, base);
        } else if (columna instanceof EnumColumnaEtiqueta) {
            return rearborizar(null, (EnumColumnaEtiqueta) columna, id, base);
        } else {
            return rearborizar(null, EnumColumnaEtiqueta.AMBAS_COLUMNAS, id, base);
        }
    }

    // <editor-fold defaultstate="collapsed" desc="rearborizar (comentado)">
    //  protected boolean rearborizar(String columna) {
    //      return rearborizar(columna, EnumColumnaEtiqueta.AMBAS_COLUMNAS, null, false);
    //  }
    //
    //  protected boolean rearborizar(String columna, Long id) {
    //      return rearborizar(columna, EnumColumnaEtiqueta.AMBAS_COLUMNAS, id, false);
    //  }
    //
    //  protected boolean rearborizar(String columna, Long id, boolean base) {
    //      return rearborizar(columna, EnumColumnaEtiqueta.AMBAS_COLUMNAS, id, base);
    //  }
    //
    //  protected boolean rearborizar(EnumColumnaEtiqueta columna) {
    //      return rearborizar(null, columna, null, false);
    //  }
    //
    //  protected boolean rearborizar(EnumColumnaEtiqueta columna, Long id) {
    //      return rearborizar(null, columna, id, false);
    //  }
    //
    //  protected boolean rearborizar(EnumColumnaEtiqueta columna, Long id, boolean base) {
    //      return rearborizar(null, columna, id, base);
    //  }
    // </editor-fold>
    /**/
    protected boolean rearborizar(String colname, EnumColumnaEtiqueta coltype, Long id, boolean base) {
        track("rearborizar", "colname=" + colname, "coltype=" + coltype, "id=" + id, "base=" + base);
        if (isConsultaInsert()) {
            return false;
        }
        RecursoCachedRowSetDataProvider dp = getPaginaConsultaConArbol().getRecursoDataProvider();
        Tree tree1 = getPaginaConsultaConArbol().getTree1();
        Tree tree2 = JSF.getArbolNodos(dp, colname, coltype, null, getExpresionAccionEscogerNodo(), id, base);
        tree1.setText(tree2.getText());
        tree1.getChildren().clear();
        //      tree1.getChildren().addAll(tree2.getChildren()); /* *** NO FUNCIONA *** */
        JSF.addNodosArbol(tree2, tree1);
        return true;
    }

    @Override
    public boolean reposicionar() {
        track("reposicionar");
        if (isRetruque() && (isRetorno() || !isPeticionProcesada() || isNuevaPosicionCursor())) {
            return posicionar(getPaginaConsultaConArbol().getRecursoDataProvider().getFilaEscogida());
        }
        return escoger();
    }

    public boolean escoger() { /* posiciona el cursor utilizando el nodo seleccionado del arbol */
        track("escoger");
        //      TreeNode nodo = JSF.getNodoSeleccionado(getPaginaConsultaConArbol().getTree1(), getPaginaConsultaConArbol().getForm1());
        TreeNode nodo = JSF.getNodoSeleccionado(getPaginaConsultaConArbol().getTree1());
        if (nodo == null) {
            return posicionar(getPaginaConsultaConArbol().getRecursoDataProvider().getFilaEscogida());
        } else {
            return posicionar(Long.valueOf(nodo.getId().substring(1)));
        }
    }

    // <editor-fold defaultstate="collapsed" desc="setPropiedadesPresentacionPagina (comentado) ">
    //  protected void setPropiedadesPresentacionPagina() {
    //      super.setPropiedadesPresentacionPagina();
    //      TreeNode nodo = JSF.getNodoSeleccionado(getPaginaConsultaConArbol().getTree1(), getPaginaConsultaConArbol().getForm1());
    //      if (nodo != null) {
    //          String texto = nodo.getText();
    //          if (texto != null) {
    //              TLC.getBitacora().info(CBM2.CHECK_CHANGES_1, "\"" + texto + "\"");
    //              TLC.getBitacora().info(CBM2.CHECK_CHANGES_1, nodo.getId());
    //          }
    //      }
    //      String nodeClientId = getPaginaConsultaConArbol().getTree1().getSelected();
    //      TLC.getBitacora().info(CBM2.CHECK_CHANGES_1, nodeClientId);
    //  }
    // </editor-fold>
    /**/
    @Override
    protected String getToolTipHipervinculoMigasPan() {
        return getTituloConsulta();
    }

    public boolean isTablaDisponible() {
        if (designing) {
            return true;
        }
        String v = getPaginaConsultaConArbol() == null ? null
                : getPaginaConsultaConArbol().getVinculoPaginaConsultaConTabla();
        return StringUtils.isNotBlank(v);
    }

    public boolean isDetalleDisponible() {
        if (designing) {
            return true;
        }
        String v = getPaginaConsultaConArbol() == null ? null
                : getPaginaConsultaConArbol().getVinculoPaginaConsultaDetalle();
        return StringUtils.isNotBlank(v);
    }

    public String accionVincularTabla() {
        // OJO con las constantes
        // validacion=3 --> valida que el lote no tenga cambios
        // origen=1 --> usa la fila escogida
        String v = getPaginaConsultaConArbol().getVinculoPaginaConsultaConTabla();
        return accionVincular(v, 3, true, 1);
    }

    public String accionVincularDetalle() {
        String nombreClaseRecurso;
        if (isPaginaConsultaConMaestro()) {
            nombreClaseRecurso = getPaginaConsultaConMaestro().getRecursoMaestroDataProvider()
                    .getNombreClaseRecurso();
            getPaginaActualizacion().getContextoPeticion().setNombreClaseRecursoMaestro(nombreClaseRecurso);
        }
        // OJO con las constantes
        // validacion=0 --> no valida nada
        // origen=1 --> usa la fila escogida
        String v = getPaginaConsultaConArbol().getVinculoPaginaConsultaDetalle();
        return accionVincular(v, 0, false, 1);
    }

    // <editor-fold defaultstate="collapsed" desc="metodos estandar para ejecutar las acciones de la pagina de actualizacion con tabla">
    public boolean zumNodo() {
        return zumNodo(getPaginaConsultaConArbol().getListaOpcionZum1().getSelected());
    }

    protected boolean zumNodo(Object opcion) {
        EnumOpcionZumNodo ozn = opcion instanceof Integer ? EnumOpcionZumNodo.valueOf((Integer) opcion)
                : EnumOpcionZumNodo.TODO;
        /**/
        return zumNodo(ozn);
    }

    protected boolean zumNodo(EnumOpcionZumNodo opcion) {
        track("zumNodo", "opcion=" + opcion);
        if (isConsultaInsert()) {
            return false;
        }
        descartarFormulariosVirtuales();
        boolean ok;
        if (opcion == null) {
            ok = rearborizar();
        } else {
            ok = isReposicionPendiente() ? reposicionar()
                    : getPaginaConsultaConArbol().getRecursoDataProvider().isCursorRowAvailable();
            if (ok) {
                Long id;
                switch (opcion) {
                case SELECCIONADO: /* zum al recurso seleccionado y sus dependientes */
                    id = getRecursoJerarquizableDataProvider().getIdentificacionRecurso();
                    ok = rearborizar(id, true);
                    break;
                case SUPERIOR: /* zum al superior del recurso seleccionado y sus dependientes */
                    id = getRecursoJerarquizableDataProvider().getRecursoSuperior();
                    ok = rearborizar(id, true);
                    break;
                default:
                    ok = rearborizar(null, false);
                    break;
                }
            } else {
                ok = rearborizar();
            }
        }
        return ok && seleccionarNodoFilaEscogida();
    }

    public boolean zumTodo() {
        track("zumTodo");
        //      descartarFormulariosVirtuales();
        //      getPaginaConsultaConArbol().getListaOpcionZum1().setSelected(null);
        //      boolean ok = rearborizar();
        //      return ok && seleccionarNodoFilaEscogida();
        return refrescar();
    }

    @Override
    public boolean eliminar() {
        track("eliminar");
        boolean ok = super.eliminar();
        if (ok) {
            TreeNode nodo = JSF.getNodoSeleccionado(getPaginaConsultaConArbol().getTree1());
            if (nodo != null) {
                nodo.setUrl(null);
            }
        }
        return ok;
    }

    @Override
    public boolean vincular(int validacion, boolean remover) {
        return vincular(validacion, remover, 1); /* OJO con la constante // usa la fila escogida */
    }
    // </editor-fold>
}