Java tutorial
/* * 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> }