ReportisticaHelper.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.core.monitor.rs.server.api.impl.utils;
import java.sql.Connection;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.openspcoop2.core.id.IDAccordo;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.core.monitor.rs.server.config.DBManager;
import org.openspcoop2.core.monitor.rs.server.config.LoggerProperties;
import org.openspcoop2.core.monitor.rs.server.model.BaseOggettoWithSimpleName;
import org.openspcoop2.core.monitor.rs.server.model.DimensioniReportCustomEnum;
import org.openspcoop2.core.monitor.rs.server.model.DimensioniReportEnum;
import org.openspcoop2.core.monitor.rs.server.model.EsitoTransazioneFullSearchEnum;
import org.openspcoop2.core.monitor.rs.server.model.FiltroApiBase;
import org.openspcoop2.core.monitor.rs.server.model.FiltroApiImplementata;
import org.openspcoop2.core.monitor.rs.server.model.FiltroApiSoggetti;
import org.openspcoop2.core.monitor.rs.server.model.FiltroEsito;
import org.openspcoop2.core.monitor.rs.server.model.FiltroMittenteErogazioneApplicativo;
import org.openspcoop2.core.monitor.rs.server.model.FiltroMittenteErogazioneSoggetto;
import org.openspcoop2.core.monitor.rs.server.model.FiltroMittenteFruizioneApplicativo;
import org.openspcoop2.core.monitor.rs.server.model.FiltroMittenteIdAutenticato;
import org.openspcoop2.core.monitor.rs.server.model.FiltroMittenteIndirizzoIP;
import org.openspcoop2.core.monitor.rs.server.model.FiltroMittenteTokenClaim;
import org.openspcoop2.core.monitor.rs.server.model.FiltroMittenteTokenClaimSoggetto;
import org.openspcoop2.core.monitor.rs.server.model.FiltroRicercaRuoloTransazioneEnum;
import org.openspcoop2.core.monitor.rs.server.model.FormatoReportEnum;
import org.openspcoop2.core.monitor.rs.server.model.OccupazioneBandaEnum;
import org.openspcoop2.core.monitor.rs.server.model.OccupazioneBandaTipi;
import org.openspcoop2.core.monitor.rs.server.model.OpzioniGenerazioneReport;
import org.openspcoop2.core.monitor.rs.server.model.OpzioniGenerazioneReportBase;
import org.openspcoop2.core.monitor.rs.server.model.OpzioniGenerazioneReportDimensioni;
import org.openspcoop2.core.monitor.rs.server.model.OpzioniGenerazioneReportMultiLine;
import org.openspcoop2.core.monitor.rs.server.model.RicercaBaseStatistica;
import org.openspcoop2.core.monitor.rs.server.model.RicercaBaseStatisticaSoggetti;
import org.openspcoop2.core.monitor.rs.server.model.RicercaConfigurazioneApi;
import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaAndamentoTemporale;
import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneApi;
import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneApplicativo;
import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneApplicativoRegistrato;
import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneAzione;
import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneErrori;
import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneEsiti;
import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneSoggettoLocale;
import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneSoggettoRemoto;
import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneTokenInfo;
import org.openspcoop2.core.monitor.rs.server.model.TempoMedioRispostaEnum;
import org.openspcoop2.core.monitor.rs.server.model.TempoMedioRispostaTipi;
import org.openspcoop2.core.monitor.rs.server.model.TipoFiltroMittenteEnum;
import org.openspcoop2.core.monitor.rs.server.model.TipoInformazioneReportEnum;
import org.openspcoop2.core.monitor.rs.server.model.TipoInformazioneReportMultiLineNumeroTransazioni;
import org.openspcoop2.core.monitor.rs.server.model.TipoInformazioneReportMultiLineOccupazioneBanda;
import org.openspcoop2.core.monitor.rs.server.model.TipoInformazioneReportMultiLineTempoMedioRisposta;
import org.openspcoop2.core.monitor.rs.server.model.TipoInformazioneReportNumeroTransazioni;
import org.openspcoop2.core.monitor.rs.server.model.TipoInformazioneReportOccupazioneBanda;
import org.openspcoop2.core.monitor.rs.server.model.TipoInformazioneReportTempoMedioRisposta;
import org.openspcoop2.core.monitor.rs.server.model.UnitaTempoReportEnum;
import org.openspcoop2.core.registry.driver.IDAccordoFactory;
import org.openspcoop2.generic_project.exception.NotFoundException;
import org.openspcoop2.generic_project.utils.ServiceManagerProperties;
import org.openspcoop2.message.constants.ServiceBinding;
import org.openspcoop2.protocol.sdk.config.IProtocolConfiguration;
import org.openspcoop2.utils.date.DateUtils;
import org.openspcoop2.utils.regexp.RegExpNotFoundException;
import org.openspcoop2.utils.regexp.RegularExpressionEngine;
import org.openspcoop2.utils.service.beans.TransazioneRuoloEnum;
import org.openspcoop2.utils.service.context.IContext;
import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
import org.openspcoop2.web.monitor.statistiche.constants.CostantiExporter;
import org.openspcoop2.web.monitor.statistiche.dao.ConfigurazioniGeneraliService;
import org.openspcoop2.web.monitor.statistiche.dao.StatisticheGiornaliereService;
/**
* ReportisticaHelper
*
* @author $Author$
* @version $Rev$, $Date$
*
*/
public class ReportisticaHelper {
private static void setEsitoCodice(EsitoTransazioneFullSearchEnum tipo , FiltroEsito filtro, HttpRequestWrapper wrap) {
if(filtro.getCodice()!=null) {
wrap.overrideParameter(CostantiExporter.ESITO, filtro.getCodice().toString());
}
else if(filtro.getCodici()!=null && !filtro.getCodici().isEmpty()) {
if(filtro.getCodici().size()==1) {
wrap.overrideParameter(CostantiExporter.ESITO, filtro.getCodici().get(0).toString());
}
else {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Con il tipo di esito indicato '"+tipo.toString()+"' può essere indicato solamente un codice");
}
}
}
public static final void overrideFiltroEsito(FiltroEsito filtro, HttpRequestWrapper wrap, MonitoraggioEnv env) {
if (filtro != null) {
EsitoTransazioneFullSearchEnum tipo = CheckNotNull.getEsitoTransazione(filtro);
switch (tipo) {
case QUALSIASI:
wrap.overrideParameter(CostantiExporter.ESITO_GRUPPO, CostantiExporter.ESITO_GRUPPO_OK);
setEsitoCodice(tipo, filtro, wrap);
if(filtro.isEscludiScartate()!=null) {
wrap.overrideParameter(CostantiExporter.ESCLUDI_RICHIESTE_SCARTATE,
filtro.isEscludiScartate() ? CostantiExporter.ESCLUDI_RICHIESTE_SCARTATE_TRUE : CostantiExporter.ESCLUDI_RICHIESTE_SCARTATE_FALSE);
}
break;
case OK:
wrap.overrideParameter(CostantiExporter.ESITO_GRUPPO, CostantiExporter.ESITO_GRUPPO_OK);
setEsitoCodice(tipo, filtro, wrap);
break;
case FAULT:
wrap.overrideParameter(CostantiExporter.ESITO_GRUPPO, CostantiExporter.ESITO_GRUPPO_FAULT_APPLICATIVO);
setEsitoCodice(tipo, filtro, wrap);
break;
case FALLITE:
wrap.overrideParameter(CostantiExporter.ESITO_GRUPPO, CostantiExporter.ESITO_GRUPPO_FALLITE);
setEsitoCodice(tipo, filtro, wrap);
if(filtro.isEscludiScartate()!=null) {
wrap.overrideParameter(CostantiExporter.ESCLUDI_RICHIESTE_SCARTATE,
filtro.isEscludiScartate() ? CostantiExporter.ESCLUDI_RICHIESTE_SCARTATE_TRUE : CostantiExporter.ESCLUDI_RICHIESTE_SCARTATE_FALSE);
}
break;
case FALLITE_E_FAULT:
wrap.overrideParameter(CostantiExporter.ESITO_GRUPPO,
CostantiExporter.ESITO_GRUPPO_FALLITE_E_FAULT_APPLICATIVO);
setEsitoCodice(tipo, filtro, wrap);
if(filtro.isEscludiScartate()!=null) {
wrap.overrideParameter(CostantiExporter.ESCLUDI_RICHIESTE_SCARTATE,
filtro.isEscludiScartate() ? CostantiExporter.ESCLUDI_RICHIESTE_SCARTATE_TRUE : CostantiExporter.ESCLUDI_RICHIESTE_SCARTATE_FALSE);
}
break;
case ERRORI_CONSEGNA:
wrap.overrideParameter(CostantiExporter.ESITO_GRUPPO, CostantiExporter.ESITO_GRUPPO_ERRORI_CONSEGNA);
setEsitoCodice(tipo, filtro, wrap);
break;
case RICHIESTE_SCARTATE:
wrap.overrideParameter(CostantiExporter.ESITO_GRUPPO, CostantiExporter.ESITO_GRUPPO_RICHIESTE_SCARTATE);
setEsitoCodice(tipo, filtro, wrap);
break;
case PERSONALIZZATO:
if(filtro.getCodice()==null && (filtro.getCodici()==null || filtro.getCodici().isEmpty())) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Con il tipo di esito indicato '"+tipo.toString()+"' deve essere indicato almeno un codice");
}
List<Integer> dettaglioEsito = filtro.getCodici();
if(dettaglioEsito==null || dettaglioEsito.isEmpty()) {
dettaglioEsito = new ArrayList<Integer>();
dettaglioEsito.add(filtro.getCodice());
}
Iterable<String> esiti = dettaglioEsito.stream()
.map(e -> e.toString())::iterator;
wrap.overrideParameter(CostantiExporter.ESITO, String.join(",", esiti));
break;
}
}
}
public static final void overrideRicercaBaseStatistica(RicercaBaseStatistica body, HttpRequestWrapper wrap,
MonitoraggioEnv env) {
if (body == null)
return;
// defaults:
if (body.getUnitaTempo() == null)
body.setUnitaTempo(UnitaTempoReportEnum.GIORNALIERO);
// Intervallo Temporale
SimpleDateFormat sdf = DateUtils.getSimpleDateFormatMs();
wrap.overrideParameter(CostantiExporter.DATA_INIZIO,
sdf.format(body.getIntervalloTemporale().getDataInizio().toDate()));
wrap.overrideParameter(CostantiExporter.DATA_FINE,
sdf.format(body.getIntervalloTemporale().getDataFine().toDate()));
wrap.overrideParameter(CostantiExporter.TIPO_UNITA_TEMPORALE,
Enums.toStatisticType.get(body.getUnitaTempo()).toString());
wrap.overrideParameter(CostantiExporter.TIPOLOGIA,
Enums.toTipologiaFiltroRicercaRuoloTransazioneEnum.get(body.getTipo()).toString());
if(body.getIdCluster()!=null) {
wrap.overrideParameter(CostantiExporter.ID_CLUSTER,
body.getIdCluster());
}
if(body.getTag()!=null) {
wrap.overrideParameter(CostantiExporter.GRUPPO,
body.getTag());
}
}
public static final void overrideFiltroMittenteIdApplicativo(FiltroMittenteIdAutenticato filtro,
HttpRequestWrapper wrap, MonitoraggioEnv env) {
if (filtro == null)
return;
wrap.overrideParameter(CostantiExporter.TIPO_AUTENTICAZIONE,Enums.toTipoAutenticazione.get(filtro.getAutenticazione()).getValue());
if (filtro.getId() != null) {
wrap.overrideParameter(CostantiExporter.IDENTIFICATIVO_RICERCA_MITTENTE, filtro.getId());
}
if (filtro.isRicercaEsatta() != null) {
wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_ESATTA, filtro.isRicercaEsatta() + "");
}
if (filtro.isCaseSensitive() != null) {
wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_CASE_SENSITIVE,
filtro.isCaseSensitive() + "");
}
}
public static final void overrideFiltroMittenteIndirizzoIP(FiltroMittenteIndirizzoIP filtro,
HttpRequestWrapper wrap, MonitoraggioEnv env) {
if (filtro == null)
return;
if(filtro.getTipo()!=null) {
wrap.overrideParameter(CostantiExporter.TIPO_INDIRIZZO_IP,Enums.toTipoIndirizzzoIP.get(filtro.getTipo()));
}
if (filtro.getId() != null) {
wrap.overrideParameter(CostantiExporter.IDENTIFICATIVO_RICERCA_MITTENTE, filtro.getId());
}
if (filtro.isRicercaEsatta() != null) {
wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_ESATTA, filtro.isRicercaEsatta() + "");
}
if (filtro.isCaseSensitive() != null) {
wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_CASE_SENSITIVE,
filtro.isCaseSensitive() + "");
}
}
public static final void overrideFiltroMittenteFruizione(TipoFiltroMittenteEnum tipo, Object filtro, boolean isDistribuzioneSoggettoRemoto, HttpRequestWrapper wrap,
MonitoraggioEnv env) {
if (filtro == null)
return;
if (tipo == null)
return;
wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE, Enums.toTipoRicercaMittente(tipo));
switch (tipo) {
case EROGAZIONE_SOGGETTO: {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile nella generazione di un report con il criterio 'ruolo transazione' impostato al valore '"+FiltroRicercaRuoloTransazioneEnum.FRUIZIONE.toString()+"'");
}
case FRUIZIONE_APPLICATIVO: {
if(! (filtro instanceof FiltroMittenteFruizioneApplicativo)) {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteFruizioneApplicativo.class.getName()+")");
}
FiltroMittenteFruizioneApplicativo fAppl = (FiltroMittenteFruizioneApplicativo) filtro;
if(fAppl.getTipoIdentificazioneApplicativo()!=null) {
switch (fAppl.getTipoIdentificazioneApplicativo()) {
case TRASPORTO:
wrap.overrideParameter(CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO, CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO_TRASPORTO);
break;
case TOKEN:
wrap.overrideParameter(CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO, CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO_TOKEN);
break;
}
}
else {
wrap.overrideParameter(CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO, CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO_TRASPORTO);
}
wrap.overrideParameter(CostantiExporter.APPLICATIVO, fAppl.getApplicativo());
break;
}
case EROGAZIONE_APPLICATIVO: {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile nella generazione di un report con il criterio 'ruolo transazione' impostato al valore '"+FiltroRicercaRuoloTransazioneEnum.FRUIZIONE.toString()+"'");
}
case IDENTIFICATIVO_AUTENTICATO: {
if(! (filtro instanceof FiltroMittenteIdAutenticato)) {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteIdAutenticato.class.getName()+")");
}
FiltroMittenteIdAutenticato fIdAutenticato = (FiltroMittenteIdAutenticato) filtro;
ReportisticaHelper.overrideFiltroMittenteIdApplicativo(fIdAutenticato, wrap, env);
break;
}
case EROGAZIONE_TOKEN_INFO: {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile nella generazione di un report con il criterio 'ruolo transazione' impostato al valore '"+FiltroRicercaRuoloTransazioneEnum.FRUIZIONE.toString()+"'");
}
case TOKEN_INFO: {
if(! (filtro instanceof FiltroMittenteTokenClaim)) {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteTokenClaim.class.getName()+")");
}
FiltroMittenteTokenClaim fClaim = (FiltroMittenteTokenClaim) filtro;
wrap.overrideParameter(CostantiExporter.RICERCA_MITTENTE_TIPO_CLAIM, Enums.toTokenSearchClaim.get(fClaim.getClaim()));
wrap.overrideParameter(CostantiExporter.IDENTIFICATIVO_RICERCA_MITTENTE, fClaim.getId());
wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_ESATTA, fClaim.isRicercaEsatta() + "");
wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_CASE_SENSITIVE,fClaim.isCaseSensitive() + "");
break;
}
case INDIRIZZO_IP: {
if(! (filtro instanceof FiltroMittenteIndirizzoIP)) {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteIndirizzoIP.class.getName()+")");
}
FiltroMittenteIndirizzoIP indirizzoIP = (FiltroMittenteIndirizzoIP) filtro;
ReportisticaHelper.overrideFiltroMittenteIndirizzoIP(indirizzoIP, wrap, env);
break;
}
}
}
public static final void overrideFiltroMittenteErogazione(TipoFiltroMittenteEnum tipo, Object filtro, boolean isDistribuzioneSoggettoRemoto, HttpRequestWrapper wrap,
MonitoraggioEnv env) {
if (filtro == null)
return;
if (tipo == null)
return;
wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE, Enums.toTipoRicercaMittente(tipo));
switch (tipo) {
case EROGAZIONE_SOGGETTO: {
if(isDistribuzioneSoggettoRemoto) {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile nella generazione di un report con distribuzione per soggetto remoto");
}
if(! (filtro instanceof FiltroMittenteErogazioneSoggetto)) {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteErogazioneSoggetto.class.getName()+")");
}
FiltroMittenteErogazioneSoggetto fSogg = (FiltroMittenteErogazioneSoggetto) filtro;
wrap.overrideParameter(CostantiExporter.MITTENTE, new IDSoggetto(env.tipoSoggetto, fSogg.getSoggetto()).toString());
break;
}
case FRUIZIONE_APPLICATIVO: {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile nella generazione di un report con il criterio 'ruolo transazione' impostato al valore '"+FiltroRicercaRuoloTransazioneEnum.EROGAZIONE.toString()+"'");
}
case EROGAZIONE_APPLICATIVO: {
if(isDistribuzioneSoggettoRemoto) {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile nella generazione di un report con distribuzione per soggetto remoto");
}
if(! (filtro instanceof FiltroMittenteErogazioneApplicativo)) {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteErogazioneApplicativo.class.getName()+")");
}
FiltroMittenteErogazioneApplicativo fAppl = (FiltroMittenteErogazioneApplicativo) filtro;
if(fAppl.getTipoIdentificazioneApplicativo()!=null) {
switch (fAppl.getTipoIdentificazioneApplicativo()) {
case TRASPORTO:
wrap.overrideParameter(CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO, CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO_TRASPORTO);
break;
case TOKEN:
wrap.overrideParameter(CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO, CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO_TOKEN);
break;
}
}
else {
wrap.overrideParameter(CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO, CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO_TRASPORTO);
}
wrap.overrideParameter(CostantiExporter.APPLICATIVO, fAppl.getApplicativo());
wrap.overrideParameter(CostantiExporter.MITTENTE,new IDSoggetto(env.tipoSoggetto, fAppl.getSoggetto()).toString());
break;
}
case IDENTIFICATIVO_AUTENTICATO: {
if(! (filtro instanceof FiltroMittenteIdAutenticato)) {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteIdAutenticato.class.getName()+")");
}
FiltroMittenteIdAutenticato fIdAutenticato = (FiltroMittenteIdAutenticato) filtro;
ReportisticaHelper.overrideFiltroMittenteIdApplicativo(fIdAutenticato, wrap, env);
break;
}
case EROGAZIONE_TOKEN_INFO: {
if(isDistribuzioneSoggettoRemoto) {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile nella generazione di un report con distribuzione per soggetto remoto");
}
else {
if(! (filtro instanceof FiltroMittenteTokenClaimSoggetto)) {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteTokenClaimSoggetto.class.getName()+")");
}
FiltroMittenteTokenClaimSoggetto fClaim = (FiltroMittenteTokenClaimSoggetto) filtro;
wrap.overrideParameter(CostantiExporter.RICERCA_MITTENTE_TIPO_CLAIM, Enums.toTokenSearchClaim.get(fClaim.getClaim()));
wrap.overrideParameter(CostantiExporter.IDENTIFICATIVO_RICERCA_MITTENTE, fClaim.getId());
wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_ESATTA, fClaim.isRicercaEsatta() + "");
wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_CASE_SENSITIVE, fClaim.isCaseSensitive() + "");
if (fClaim.getSoggetto() != null) {
wrap.overrideParameter(CostantiExporter.MITTENTE, new IDSoggetto(env.tipoSoggetto, fClaim.getSoggetto()).toString());
}
break;
}
}
case TOKEN_INFO: {
if(! (filtro instanceof FiltroMittenteTokenClaim)) {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteTokenClaim.class.getName()+")");
}
FiltroMittenteTokenClaim fClaim = (FiltroMittenteTokenClaim) filtro;
wrap.overrideParameter(CostantiExporter.RICERCA_MITTENTE_TIPO_CLAIM, Enums.toTokenSearchClaim.get(fClaim.getClaim()));
wrap.overrideParameter(CostantiExporter.IDENTIFICATIVO_RICERCA_MITTENTE, fClaim.getId());
wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_ESATTA, fClaim.isRicercaEsatta() + "");
wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_CASE_SENSITIVE, fClaim.isCaseSensitive() + "");
break;
}
case INDIRIZZO_IP: {
if(! (filtro instanceof FiltroMittenteIndirizzoIP)) {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteIndirizzoIP.class.getName()+")");
}
FiltroMittenteIndirizzoIP indirizzoIP = (FiltroMittenteIndirizzoIP) filtro;
ReportisticaHelper.overrideFiltroMittenteIndirizzoIP(indirizzoIP, wrap, env);
break;
}
} // switch
}
public static final void overrideFiltroMittenteQualsiasi(TipoFiltroMittenteEnum tipo, Object filtro, boolean isDistribuzioneSoggettoRemoto, HttpRequestWrapper wrap,
MonitoraggioEnv env) {
if (filtro == null)
return;
if (tipo == null)
return;
wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE, Enums.toTipoRicercaMittente(tipo));
switch (tipo) {
case EROGAZIONE_SOGGETTO: {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile nella generazione di un report con il criterio 'ruolo transazione' impostato al valore '"+FiltroRicercaRuoloTransazioneEnum.QUALSIASI.toString()+"'");
}
case FRUIZIONE_APPLICATIVO: {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile nella generazione di un report con il criterio 'ruolo transazione' impostato al valore '"+FiltroRicercaRuoloTransazioneEnum.QUALSIASI.toString()+"'");
}
case EROGAZIONE_APPLICATIVO: {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile nella generazione di un report con il criterio 'ruolo transazione' impostato al valore '"+FiltroRicercaRuoloTransazioneEnum.QUALSIASI.toString()+"'");
}
case IDENTIFICATIVO_AUTENTICATO: {
if(! (filtro instanceof FiltroMittenteIdAutenticato)) {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteIdAutenticato.class.getName()+")");
}
FiltroMittenteIdAutenticato fIdAutenticato = (FiltroMittenteIdAutenticato) filtro;
ReportisticaHelper.overrideFiltroMittenteIdApplicativo(fIdAutenticato, wrap, env);
break;
}
case EROGAZIONE_TOKEN_INFO: {
if(isDistribuzioneSoggettoRemoto) {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile nella generazione di un report con distribuzione per soggetto remoto");
}
else {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile nella generazione di un report con il criterio 'ruolo transazione' impostato al valore '"+FiltroRicercaRuoloTransazioneEnum.QUALSIASI.toString()+"'");
}
}
case TOKEN_INFO: {
if(! (filtro instanceof FiltroMittenteTokenClaim)) {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteTokenClaim.class.getName()+")");
}
FiltroMittenteTokenClaim fClaim = (FiltroMittenteTokenClaim) filtro;
wrap.overrideParameter(CostantiExporter.RICERCA_MITTENTE_TIPO_CLAIM, Enums.toTokenSearchClaim.get(fClaim.getClaim()));
wrap.overrideParameter(CostantiExporter.IDENTIFICATIVO_RICERCA_MITTENTE, fClaim.getId());
wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_ESATTA, fClaim.isRicercaEsatta() + "");
wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_CASE_SENSITIVE,fClaim.isCaseSensitive() + "");
break;
}
case INDIRIZZO_IP: {
if(! (filtro instanceof FiltroMittenteIndirizzoIP)) {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Identificazione '"+tipo.toString()+"' "
+ "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteIndirizzoIP.class.getName()+")");
}
FiltroMittenteIndirizzoIP indirizzoIP = (FiltroMittenteIndirizzoIP) filtro;
ReportisticaHelper.overrideFiltroMittenteIndirizzoIP(indirizzoIP, wrap, env);
break;
}
}
}
public static final void overrideOpzioniGenerazioneReportBase(OpzioniGenerazioneReportBase body,
HttpRequestWrapper wrap, MonitoraggioEnv env) {
if (body == null)
return;
wrap.overrideParameter(CostantiExporter.TIPO_FORMATO, Enums.toTipoFormato.get(body.getFormato()));
org.openspcoop2.core.statistiche.constants.TipoReport tipoReport = Enums.toTipoReport.get(body.getTipo());
if (tipoReport == null)
tipoReport = org.openspcoop2.core.statistiche.constants.TipoReport.TABELLA;
wrap.overrideParameter(CostantiExporter.TIPO_REPORT, tipoReport.toString());
}
public static final void setTipoInformazioneReport(OpzioniGenerazioneReport opzioni, TipoInformazioneReportEnum tipoInformazioneReport,
DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {
TipoInformazioneReportEnum tipoInfo = tipoInformazioneReport!=null ? tipoInformazioneReport : TipoInformazioneReportEnum.NUMERO_TRANSAZIONI;
switch (tipoInfo) {
case NUMERO_TRANSAZIONI:
opzioni.setTipoInformazione(new TipoInformazioneReportNumeroTransazioni());
((TipoInformazioneReportNumeroTransazioni)opzioni.getTipoInformazione()).setTipo(tipoInfo);
break;
case OCCUPAZIONE_BANDA:
opzioni.setTipoInformazione(new TipoInformazioneReportOccupazioneBanda());
((TipoInformazioneReportOccupazioneBanda)opzioni.getTipoInformazione()).setTipo(tipoInfo);
break;
case TEMPO_MEDIO_RISPOSTA:
opzioni.setTipoInformazione(new TipoInformazioneReportTempoMedioRisposta());
((TipoInformazioneReportTempoMedioRisposta)opzioni.getTipoInformazione()).setTipo(tipoInfo);
break;
}
if(dimensioniReport!=null && opzioni instanceof OpzioniGenerazioneReportDimensioni) {
OpzioniGenerazioneReportDimensioni o = (OpzioniGenerazioneReportDimensioni) opzioni;
o.setDimensioni(dimensioniReport);
if(dimensioniReportCustomInfo!=null && !DimensioniReportEnum._3DCUSTOM.equals(dimensioniReport)) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Solamente con una dimensione '"+DimensioniReportEnum._3DCUSTOM.toString()+"' è possibile indicare una informazione custom da includere nel report");
}
o.setCustomInfo(dimensioniReportCustomInfo);
}
}
public static final void overrideOpzioniGenerazioneReport(OpzioniGenerazioneReport body, HttpRequestWrapper wrap,
MonitoraggioEnv env) {
if (body == null)
return;
ReportisticaHelper.overrideOpzioniGenerazioneReportBase(body, wrap, env);
// defaults
if (body.getTipoInformazione() == null)
body.setTipoInformazione(new TipoInformazioneReportNumeroTransazioni());
if (body.getTipoInformazione().getTipo() == null) {
if(body.getTipoInformazione() instanceof TipoInformazioneReportNumeroTransazioni) {
((TipoInformazioneReportNumeroTransazioni)body.getTipoInformazione()).setTipo(TipoInformazioneReportEnum.NUMERO_TRANSAZIONI);
}
else if(body.getTipoInformazione() instanceof TipoInformazioneReportOccupazioneBanda) {
((TipoInformazioneReportOccupazioneBanda)body.getTipoInformazione()).setTipo(TipoInformazioneReportEnum.OCCUPAZIONE_BANDA);
}
else if(body.getTipoInformazione() instanceof TipoInformazioneReportTempoMedioRisposta) {
((TipoInformazioneReportTempoMedioRisposta)body.getTipoInformazione()).setTipo(TipoInformazioneReportEnum.TEMPO_MEDIO_RISPOSTA);
}
}
wrap.overrideParameter(CostantiExporter.TIPO_INFORMAZIONE_VISUALIZZATA, Enums.toTipoVisualizzazione.get(body.getTipoInformazione().getTipo()).toString());
switch (body.getTipoInformazione().getTipo()) {
case NUMERO_TRANSAZIONI:
break;
case OCCUPAZIONE_BANDA: {
TipoInformazioneReportOccupazioneBanda ob = (TipoInformazioneReportOccupazioneBanda) body.getTipoInformazione();
OccupazioneBandaEnum val = ob.getOccupazioneBanda();
if(val==null) {
val = OccupazioneBandaEnum.COMPLESSIVA;
}
wrap.overrideParameter(CostantiExporter.TIPO_BANDA_VISUALIZZATA, Enums.toTipoBanda.get(val).toString());
break;
}
case TEMPO_MEDIO_RISPOSTA: {
TipoInformazioneReportTempoMedioRisposta tm = (TipoInformazioneReportTempoMedioRisposta) body.getTipoInformazione();
TempoMedioRispostaEnum val = tm.getTempoMedioRisposta();
if(val==null) {
val = TempoMedioRispostaEnum.TOTALE;
}
wrap.overrideParameter(CostantiExporter.TIPO_LATENZA_VISUALIZZATA, Enums.toTipoLatenza.get(val).toString());
break;
}
}
if(body instanceof OpzioniGenerazioneReportDimensioni) {
OpzioniGenerazioneReportDimensioni o = (OpzioniGenerazioneReportDimensioni) body;
if(o.getDimensioni()!=null) {
wrap.overrideParameter(CostantiExporter.DIMENSIONI_VISUALIZZATE, Enums.getNumeroDimensioniMap().get(o.getDimensioni()).getValue());
}
if(o.getCustomInfo()!=null) {
wrap.overrideParameter(CostantiExporter.DIMENSIONE_INFO_CUSTOM, Enums.getInformazioneDimensioneCustom().get(o.getCustomInfo()).getValue());
}
}
}
public static final void setTipoInformazioneReportMultiLine(OpzioniGenerazioneReportMultiLine opzioni, TipoInformazioneReportEnum tipoInformazioneReport) {
TipoInformazioneReportEnum tipoInfo = tipoInformazioneReport!=null ? tipoInformazioneReport : TipoInformazioneReportEnum.NUMERO_TRANSAZIONI;
switch (tipoInfo) {
case NUMERO_TRANSAZIONI:
opzioni.setTipoInformazione(new TipoInformazioneReportMultiLineNumeroTransazioni());
((TipoInformazioneReportMultiLineNumeroTransazioni)opzioni.getTipoInformazione()).setTipo(tipoInfo);
break;
case OCCUPAZIONE_BANDA:
opzioni.setTipoInformazione(new TipoInformazioneReportMultiLineOccupazioneBanda());
((TipoInformazioneReportMultiLineOccupazioneBanda)opzioni.getTipoInformazione()).setTipo(tipoInfo);
break;
case TEMPO_MEDIO_RISPOSTA:
opzioni.setTipoInformazione(new TipoInformazioneReportMultiLineTempoMedioRisposta());
((TipoInformazioneReportMultiLineTempoMedioRisposta)opzioni.getTipoInformazione()).setTipo(tipoInfo);
break;
}
}
public static final void overrideOpzioniGenerazioneReportMultiLine(OpzioniGenerazioneReportMultiLine body,HttpRequestWrapper wrap, MonitoraggioEnv env) {
if (body == null)
return;
ReportisticaHelper.overrideOpzioniGenerazioneReportBase(body, wrap, env);
// defaults
if (body.getTipoInformazione() == null)
body.setTipoInformazione(new TipoInformazioneReportMultiLineNumeroTransazioni());
if (body.getTipoInformazione().getTipo() == null) {
if(body.getTipoInformazione() instanceof TipoInformazioneReportMultiLineNumeroTransazioni) {
((TipoInformazioneReportMultiLineNumeroTransazioni)body.getTipoInformazione()).setTipo(TipoInformazioneReportEnum.NUMERO_TRANSAZIONI);
}
else if(body.getTipoInformazione() instanceof TipoInformazioneReportMultiLineOccupazioneBanda) {
((TipoInformazioneReportMultiLineOccupazioneBanda)body.getTipoInformazione()).setTipo(TipoInformazioneReportEnum.OCCUPAZIONE_BANDA);
}
else if(body.getTipoInformazione() instanceof TipoInformazioneReportMultiLineTempoMedioRisposta) {
((TipoInformazioneReportMultiLineTempoMedioRisposta)body.getTipoInformazione()).setTipo(TipoInformazioneReportEnum.TEMPO_MEDIO_RISPOSTA);
}
}
wrap.overrideParameter(CostantiExporter.TIPO_INFORMAZIONE_VISUALIZZATA, Enums.toTipoVisualizzazione.get(body.getTipoInformazione().getTipo()).toString());
switch (body.getTipoInformazione().getTipo()) {
case NUMERO_TRANSAZIONI:
break;
case OCCUPAZIONE_BANDA: {
TipoInformazioneReportMultiLineOccupazioneBanda ob = (TipoInformazioneReportMultiLineOccupazioneBanda) body.getTipoInformazione();
OccupazioneBandaTipi val = ob.getOccupazioneBanda();
if(val==null) {
val = new OccupazioneBandaTipi(); // dentro il bean ci sono i default
}
ArrayList<String> abilitati = new ArrayList<>();
if (val.isBandaComplessiva())
abilitati.add(Enums.toTipoBanda.get(OccupazioneBandaEnum.COMPLESSIVA).toString());
if (val.isBandaEsterna())
abilitati.add(Enums.toTipoBanda.get(OccupazioneBandaEnum.ESTERNA).toString());
if (val.isBandaInterna())
abilitati.add(Enums.toTipoBanda.get(OccupazioneBandaEnum.INTERNA).toString());
wrap.overrideParameter(CostantiExporter.TIPO_BANDA_VISUALIZZATA, String.join(",", abilitati));
break;
}
case TEMPO_MEDIO_RISPOSTA: {
TipoInformazioneReportMultiLineTempoMedioRisposta tm = (TipoInformazioneReportMultiLineTempoMedioRisposta) body.getTipoInformazione();
TempoMedioRispostaTipi val = tm.getTempoMedioRisposta();
if(val==null) {
val = new TempoMedioRispostaTipi(); // dentro il bean ci sono i default
}
ArrayList<String> abilitati = new ArrayList<>();
if (val.isLatenzaGateway())
abilitati.add(Enums.toTipoLatenza.get(TempoMedioRispostaEnum.GATEWAY).toString());
if (val.isLatenzaServizio())
abilitati.add(Enums.toTipoLatenza.get(TempoMedioRispostaEnum.SERVIZIO).toString());
if (val.isLatenzaTotale())
abilitati.add(Enums.toTipoLatenza.get(TempoMedioRispostaEnum.TOTALE).toString());
wrap.overrideParameter(CostantiExporter.TIPO_LATENZA_VISUALIZZATA, String.join(",", abilitati));
break;
}
}
}
public static final void overrideRicercaBaseStatisticaSoggetti(RicercaBaseStatisticaSoggetti body,
HttpRequestWrapper wrap, MonitoraggioEnv env) throws Exception {
if (body == null)
return;
ReportisticaHelper.overrideRicercaBaseStatistica(body, wrap, env);
switch (body.getTipo()) {
case EROGAZIONE:
ReportisticaHelper.overrideFiltroErogazione(body.getTag(), body.getApi(), wrap, env);
break;
case FRUIZIONE:
ReportisticaHelper.overrideFiltroFruizione(body.getTag(), body.getApi(), wrap, env);
break;
case QUALSIASI:
ReportisticaHelper.overrideFiltroQualsiasi(body.getTag(), body.getApi(), wrap, env);
break;
}
}
public static final void overrideFiltroFruizione(String tag, FiltroApiSoggetti body, HttpRequestWrapper wrap,
MonitoraggioEnv env) throws Exception {
if (body == null) return;
IDSoggetto erogatore = new IDSoggetto(env.tipoSoggetto, body.getErogatore());
ReportisticaHelper.overrideFiltroApiBase(tag, body, erogatore, wrap, env);
}
public static final void overrideFiltroErogazione(String tag, FiltroApiSoggetti body, HttpRequestWrapper wrap, MonitoraggioEnv env) throws Exception {
if (body == null)
return;
IDSoggetto idSoggettoLocale = new IDSoggetto(env.tipoSoggetto, env.nomeSoggettoLocale);
ReportisticaHelper.overrideFiltroApiBase(tag, body, idSoggettoLocale, wrap, env);
}
public static final void overrideFiltroQualsiasi(String tag, FiltroApiSoggetti body, HttpRequestWrapper wrap, MonitoraggioEnv env) throws Exception {
if (body == null)
return;
IDSoggetto erogatore = new IDSoggetto(env.tipoSoggetto, body.getErogatore());
ReportisticaHelper.overrideFiltroApiBase(tag, body, erogatore, wrap, env);
if (!StringUtils.isEmpty(body.getSoggettoRemoto())) {
IDSoggetto remoto = new IDSoggetto(env.tipoSoggetto, body.getSoggettoRemoto());
wrap.overrideParameter(CostantiExporter.TRAFFICO_PER_SOGGETTO, remoto.toString() );
}
}
public static final void overrideFiltroApiBase(String tag, FiltroApiBase filtro_api, IDSoggetto erogatore, HttpRequestWrapper wrap, MonitoraggioEnv env) throws Exception {
if(tag!=null) {
wrap.overrideParameter(CostantiExporter.GRUPPO, tag);
}
if (filtro_api == null)
return;
if ( !StringUtils.isEmpty(filtro_api.getNome()) || filtro_api.getVersione() != null || !StringUtils.isEmpty(filtro_api.getTipo())) {
if (StringUtils.isEmpty(filtro_api.getNome())) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Filtro Api incompleto. Specificare il nome della API");
}
if (erogatore == null || TransazioniHelper.isEmpty(erogatore)) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Filtro Api incompleto. Specificare il Soggetto Erogatore (Nelle fruizioni è il soggetto remoto)");
}
if (filtro_api.getVersione() == null) {
filtro_api.setVersione(1);
}
if (filtro_api.getTipo() == null) {
try {
IProtocolConfiguration protocolConf = env.protocolFactoryMgr
.getProtocolFactoryByName(env.tipo_protocollo).createProtocolConfiguration();
ServiceBinding defaultBinding = protocolConf.getDefaultServiceBindingConfiguration(null)
.getDefaultBinding();
filtro_api.setTipo(protocolConf.getTipoServizioDefault(defaultBinding));
} catch (Exception e) {
throw FaultCode.ERRORE_INTERNO
.toException("Impossibile determinare il tipo del servizio: " + e.getMessage());
}
}
wrap.overrideParameter(CostantiExporter.SERVIZIO,
ReportisticaHelper.buildNomeServizioForOverride(filtro_api.getNome(), filtro_api.getTipo(), filtro_api.getVersione(), Optional.of(erogatore)));
}
if(filtro_api instanceof FiltroApiSoggetti) {
FiltroApiSoggetti filtroApiSoggetti = (FiltroApiSoggetti) filtro_api;
if(filtroApiSoggetti.getApiImplementata()!=null) {
wrap.overrideParameter(CostantiExporter.API,
ReportisticaHelper.toUriApiImplementata(filtroApiSoggetti.getApiImplementata(), env));
}
}
}
public static final void overrideRicercaStatisticaDistribuzioneApplicativo(
RicercaStatisticaDistribuzioneApplicativo body, HttpRequestWrapper wrap, MonitoraggioEnv env) throws Exception {
if (body == null)
return;
if (body.getAzione() != null && body.getApi() == null) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Se viene specificato il filtro 'azione' è necessario specificare anche il filtro Api");
}
ReportisticaHelper.overrideRicercaBaseStatisticaSoggetti(body, wrap, env);
wrap.overrideParameter(CostantiExporter.AZIONE, body.getAzione());
ReportisticaHelper.overrideOpzioniGenerazioneReport(body.getReport(), wrap, env);
ReportisticaHelper.overrideFiltroEsito(body.getEsito(), wrap, env);
}
public static final byte[] generateReport(HttpRequestWrapper request, IContext context) throws Exception {
DBManager dbManager = DBManager.getInstance();
Connection connectionConfig = null;
Connection connectionStats = null;
Connection connectionTransazioni = null;
StatisticheGiornaliereService statisticheService = null;
ServiceManagerProperties smp = null;
boolean uniqueConnection = false;
try {
connectionStats = dbManager.getConnectionStatistiche();
smp = dbManager.getServiceManagerPropertiesTracce();
if(dbManager.getDataSourceStatisticheName().equals(dbManager.getDataSourceTracceName()) &&
dbManager.getDataSourceStatisticheName().equals(dbManager.getDataSourceConfigName())) {
// unico datasource
uniqueConnection = true;
}
if(uniqueConnection) {
statisticheService = new StatisticheGiornaliereService(connectionStats, true, smp,
LoggerProperties.getLoggerDAO());
}
else {
Connection ctracce = connectionStats;
if( !dbManager.getDataSourceStatisticheName().equals(dbManager.getDataSourceTracceName()) ) {
connectionTransazioni = dbManager.getConnectionTracce();
ctracce = connectionTransazioni;
}
Connection cconfig = connectionStats;
if( !dbManager.getDataSourceStatisticheName().equals(dbManager.getDataSourceConfigName()) ) {
connectionConfig = dbManager.getConnectionConfig();
cconfig = connectionConfig;
}
statisticheService = new StatisticheGiornaliereService(cconfig, connectionStats, ctracce, true, smp,
LoggerProperties.getLoggerDAO());
}
} catch (Exception e) {
dbManager.releaseConnectionStatistiche(connectionStats);
if(!uniqueConnection) {
dbManager.releaseConnectionConfig(connectionConfig);
dbManager.releaseConnectionTracce(connectionTransazioni);
}
throw FaultCode.ERRORE_INTERNO.toException(e);
}
try {
return StatsGenerator.generateReport(request, context, statisticheService);
} catch (NotFoundException e) {
throw FaultCode.NOT_FOUND.toException(e);
} catch (Exception e) {
throw FaultCode.ERRORE_INTERNO.toException(e);
} finally {
dbManager.releaseConnectionStatistiche(connectionStats);
if(!uniqueConnection) {
dbManager.releaseConnectionConfig(connectionConfig);
dbManager.releaseConnectionTracce(connectionTransazioni);
}
}
}
public static final byte[] getReportDistribuzioneApi(RicercaStatisticaDistribuzioneApi body, MonitoraggioEnv env)
throws Exception {
SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
HttpRequestWrapper request = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true, TipoReport.api);
ReportisticaHelper.overrideRicercaBaseStatistica(body, request, env);
// Api Implementata
if(body.isDistinguiApiImplementata()!=null) {
request.overrideParameter(CostantiExporter.API_DISTINGUI_IMPLEMENTAZIONE,
body.isDistinguiApiImplementata() ? CostantiExporter.API_DISTINGUI_IMPLEMENTAZIONE_TRUE : CostantiExporter.API_DISTINGUI_IMPLEMENTAZIONE_FALSE);
}
// Mittente
if(body.getMittente()!=null && body.getMittente().getIdentificazione()!=null) {
switch (body.getTipo()) {
case EROGAZIONE:
ReportisticaHelper.overrideFiltroMittenteErogazione(body.getMittente().getIdentificazione(), body.getMittente(), false,
request,env);
break;
case FRUIZIONE:
ReportisticaHelper.overrideFiltroMittenteFruizione(body.getMittente().getIdentificazione(), body.getMittente(), false,
request, env);
break;
case QUALSIASI:
ReportisticaHelper.overrideFiltroMittenteQualsiasi(body.getMittente().getIdentificazione(), body.getMittente(), false,
request, env);
break;
}
}
// FiltroEsito
ReportisticaHelper.overrideFiltroEsito(body.getEsito(), request, env);
// Soggetto Erogatore
if(body.getSoggettoErogatore()!=null) {
if(!FiltroRicercaRuoloTransazioneEnum.FRUIZIONE.equals(body.getTipo())) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il criterio di ricerca per soggetto erogatore è indicabile solamente se si genera report relativi a transazioni con ruolo '"+FiltroRicercaRuoloTransazioneEnum.FRUIZIONE.toString()+"'");
}
BaseOggettoWithSimpleName base = body.getSoggettoErogatore();
if(base.getNome()!=null) {
request.overrideParameter(CostantiExporter.DESTINATARIO, new IDSoggetto(env.tipoSoggetto,base.getNome()));
}
}
// Opzioni Report
ReportisticaHelper.overrideOpzioniGenerazioneReport(body.getReport(), request, env);
return ReportisticaHelper.generateReport(request, env.context);
}
public static final byte[] getReportDistribuzioneApplicativo(RicercaStatisticaDistribuzioneApplicativoRegistrato body,
MonitoraggioEnv env) throws Exception {
SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true, TipoReport.applicativo);
if (body.getAzione() != null && body.getApi() == null) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Se viene specificato il filtro 'azione' è necessario specificare anche il filtro Api");
}
ReportisticaHelper.overrideRicercaBaseStatisticaSoggetti(body, wrap, env);
ReportisticaHelper.overrideFiltroEsito(body.getEsito(), wrap, env);
ReportisticaHelper.overrideOpzioniGenerazioneReport(body.getReport(), wrap, env);
wrap.overrideParameter(CostantiExporter.AZIONE, body.getAzione());
if(body.getTipoIdentificazioneApplicativo()!=null) {
switch (body.getTipoIdentificazioneApplicativo()) {
case TRASPORTO:
wrap.overrideParameter(CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO, CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO_TRASPORTO);
break;
case TOKEN:
wrap.overrideParameter(CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO, CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO_TOKEN);
break;
}
}
else {
wrap.overrideParameter(CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO, CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO_TRASPORTO);
}
if(body.getSoggettoMittente()!=null && !StringUtils.isEmpty(body.getSoggettoMittente())) {
if(body.getTipo()!=null && FiltroRicercaRuoloTransazioneEnum.EROGAZIONE.equals(body.getTipo())) {
wrap.overrideParameter(CostantiExporter.MITTENTE,new IDSoggetto(env.tipoSoggetto, body.getSoggettoMittente()).toString());
}
else {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Nel caso di ruolo <" + body.getTipo()
+ ">, non è possibile specificare il soggetto mittente");
}
}
return ReportisticaHelper.generateReport(wrap, env.context);
}
public static final byte[] getReportDistribuzioneAzione(RicercaStatisticaDistribuzioneAzione body,MonitoraggioEnv env) throws Exception {
SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true, TipoReport.azione);
ReportisticaHelper.overrideRicercaBaseStatisticaSoggetti(body, wrap, env);
ReportisticaHelper.overrideFiltroEsito(body.getEsito(), wrap, env);
ReportisticaHelper.overrideOpzioniGenerazioneReport(body.getReport(), wrap, env);
if(body.getMittente()!=null && body.getMittente().getIdentificazione()!=null) {
switch (body.getTipo()) {
case EROGAZIONE:
ReportisticaHelper.overrideFiltroMittenteErogazione(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
break;
case FRUIZIONE:
ReportisticaHelper.overrideFiltroMittenteFruizione(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
break;
case QUALSIASI:
ReportisticaHelper.overrideFiltroMittenteQualsiasi(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
break;
}
}
return ReportisticaHelper.generateReport(wrap, env.context);
}
public static final byte[] getReportDistribuzioneErrori(RicercaStatisticaDistribuzioneErrori body,MonitoraggioEnv env) throws Exception {
SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true, TipoReport.errori);
if(body.getEsito()==null) {
body.setEsito(new FiltroEsito());
}
CheckNotNull.setTipoEsito(body);
if(EsitoTransazioneFullSearchEnum.QUALSIASI.equals(body.getEsito().getTipo())) {
body.getEsito().setTipo(EsitoTransazioneFullSearchEnum.FALLITE_E_FAULT); // forzo fallite
}
else if(EsitoTransazioneFullSearchEnum.OK.equals(body.getEsito().getTipo())) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Esito 'OK' non utilizzabile con questo tipo di report");
}
ReportisticaHelper.overrideRicercaBaseStatisticaSoggetti(body, wrap, env);
ReportisticaHelper.overrideFiltroEsito(body.getEsito(), wrap, env);
ReportisticaHelper.overrideOpzioniGenerazioneReport(body.getReport(), wrap, env);
if(body.getMittente()!=null && body.getMittente().getIdentificazione()!=null) {
switch (body.getTipo()) {
case EROGAZIONE:
ReportisticaHelper.overrideFiltroMittenteErogazione(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
break;
case FRUIZIONE:
ReportisticaHelper.overrideFiltroMittenteFruizione(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
break;
case QUALSIASI:
ReportisticaHelper.overrideFiltroMittenteQualsiasi(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
break;
}
}
wrap.overrideParameter(CostantiExporter.AZIONE, body.getAzione());
return ReportisticaHelper.generateReport(wrap, env.context);
}
public static final byte[] getReportDistribuzioneEsiti(RicercaStatisticaDistribuzioneEsiti body,MonitoraggioEnv env) throws Exception {
if (body.getAzione() != null && body.getApi() == null) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Se viene specificato il filtro 'azione' è necessario specificare anche il filtro Api");
}
SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true, TipoReport.esiti);
ReportisticaHelper.overrideRicercaBaseStatisticaSoggetti(body, wrap, env);
ReportisticaHelper.overrideOpzioniGenerazioneReport(body.getReport(), wrap, env);
// Mittente
if(body.getMittente()!=null && body.getMittente().getIdentificazione()!=null) {
switch (body.getTipo()) {
case EROGAZIONE:
ReportisticaHelper.overrideFiltroMittenteErogazione( body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
break;
case FRUIZIONE:
ReportisticaHelper.overrideFiltroMittenteFruizione( body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
break;
case QUALSIASI:
ReportisticaHelper.overrideFiltroMittenteQualsiasi( body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
break;
}
}
wrap.overrideParameter(CostantiExporter.AZIONE, body.getAzione());
return ReportisticaHelper.generateReport(wrap, env.context);
}
public static final byte[] getReportDistribuzioneIdAutenticato(RicercaStatisticaDistribuzioneApplicativo body,
MonitoraggioEnv env) throws Exception {
SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true,
TipoReport.identificativo_autenticato);
ReportisticaHelper.overrideRicercaStatisticaDistribuzioneApplicativo(body, wrap, env);
return ReportisticaHelper.generateReport(wrap, env.context);
}
public static final byte[] getReportDistribuzioneIndirizzoIP(RicercaStatisticaDistribuzioneApplicativo body,
MonitoraggioEnv env) throws Exception {
SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true,
TipoReport.indirizzo_ip);
ReportisticaHelper.overrideRicercaStatisticaDistribuzioneApplicativo(body, wrap, env);
return ReportisticaHelper.generateReport(wrap, env.context);
}
public static final byte[] getReportDistribuzioneSoggettoRemoto(RicercaStatisticaDistribuzioneSoggettoRemoto body,
MonitoraggioEnv env) throws Exception {
if (body.getAzione() != null && body.getApi() == null) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Se viene specificato il filtro 'azione' è necessario specificare anche il filtro Api");
}
SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true, TipoReport.soggetto_remoto);
ReportisticaHelper.overrideRicercaBaseStatistica(body, wrap, env);
ReportisticaHelper.overrideOpzioniGenerazioneReport(body.getReport(), wrap, env);
switch (body.getTipo()) {
case EROGAZIONE:
if(body.getMittente()!=null && body.getMittente().getIdentificazione()!=null) {
ReportisticaHelper.overrideFiltroMittenteErogazione(body.getMittente().getIdentificazione(), body.getMittente(), true, wrap, env);
}
if(body.getApi()!=null) {
ReportisticaHelper.overrideFiltroErogazione(body.getTag(), body.getApi(), wrap,env);
}
break;
case FRUIZIONE:
if(body.getMittente()!=null && body.getMittente().getIdentificazione()!=null) {
ReportisticaHelper.overrideFiltroMittenteFruizione(body.getMittente().getIdentificazione(), body.getMittente(), true, wrap, env);
}
if(body.getApi()!=null) {
ReportisticaHelper.overrideFiltroFruizione(body.getTag(), body.getApi(), wrap, env);
}
break;
case QUALSIASI:
if(body.getMittente()!=null && body.getMittente().getIdentificazione()!=null) {
ReportisticaHelper.overrideFiltroMittenteQualsiasi(body.getMittente().getIdentificazione(), body.getMittente(), true, wrap, env);
}
if(body.getApi()!=null) {
ReportisticaHelper.overrideFiltroQualsiasi(body.getTag(), body.getApi(), wrap, env);
}
break;
}
ReportisticaHelper.overrideFiltroEsito(body.getEsito(), wrap, env);
wrap.overrideParameter(CostantiExporter.AZIONE, body.getAzione());
return ReportisticaHelper.generateReport(wrap, env.context);
}
public static final byte[] getReportDistribuzioneTemporale(RicercaStatisticaAndamentoTemporale body,MonitoraggioEnv env) throws Exception {
if (body.getAzione() != null && body.getApi() == null) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Se viene specificato il filtro 'azione' è necessario specificare anche il filtro Api");
}
SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true, TipoReport.temporale);
ReportisticaHelper.overrideRicercaBaseStatisticaSoggetti(body, wrap, env);
ReportisticaHelper.overrideOpzioniGenerazioneReportMultiLine(body.getReport(), wrap, env);
if(body.getMittente()!=null && body.getMittente().getIdentificazione()!=null) {
switch (body.getTipo()) {
case EROGAZIONE:
ReportisticaHelper.overrideFiltroMittenteErogazione(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
break;
case FRUIZIONE:
ReportisticaHelper.overrideFiltroMittenteFruizione(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
break;
case QUALSIASI:
ReportisticaHelper.overrideFiltroMittenteQualsiasi(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
break;
}
}
ReportisticaHelper.overrideFiltroEsito(body.getEsito(), wrap, env);
wrap.overrideParameter(CostantiExporter.AZIONE, body.getAzione());
return ReportisticaHelper.generateReport(wrap, env.context);
}
public static final byte[] getReportDistribuzioneTokenInfo(RicercaStatisticaDistribuzioneTokenInfo body,
MonitoraggioEnv env) throws Exception {
SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true, TipoReport.token_info);
ReportisticaHelper.overrideRicercaStatisticaDistribuzioneApplicativo(body, wrap, env);
wrap.overrideParameter(CostantiExporter.CLAIM, Enums.toDistribuzioneTokenClaim.get(body.getClaim()).toString());
if(body.getSoggetto()!=null) {
if(!FiltroRicercaRuoloTransazioneEnum.EROGAZIONE.equals(body.getTipo())) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il criterio di ricerca per soggetto è indicabile solamente se si genera report relativi a transazioni con ruolo '"+FiltroRicercaRuoloTransazioneEnum.EROGAZIONE.toString()+"'");
}
BaseOggettoWithSimpleName base = body.getSoggetto();
if(base.getNome()!=null) {
wrap.overrideParameter(CostantiExporter.MITTENTE,new IDSoggetto(env.tipoSoggetto, base.getNome()).toString());
}
}
return ReportisticaHelper.generateReport(wrap, env.context);
}
public static final byte[] getReportDistribuzioneSoggettoLocale(RicercaStatisticaDistribuzioneSoggettoLocale body,
MonitoraggioEnv env) throws Exception {
if (body.getAzione() != null && body.getApi() == null) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Se viene specificato il filtro 'azione' è necessario specificare anche il filtro Api");
}
SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo, null,
body.getTipo(), body.getReport().getFormato(), true, TipoReport.soggetto_locale);
ReportisticaHelper.overrideRicercaBaseStatisticaSoggetti(body, wrap, env);
ReportisticaHelper.overrideFiltroEsito(body.getEsito(), wrap, env);
ReportisticaHelper.overrideOpzioniGenerazioneReport(body.getReport(), wrap, env);
if(body.getMittente()!=null && body.getMittente().getIdentificazione()!=null) {
switch (body.getTipo()) {
case EROGAZIONE:
ReportisticaHelper.overrideFiltroMittenteErogazione(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
break;
case FRUIZIONE:
ReportisticaHelper.overrideFiltroMittenteFruizione(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
break;
case QUALSIASI:
ReportisticaHelper.overrideFiltroMittenteQualsiasi(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
break;
}
}
wrap.overrideParameter(CostantiExporter.AZIONE, body.getAzione());
return ReportisticaHelper.generateReport(wrap, env.context);
}
public static final String buildNomeServizioForOverride(String nomeServizio, String tipoServizio,
Integer versioneServizio, Optional<IDSoggetto> erogatore) {
if (nomeServizio == null || tipoServizio == null || versioneServizio == null)
return null;
StringBuilder uri = new StringBuilder();
String nomeAsps = nomeServizio;
String tipoAsps = tipoServizio;
// Per popolare il campo NomeServizio seguo quanto fatto in
// DynamicPdDBeanUtils._getListaSelectItemsElencoServiziErogazione
uri.append(tipoAsps).append("/");
uri.append(nomeAsps).append(":").append(versioneServizio);
if (erogatore.isPresent())
uri.append(" (").append(erogatore.get().getTipo()).append("/").append(erogatore.get().getNome())
.append(")");
return uri.toString();
}
public static final String getTipoServizioDefault(MonitoraggioEnv env) {
try {
IProtocolConfiguration protocolConf = env.protocolFactoryMgr.getProtocolFactoryByName(env.tipo_protocollo)
.createProtocolConfiguration();
ServiceBinding defaultBinding = protocolConf.getDefaultServiceBindingConfiguration(null)
.getDefaultBinding();
return protocolConf.getTipoServizioDefault(defaultBinding);
} catch (Exception e) {
throw FaultCode.ERRORE_INTERNO
.toException("Impossibile determinare il tipo del servizio: " + e.getMessage());
}
}
public static final byte[] exportConfigurazioneApi(RicercaConfigurazioneApi body, MonitoraggioEnv env) throws Exception {
DBManager dbManager = DBManager.getInstance();
Connection connection = null;
ConfigurazioniGeneraliService configurazioniService = null;
SearchFormUtilities searchFormUtilities = null;
HttpRequestWrapper request = null;
try {
connection = dbManager.getConnectionConfig();
ServiceManagerProperties smp = dbManager.getServiceManagerPropertiesConfig();
configurazioniService = new ConfigurazioniGeneraliService(connection, true, smp, LoggerProperties.getLoggerDAO());
searchFormUtilities = new SearchFormUtilities();
FormatoReportEnum formatoReport = null;
if(body.getFormato()!=null) {
switch (body.getFormato()) {
case CSV:
formatoReport = FormatoReportEnum.CSV;
break;
case XLS:
formatoReport = FormatoReportEnum.XLS;
break;
default:
formatoReport = FormatoReportEnum.CSV;
break;
}
}
else {
formatoReport = FormatoReportEnum.CSV;
}
request = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo, env.nomeSoggettoLocale,
body.getTipo(), formatoReport, false, TipoReport.api);
}
catch (Exception e) {
dbManager.releaseConnectionConfig(connection);
throw new RuntimeException(e);
}
String tag = null;
switch (body.getTipo()) {
case EROGAZIONE: {
ReportisticaHelper.overrideFiltroErogazione(tag, body.getApi(), request, env);
break;
}
case FRUIZIONE:
ReportisticaHelper.overrideFiltroFruizione(tag, body.getApi(), request, env);
break;
}
try {
byte[] report = StatsGenerator.generateReport(request, env.context, configurazioniService);
return report;
} catch (NotFoundException e) {
throw FaultCode.NOT_FOUND.toException(e);
} catch (Exception e) {
throw FaultCode.ERRORE_INTERNO.toException(e);
} finally {
dbManager.releaseConnectionConfig(connection);
}
}
public static final FiltroApiImplementata parseUriApiImplementata(String uriApiImplementata, MonitoraggioEnv env) throws Exception {
// tipoSoggettoReferente/nomeSoggettoReferente:nomeAccordo:versione
String pattern1 = "^[a-z]{2,20}/[0-9A-Za-z]+:[_A-Za-z][\\-\\._A-Za-z0-9]*:\\d$";
String pattern2 = "^[_A-Za-z][\\-\\._A-Za-z0-9]*:\\d$";
IDAccordo idAccordo = null;
try {
if(RegularExpressionEngine.isMatch(uriApiImplementata, pattern1)) {
idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromUri(uriApiImplementata);
}
else if(RegularExpressionEngine.isMatch(uriApiImplementata, pattern2)) {
String uriCompleto = env.tipoSoggetto+"/"+env.nomeSoggettoLocale+":"+uriApiImplementata;
idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromUri(uriCompleto);
}
else {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("La uri fornita '"+uriApiImplementata+"' non rispetta il formato atteso '"+pattern1+"|"+pattern2+"'");
}
}catch(RegExpNotFoundException e) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("La uri fornita '"+uriApiImplementata+"' non rispetta il formato atteso '"+pattern1+"|"+pattern2+"': "+e.getMessage());
}
FiltroApiImplementata filtro = new FiltroApiImplementata();
filtro.setNome(idAccordo.getNome());
filtro.setReferente(idAccordo.getSoggettoReferente().getNome());
filtro.setVersione(idAccordo.getVersione());
return filtro;
}
public static final String toUriApiImplementata(FiltroApiImplementata filtroApiImplementata, MonitoraggioEnv env) throws Exception {
// tipoSoggettoReferente/nomeSoggettoReferente:nomeAccordo:versione
String tipoSoggetto = env.tipoSoggetto;
String nomeSoggetto = filtroApiImplementata.getReferente()!=null ? filtroApiImplementata.getReferente() : env.nomeSoggettoLocale;
if(nomeSoggetto==null || "".equals(nomeSoggetto)) {
if(!env.supportatoSoggettoReferenteAPI) {
// Recupero Soggetto Default per l'API
if(env.soggettoReferenteAPIDefault!=null) {
nomeSoggetto = env.soggettoReferenteAPIDefault.getNome();
}
}
}
return IDAccordoFactory.getInstance().getUriFromValues(filtroApiImplementata.getNome(), tipoSoggetto, nomeSoggetto, filtroApiImplementata.getVersione());
}
public static final FiltroApiSoggetti parseFiltroApiMap(FiltroRicercaRuoloTransazioneEnum tipo,
String nomeServizio, String tipoServizio, Integer versioneServizio, String soggettoRemoto,
String soggettoErogatore,
MonitoraggioEnv env, String uriApiImplementata) throws Exception {
// In caso di Fruizione, fin'ora si è sempre specificato l'erogatore per mezzo del parametro soggettoRemoto.
// Per mantenere i controlli corretti sul filtroApi, nel caso FRUIZIONE se viene specificato il soggettoRemoto
// allora si sta specificando un pezzo del filtroAPI, che va specificato per intero.
if (tipo == FiltroRicercaRuoloTransazioneEnum.FRUIZIONE) {
soggettoErogatore = soggettoRemoto;
}
if (tipo == FiltroRicercaRuoloTransazioneEnum.EROGAZIONE
&& (!StringUtils.isEmpty(soggettoRemoto) || !StringUtils.isEmpty(soggettoErogatore))) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Nel caso di ruolo <" + tipo
+ ">, non bisogna specificare né soggetto_remoto né soggetto_erogatore");
}
if (tipo == FiltroRicercaRuoloTransazioneEnum.FRUIZIONE
&& !StringUtils.isEmpty(soggettoErogatore)
&& !StringUtils.isEmpty(soggettoRemoto)
&& !StringUtils.equals(soggettoRemoto, soggettoErogatore)) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Ricerca ambigua. Nel caso di ruolo <"
+ tipo
+ ">, soggettoErogatore e soggettoRemoto specificano la stessa informazione."
+ "Se specificati entrambi allora devono essere uguali");
}
// Se specifico un pezzo del filtroAPI, allora devo avere un filtro completo.
// (meno i defaults)
if (nomeServizio != null || tipoServizio != null || soggettoErogatore != null
// || versioneServizio != null default value is 1
) {
if (nomeServizio == null) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificare il nome_servizio");
}
if (tipo == FiltroRicercaRuoloTransazioneEnum.FRUIZIONE && (StringUtils.isEmpty(soggettoRemoto) || StringUtils.isEmpty(soggettoErogatore)) ) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificando un filtro API per il ruolo <" + tipo
+ ">, è necessario specificare anche il soggetto_remoto (Erogatore in caso di Fruizioni)");
}
if (tipo == FiltroRicercaRuoloTransazioneEnum.QUALSIASI && StringUtils.isEmpty(soggettoErogatore)) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificando un filtro API per il ruolo <" + tipo
+ ">, è necessario specificare anche il soggetto_erogatore");
}
// TODO: Gli altri due hanno i defaults. (Che dovrei metttere ora?)
}
return ReportisticaHelper.buildFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto, soggettoErogatore,
env, uriApiImplementata);
}
public static final FiltroApiSoggetti parseFiltroApiMap(TransazioneRuoloEnum tipo, String nomeServizio,
String tipoServizio, Integer versioneServizio, String soggettoRemoto,
MonitoraggioEnv env, String uriApiImplementata) throws Exception {
// In Questo caso non abbiamo il tipo QUALSIASI, quindi parsiamo il filtro senza il soggettoErogatore (ultimo parametro a null)
FiltroRicercaRuoloTransazioneEnum newTipo = tipo == TransazioneRuoloEnum.EROGAZIONE ? FiltroRicercaRuoloTransazioneEnum.EROGAZIONE : FiltroRicercaRuoloTransazioneEnum.FRUIZIONE;
return ReportisticaHelper.parseFiltroApiMap(newTipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto,null,
env, uriApiImplementata);
}
private static final FiltroApiSoggetti buildFiltroApiMap(FiltroRicercaRuoloTransazioneEnum tipo, String nomeServizio,
String tipoServizio, Integer versioneServizio, String soggettoRemoto, String soggettoErogatore,
MonitoraggioEnv env, String uriApiImplementata) throws Exception {
FiltroApiImplementata apiImplementata = null;
if(uriApiImplementata!=null && !"".equals(uriApiImplementata)) {
apiImplementata = ReportisticaHelper.parseUriApiImplementata(uriApiImplementata, env);
}
// Se non ho specificato nessun pezzo del filtro api, allora per le versioni full è come aver passato un FiltroApi a null.
if (StringUtils.isEmpty(nomeServizio) && StringUtils.isEmpty(tipoServizio) && StringUtils.isEmpty(soggettoRemoto) && StringUtils.isEmpty(soggettoErogatore)
//&& versioneServizio == null default value is 1
) {
if(apiImplementata!=null) {
FiltroApiSoggetti filtroApiBase = new FiltroApiSoggetti();
filtroApiBase.setApiImplementata(apiImplementata);
return filtroApiBase;
}
return null;
}
FiltroApiSoggetti filtroApiBase = new FiltroApiSoggetti();
filtroApiBase.setNome(nomeServizio);
filtroApiBase.setTipo(tipoServizio);
if(nomeServizio!=null || tipoServizio!=null) {
filtroApiBase.setVersione(versioneServizio!=null ? versioneServizio : 1);
}
switch (tipo) {
case EROGAZIONE:
break;
case FRUIZIONE:
if (!StringUtils.isEmpty(soggettoErogatore)) {
soggettoRemoto = soggettoErogatore;
}
filtroApiBase.setErogatore(soggettoRemoto);
break;
case QUALSIASI:
filtroApiBase.setErogatore(soggettoErogatore);
filtroApiBase.setSoggettoRemoto(soggettoRemoto);
break;
}
filtroApiBase.setApiImplementata(apiImplementata);
return filtroApiBase;
}
}