public String getSelectStatement() throws ExcepcionAplicacion { check(); String alias; TipoAgregacionBase agregacion; TipoAgregacionEnumeration tipoAgregacion; VistaFuncionColBase grupo; boolean orden; ArrayList<String> detalle = new ArrayList<>(); ArrayList<String> resumen = new ArrayList<>(); ArrayList<String> grafico = new ArrayList<>(); ArrayList<String> groupBy = new ArrayList<>(); ArrayList<String> orderBy = new ArrayList<>(); for (VistaFuncionColBase vistaFuncionCol : _columnas) { alias = vistaFuncionCol.getAlias(); agregacion = vistaFuncionCol.getAgregacion(); tipoAgregacion = agregacion == null ? null : TipoAgregacionEnumeration.valueOf(agregacion.getNumero()); grupo = check(vistaFuncionCol.getGrupo()); orden = BitUtils.valueOf(vistaFuncionCol.getOrden()); // <editor-fold defaultstate="collapsed"> // if (_columnasOcultas.contains(vistaFuncionCol)) { // addDetalle(detalle, alias, false); // addResumen(resumen, alias, tipoAgregacion, grupo, false); // addGrafico(grafico, alias, tipoAgregacion, grupo, false); // continue; // } // </editor-fold> addDetalle(detalle, alias, true); addResumen(resumen, alias, tipoAgregacion, grupo, true); addGrafico(grafico, alias, tipoAgregacion, grupo, true); addGroupBy(groupBy, alias, tipoAgregacion, grupo); addOrderBy(orderBy, alias, orden); } switch (_tipo) { case DETALLE: return select(false, detalle, _from, _where, null, orderBy); case RESUMEN: if (EnumFormatoGuardar.ARCHIVO.equals(_formato)) { return select(false, resumen, _from, _where, groupBy, groupBy); } else { return select(false, detalle, _from, _where, null, orderBy); } case GRAFICO: if (grafico.isEmpty()) { grafico.add("1"); return select(false, grafico, _from, _where, null, grafico); } else { return select(true, grafico, _from, _where, null, grafico); } default: return null; } }
private void init() throws ExcepcionAplicacion { _vista = EJBL.getVistaFuncionFacade().find(_id, true); if (_vista == null) { throw new ExcepcionAplicacion(Bitacora.getTextoMensaje(CBM.VISTA_NO_DISPONIBLE, _nombre)); } _nombre = _vista.getNombre(); _from = from(_select); if (StringUtils.isBlank(_from)) { // vista "{0}" no tiene origen throw new ExcepcionAplicacion( Bitacora.getTextoMensaje(CBM.ERROR_COMANDO_SELECT_VISTA_1, _nombre)); } _where = where(_select); _columnas = new ArrayList<>(_vista.getVistaFuncionColByVistaCollection()); _columnasOcultas = new ArrayList<>(); _grupos = new ArrayList<>(); _agregaciones = new ArrayList<>(); VistaFuncionColPorSecuencia c1 = new VistaFuncionColPorSecuencia(); VistaFuncionColPorId c2 = new VistaFuncionColPorId(); Comparator<VistaFuncionColBase> comparator = (Comparator<VistaFuncionColBase>) ComparatorUtils.chainedComparator(c1, c2); Collections.sort((List<VistaFuncionColBase>) _columnas, comparator); boolean parametrosRestringidos = TLC.getControlador().esFuncionConParametrosRestringidos(_vista.getFuncion().getIdFuncion()); String codigoDominio = _vista.getFuncion().getIdDominio().getCodigoDominio(); TipoAgregacionBase agregacion; TipoAgregacionEnumeration tipoAgregacion; VistaFuncionColBase grupo; String alias; String propertyColumn; Long propertySelect; boolean parametroAutorizado; for (VistaFuncionColBase vistaFuncionCol : _columnas) { agregacion = vistaFuncionCol.getAgregacion(); tipoAgregacion = agregacion == null ? null : TipoAgregacionEnumeration.valueOf(agregacion.getNumero()); grupo = vistaFuncionCol.getGrupo(); alias = vistaFuncionCol.getAlias(); if (parametrosRestringidos) { propertyColumn = BaseBundle.getPropertyColumn(codigoDominio, alias); propertySelect = BaseBundle.getPropertySelect(codigoDominio, alias); parametroAutorizado = propertyColumn == null || propertySelect == null || TLC.getControlador().esParametroAutorizado(propertyColumn, propertySelect); } else { parametroAutorizado = true; } if (parametroAutorizado) { if (tipoAgregacion != null) { if (TipoAgregacionEnumeration.GRUPO.equals(tipoAgregacion)) { if (grupo != null && vistaFuncionCol.getId().equals(grupo.getId())) { _grupos.add(vistaFuncionCol); _ultimo = vistaFuncionCol; } } else { _agregaciones.add(vistaFuncionCol); } } _orden |= BitUtils.valueOf(vistaFuncionCol.getOrden()); } else { _columnasOcultas.add(vistaFuncionCol); } } if (_columnasOcultas.isEmpty()) { if (_columnas.isEmpty()) { // vista "{0}" no tiene columnas throw new ExcepcionAplicacion( Bitacora.getTextoMensaje(CBM.ERROR_COMANDO_SELECT_VISTA_2, _nombre)); } switch (_tipo) { case DETALLE: if (_grupos.isEmpty()) { } else if (_agregaciones.isEmpty()) { // vista "{0}" no tiene agregaciones throw new ExcepcionAplicacion( Bitacora.getTextoMensaje(CBM.ERROR_COMANDO_SELECT_VISTA_4, _nombre)); } break; case GRAFICO: if (_grupos.isEmpty()) { // vista "{0}" no tiene grupos throw new ExcepcionAplicacion( Bitacora.getTextoMensaje(CBM.ERROR_COMANDO_SELECT_VISTA_3, _nombre)); } if (_agregaciones.isEmpty()) { // vista "{0}" no tiene agregaciones throw new ExcepcionAplicacion( Bitacora.getTextoMensaje(CBM.ERROR_COMANDO_SELECT_VISTA_4, _nombre)); } agregacion = null; for (VistaFuncionColBase vistaFuncionCol : _agregaciones) { if (BitUtils.valueOf(vistaFuncionCol.getGraficable())) { continue; } agregacion = vistaFuncionCol.getAgregacion(); tipoAgregacion = TipoAgregacionEnumeration.valueOf(agregacion.getNumero()); TLC.getBitacora() .error( CBM.COLUMNA_NO_GRAFICABLE, vistaFuncionCol.getNombre(), tipoAgregacion.getLabel()); } if (agregacion != null) { throw new ExcepcionAplicacion( Bitacora.getTextoMensaje(CBM.VISTA_NO_GRAFICABLE, _nombre)); } break; case RESUMEN: if (_agregaciones.isEmpty()) { // vista "{0}" no tiene agregaciones throw new ExcepcionAplicacion( Bitacora.getTextoMensaje(CBM.ERROR_COMANDO_SELECT_VISTA_4, _nombre)); } break; } } else { for (VistaFuncionColBase vistaFuncionCol : _columnasOcultas) { TLC.getBitacora().error(CBM.COLUMNA_NO_AUTORIZADA, vistaFuncionCol.getNombre()); } throw new ExcepcionAplicacion(Bitacora.getTextoMensaje(CBM.VISTA_NO_AUTORIZADA, _nombre)); } if (_orden) { } else { // vista "{0}" no tiene orden TLC.getBitacora().warn(CBM.ERROR_COMANDO_SELECT_VISTA_5, _nombre); } _vistaValida = true; }
private String agg(String alias, boolean visible, TipoAgregacionEnumeration tipo) { String funcion = TLC.getInterpreteSql().getNombreFuncionAgregacion(tipo); String prefijo = StrUtils.getIdentificadorSqlLowerCase(tipo.getLabel()); String value = visible ? funcion + "(" + alias + ")" : "NULL"; return value + " AS " + prefijo + "__" + alias; }