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.web.fragments; import com.sun.rave.web.ui.appbase.AbstractFragmentBean; import com.sun.rave.web.ui.appbase.AbstractPageBean; import com.sun.webui.jsf.component.Button; import com.sun.webui.jsf.component.DropDown; import com.sun.webui.jsf.component.HiddenField; import com.sun.webui.jsf.component.TextField; import java.util.Iterator; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.faces.FacesException; import javax.faces.component.html.HtmlPanelGrid; import javax.faces.convert.LongConverter; import javax.faces.event.ValueChangeEvent; import ips1ap101.lib.base.BaseBundle; import ips1ap101.lib.base.app.constant.EAB; import ips1ap101.lib.base.app.constant.URX; import ips1ap101.lib.base.constant.CPP; import ips1ap101.lib.base.util.Bit; import ips1ap101.lib.base.util.BitUtils; import ips1ap101.lib.base.util.ThrowableUtils; import ips1ap101.lib.core.app.Bitacora; import ips1ap101.lib.core.app.ExcepcionAplicacion; import ips1ap101.lib.core.app.FiltroBusqueda; import ips1ap101.lib.core.app.ListaParametros; import ips1ap101.lib.core.app.Mensaje; import ips1ap101.lib.core.app.TLC; import ips1ap101.lib.core.constant.Global; import ips1ap101.lib.core.db.xdp.RecursoCachedRowSetDataProvider; import ips1ap101.lib.core.enumeration.EnumColumnaEtiqueta; import ips1ap101.lib.core.jsf.JSF; import ips1ap101.lib.core.web.app.FragmentoFiltroEstandar; import ips1ap101.lib.core.web.app.GestorPaginaBasica; import ips1ap101.lib.core.web.app.PaginaConsultaConFiltro; import ips1ap101.lib.core.web.app.ThreadContext; import ips1ap101.lib.data.provider.xdp2.FiltroFuncionCachedRowSetDataProvider2; import org.apache.commons.lang.StringUtils; /** * @author Jorge Campins */ public class FragmentoFiltro1 extends AbstractFragmentBean implements FragmentoFiltroEstandar { // <editor-fold defaultstate="collapsed" desc="Managed Component Definition"> private void _init() throws Exception { filtroDataProvider .setCachedRowSet((javax.sql.rowset.CachedRowSet) getValue("#{SessionBean1.filtroRowSet}")); } private FiltroFuncionCachedRowSetDataProvider2 filtroDataProvider = new FiltroFuncionCachedRowSetDataProvider2(); public FiltroFuncionCachedRowSetDataProvider2 getFiltroDataProvider() { return filtroDataProvider; } public void setFiltroDataProvider(FiltroFuncionCachedRowSetDataProvider2 crsdp) { filtroDataProvider = crsdp; } private HiddenField campoAplicarFiltro1 = new HiddenField(); public HiddenField getCampoAplicarFiltro1() { return campoAplicarFiltro1; } public void setCampoAplicarFiltro1(HiddenField hf) { campoAplicarFiltro1 = hf; } private HtmlPanelGrid gridPanelCodigo1 = new HtmlPanelGrid(); public HtmlPanelGrid getGridPanelCodigo1() { return gridPanelCodigo1; } public void setGridPanelCodigo1(HtmlPanelGrid hpg) { gridPanelCodigo1 = hpg; } private HtmlPanelGrid gridPanelCodigo2 = new HtmlPanelGrid(); public HtmlPanelGrid getGridPanelCodigo2() { return gridPanelCodigo2; } public void setGridPanelCodigo2(HtmlPanelGrid hpg) { gridPanelCodigo2 = hpg; } private TextField textoFiltro1 = new ips1ap101.lib.core.jsf.component.CampoTexto(); public TextField getTextoFiltro1() { return textoFiltro1; } public void setTextoFiltro1(TextField tf) { textoFiltro1 = tf; } private HtmlPanelGrid gridPanelCodigo3 = new HtmlPanelGrid(); public HtmlPanelGrid getGridPanelCodigo3() { return gridPanelCodigo3; } public void setGridPanelCodigo3(HtmlPanelGrid hpg) { gridPanelCodigo3 = hpg; } private HtmlPanelGrid gridPanelNombre1 = new HtmlPanelGrid(); public HtmlPanelGrid getGridPanelNombre1() { return gridPanelNombre1; } public void setGridPanelNombre1(HtmlPanelGrid hpg) { gridPanelNombre1 = hpg; } private HtmlPanelGrid gridPanelNombre2 = new HtmlPanelGrid(); public HtmlPanelGrid getGridPanelNombre2() { return gridPanelNombre2; } public void setGridPanelNombre2(HtmlPanelGrid hpg) { gridPanelNombre2 = hpg; } private TextField textoFiltro2 = new ips1ap101.lib.core.jsf.component.CampoTexto(); public TextField getTextoFiltro2() { return textoFiltro2; } public void setTextoFiltro2(TextField tf) { textoFiltro2 = tf; } private HtmlPanelGrid gridPanelNombre3 = new HtmlPanelGrid(); public HtmlPanelGrid getGridPanelNombre3() { return gridPanelNombre3; } public void setGridPanelNombre3(HtmlPanelGrid hpg) { gridPanelNombre3 = hpg; } private DropDown listaFiltro1 = new ips1ap101.lib.core.jsf.component.ListaDesplegable(); public DropDown getListaFiltro1() { return listaFiltro1; } public void setListaFiltro1(DropDown dd) { this.listaFiltro1 = dd; } private Button botonAplicarFiltro1 = new Button(); public Button getBotonAplicarFiltro1() { return botonAplicarFiltro1; } public void setBotonAplicarFiltro1(Button b) { botonAplicarFiltro1 = b; } private LongConverter longConverter1 = new LongConverter(); public LongConverter getLongConverter1() { return longConverter1; } public void setLongConverter1(LongConverter lc) { longConverter1 = lc; } // </editor-fold> public FragmentoFiltro1() { super(); } @PostConstruct public void postConstruct() { if (EAB.CUSTOM_LIFECYCLE_CALLBACK_METHODS_ENABLED) { init(); } } @Override public void init() { super.init(); preiniciar(); try { _init(); } catch (Exception e) { log(ips1ap101.lib.base.bundle.BundleWebui.getString("bean.initialization.error"), e); throw e instanceof FacesException ? (FacesException) e : new FacesException(e); } iniciar(); } @PreDestroy public void preDestroy() { if (EAB.CUSTOM_LIFECYCLE_CALLBACK_METHODS_ENABLED) { destroy(); } } @Override public void destroy() { filtroDataProvider.close(); super.destroy(); } private PaginaConsultaConFiltro getPaginaConsultaConFiltro() { AbstractPageBean paginaActual = ThreadContext.getPaginaActual(); return (PaginaConsultaConFiltro) paginaActual; } public GestorPaginaBasica getGestor() { GestorPaginaBasica gestorActual = ThreadContext.getGestorActual(); return gestorActual; } public RecursoCachedRowSetDataProvider getRecursoDataProvider() { return getPaginaConsultaConFiltro().getRecursoDataProvider(); } private Bit bitFuncionHideFilterHabilitada = new Bit() { @Override public boolean isOn() { return getRecursoDataProvider().isFuncionHideFilterHabilitada(); } }; public Bit getBitFuncionHideFilterHabilitada() { return bitFuncionHideFilterHabilitada; } private Bit bitFuncionShowFilterHabilitada = new Bit() { @Override public boolean isOn() { return getRecursoDataProvider().isFuncionShowFilterHabilitada(); } }; public Bit getBitFuncionShowFilterHabilitada() { return bitFuncionShowFilterHabilitada; } private Bit bitFuncionViewFilterHabilitada = new Bit() { @Override public boolean isOn() { return getRecursoDataProvider().isFuncionViewFilterHabilitada(); } }; public Bit getBitFuncionViewFilterHabilitada() { return bitFuncionViewFilterHabilitada; } public boolean isFuncionSelectHabilitada() { return getRecursoDataProvider().isFuncionSelectHabilitada(); } public boolean isFuncionSelectInhabilitada() { return !isFuncionSelectHabilitada(); } public boolean isFuncionApplyFilterHabilitada() { return getRecursoDataProvider().isFuncionApplyFilterHabilitada(); } public boolean isFuncionApplyFilterInhabilitada() { return !isFuncionApplyFilterHabilitada(); } public boolean isFuncionRemoveFilterHabilitada() { return getRecursoDataProvider().isFuncionRemoveFilterHabilitada(); } public boolean isFuncionRemoveFilterInhabilitada() { return !isFuncionRemoveFilterHabilitada(); } public boolean isFuncionRestoreFilterHabilitada() { return getRecursoDataProvider().isFuncionRestoreFilterHabilitada(); } public boolean isFuncionRestoreFilterInhabilitada() { return !isFuncionRestoreFilterHabilitada(); } public boolean isFiltroPorCodigoHabilitado() { return getRecursoDataProvider().isRecursoCodificable() && isFuncionSelectHabilitada(); } public boolean isFiltroPorCodigoInhabilitado() { return !isFiltroPorCodigoHabilitado(); } public boolean isFiltroPorNombreHabilitado() { return getRecursoDataProvider().isRecursoNombrable() && isFuncionSelectHabilitada(); } public boolean isFiltroPorNombreInhabilitado() { return !isFiltroPorNombreHabilitado(); } public boolean isListaFiltroHabilitada() { String enabled = BaseBundle.getCurrentPageString("fragmento_filtro_lista_filtro_enabled"); return BitUtils.valueOf(enabled) && isFuncionSelectHabilitada(); } public boolean isListaFiltroInhabilitada() { return !isListaFiltroHabilitada(); } public boolean isBotonFiltroHabilitado() { String enabled = BaseBundle.getCurrentPageString("fragmento_filtro_boton_filtro_enabled"); return BitUtils.valueOf(enabled) && isFuncionSelectHabilitada(); } public boolean isBotonFiltroInhabilitado() { return !isBotonFiltroHabilitado(); } public String getEtiquetaCodigo() { return getRecursoDataProvider().isRecursoCodificable() ? getRecursoDataProvider().getRecursoCodificableDataProvider().getEtiquetaCodigoRecurso() : null; } public String getEtiquetaNombre() { return getRecursoDataProvider().isRecursoNombrable() ? getRecursoDataProvider().getRecursoNombrableDataProvider().getEtiquetaNombreRecurso() : null; } private static final String URL_IMAGEN_OK = "/resources/ok_small.gif"; private static final String URL_IMAGEN_OK_DIMMED = "/resources/ok_dimmed.gif"; private static final String URL_IMAGEN_WARNING = "/resources/warning_small.gif"; public String getValorTextoFiltro1() { return StringUtils.trimToNull(getRecursoDataProvider().getCodigoFuncionSelect()); } public void setValorTextoFiltro1(String valor) { getRecursoDataProvider().setCodigoFuncionSelect(StringUtils.trimToNull(valor)); } public String getUrlImagenTextoFiltro1() { String cx = getRecursoDataProvider().getCodigoFuncionSelect(); cx = StringUtils.trimToNull(cx); return getRecursoDataProvider().isCodigoFuncionSelectModificado() ? URL_IMAGEN_WARNING : cx == null ? URL_IMAGEN_OK_DIMMED : URL_IMAGEN_OK; } public String getValorTextoFiltro2() { return StringUtils.trimToNull(getRecursoDataProvider().getNombreFuncionSelect()); } public void setValorTextoFiltro2(String valor) { getRecursoDataProvider().setNombreFuncionSelect(StringUtils.trimToNull(valor)); } public String getUrlImagenTextoFiltro2() { String nx = getRecursoDataProvider().getNombreFuncionSelect(); nx = StringUtils.trimToNull(nx); return getRecursoDataProvider().isNombreFuncionSelectModificado() ? URL_IMAGEN_WARNING : nx == null ? URL_IMAGEN_OK_DIMMED : URL_IMAGEN_OK; } public Long getValorListaFiltro1() { return getRecursoDataProvider().getFiltroFuncionSelect(); } public void setValorListaFiltro1(Long valor) { getRecursoDataProvider().setFiltroFuncionSelect(valor); } public String getUrlImagenListaFiltro1() { Long fx = getRecursoDataProvider().getFiltroFuncionSelect(); return getRecursoDataProvider().isFiltroFuncionSelectModificado() ? URL_IMAGEN_WARNING : fx == null ? URL_IMAGEN_OK_DIMMED : URL_IMAGEN_OK; } protected void preiniciar() { track("preiniciar"); PaginaConsultaConFiltro pagina = getPaginaConsultaConFiltro(); pagina.getContextoPeticion().setFragmentoFiltroActual(this); } protected void iniciar() { track("iniciar"); try { inicializarControles(); } catch (Exception ex) { handle(ex); } } @Override public void reiniciar() { track("reiniciar"); try { setValorListaFiltro1(null); setValorTextoFiltro1(null); setValorTextoFiltro2(null); consultar(); } catch (Exception ex) { handle(ex); } } protected void inicializarControles() { gridPanelCodigo1.setRendered(getRecursoDataProvider().isRecursoCodificable()); gridPanelCodigo2.setRendered(getRecursoDataProvider().isRecursoCodificable()); gridPanelCodigo3.setRendered(getRecursoDataProvider().isRecursoCodificable()); gridPanelNombre1.setRendered(getRecursoDataProvider().isRecursoNombrable()); gridPanelNombre2.setRendered(getRecursoDataProvider().isRecursoNombrable()); gridPanelNombre3.setRendered(getRecursoDataProvider().isRecursoNombrable()); } public Object getItemsListaFiltro1() { track("getItemsListaFiltro1"); Object items = null; Long valor = getRecursoDataProvider().getFuncionSelect(); if (valor != null && valor > 0) { FiltroBusqueda filtro = new FiltroBusqueda(); String clave = FiltroFuncionCachedRowSetDataProvider2.COLUMNA_ID_FUNCION; try { filtro.addCriterio(clave, valor); filtroDataProvider.consultarFiltroFuncion(filtro); items = filtroDataProvider.getListaOpciones(true, EnumColumnaEtiqueta.COLUMNA_NOMBRE); } catch (ExcepcionAplicacion ex) { items = null; } } return items; } protected void consultar() { /* * es necesario dejar que sea la pagina la que ejecute la consulta, dado que en preprsentar * la pagina tiene logica de validacion que debe ejecutarse antes de consultar. */ setConsultaPendiente(); } protected void consultar(Long filtro, String codigo, String nombre) { /* * es necesario dejar que sea la pagina la que ejecute la consulta, dado que en preprsentar * la pagina tiene logica de validacion que debe ejecutarse antes de consultar. */ setConsultaPendiente(filtro, codigo, nombre); } protected void setConsultaPendiente() { setConsultaPendiente(getValorListaFiltro1(), getValorTextoFiltro1(), getValorTextoFiltro2()); } protected void setConsultaPendiente(Long filtro, String codigo, String nombre) { PaginaConsultaConFiltro pagina = getPaginaConsultaConFiltro(); pagina.getContextoPeticion().setFiltroFuncionSelect(filtro); pagina.getContextoPeticion().setCodigoFuncionSelect(StringUtils.trimToNull(codigo)); pagina.getContextoPeticion().setNombreFuncionSelect(StringUtils.trimToNull(nombre)); pagina.setConsultaPendiente(true); } public String botonBorrar1_action() { setValorTextoFiltro1(null); return null; } public String botonBorrar2_action() { setValorTextoFiltro2(null); return null; } public String botonBorrarFiltro1_action() { setValorListaFiltro1(null); return null; } public String botonBuscarFiltro1_action() { track("botonBuscarFiltro1_action"); return null; } public String getScriptBotonBuscarFiltro1() { track("getScriptBotonBuscarFiltro1"); String car = campoAplicarFiltro1.getClientId(getFacesContext()); String bar = botonAplicarFiltro1.getClientId(getFacesContext()); long funcion = getRecursoDataProvider().getFuncionSelect(); return getScriptAbrirVentanaFiltros(URX.FILTRO_FUNCION, car, bar, funcion); } public String getScriptBotonBuscarFiltro2() { track("getScriptBotonBuscarFiltro2"); String car = campoAplicarFiltro1.getClientId(getFacesContext()); String bar = botonAplicarFiltro1.getClientId(getFacesContext()); long funcion = getRecursoDataProvider().getFuncionSelect(); Long filtro = getValorListaFiltro1(); if (filtro == null) { return getScriptAbrirVentanaFiltros(URX.FILTRO_FUNCION, car, bar, funcion); } else { return getScriptAbrirVentanaFiltros(URX.FILTRO_FUNCION_PAR, car, bar, filtro); } } private String getScriptAbrirVentanaFiltros(String url, String car, String bar, long rm) { ListaParametros rpl = new ListaParametros(); rpl.addParametro(CPP.ID_OPCION_CAMPO_RETORNO, FiltroFuncionCachedRowSetDataProvider2.COLUMNA_ID_FILTRO_FUNCION); rpl.addParametro(CPP.ID_CAMPO_ACCION_RETORNO, car); rpl.addParametro(CPP.ID_BOTON_ACCION_RETORNO, bar); rpl.addParametro(CPP.ID_RECURSO_MAESTRO, String.valueOf(rm)); return JSF.getOpenWindowJavaScript(url, rpl.toString()); } public String botonAplicarFiltro1_action() { try { if (campoAplicarFiltro1.getText() != null) { String filtro = (String) campoAplicarFiltro1.getText(); campoAplicarFiltro1.setText(null); if (StringUtils.isNotBlank(filtro) && filtro.startsWith(Global.PREFIJO_STRING_ID_RECURSO)) { Long valor = Long.valueOf(filtro.substring(1)); setValorListaFiltro1(valor); } } consultar(); } catch (Exception ex) { handle(ex); } finally { return null; } } public String botonQuitarFiltro1_action() { consultar(null, null, null); return null; } public String botonRestaurarFiltro1_action() { setValorTextoFiltro1(getRecursoDataProvider().getCodigoFuncionSelectAnterior()); setValorTextoFiltro2(getRecursoDataProvider().getNombreFuncionSelectAnterior()); setValorListaFiltro1(getRecursoDataProvider().getFiltroFuncionSelectAnterior()); consultar(); return null; } public String botonOcultarFiltro1_action() { getRecursoDataProvider().setFiltroEscondido(true); return null; } public String botonMostrarFiltro1_action() { getRecursoDataProvider().setFiltroEscondido(false); return null; } public void listaFiltro1_processValueChange(ValueChangeEvent event) { /* * Dado que este drop-down tiene la opcion de enviar automaticamente al modificar * y la pagina puede tener una tabla actualizable, entonces no se debe consultar aqui; * hay que hacerlo en el prerender. Esto se logra con la propiedad consultaPendiente. * * OJO: con la funcion "erase" se podria haber solucionado este problema, pero ahora * es necesario dejar que sea la pagina la que ejecute la consulta, dado que en preprsentar * la pagina tiene logica de validacion que debe ejecutarse antes de consultar. */ /* * Como ahora se aplican los 3 criterios (filtro, codigo y nombre) con un solo boton, * ya no se hace nada aqui; per aun se mantiene la opcion de enviar automaticamente * para actualizar el script cuando cambia de filtro. */ } // <editor-fold defaultstate="collapsed" desc="metodos estandar para el manejo de errores (track, trace, handle, show, ...)"> public void track(String metodo) { Bitacora.trace(getClass(), metodo); } public void trace(String mensaje) { Bitacora.trace(mensaje); } public void tell() { Iterator iterator = TLC.getBitacora().iterator(); while (iterator.hasNext()) { Mensaje mensaje = (Mensaje) iterator.next(); if (mensaje != null) { switch (mensaje.getSeveridad()) { case INFORMATIVO: info(mensaje.toString()); break; case ADVERTENCIA: warn(mensaje.toString()); break; case ERROR: error(mensaje.toString()); break; case FATAL: fatal(mensaje.toString()); break; default: info(mensaje.toString()); break; } } } TLC.getBitacora().clear(); } public void handle(Exception ex) { String string = ThrowableUtils.getString(ex); if (TLC.getBitacora().contiene(string)) { tell(); } else { tell(); fatal(string); log(string, ex); } } // </editor-fold> }