TransactionServiceLibrary.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 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.monitor.engine.config;
- import java.io.Serializable;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import javax.xml.soap.SOAPEnvelope;
- import org.openspcoop2.core.commons.dao.DAOFactory;
- import org.openspcoop2.core.transazioni.DumpContenuto;
- import org.openspcoop2.core.transazioni.DumpMessaggio;
- import org.openspcoop2.core.transazioni.Transazione;
- import org.openspcoop2.message.OpenSPCoop2Message;
- import org.openspcoop2.message.constants.MessageType;
- import org.openspcoop2.message.xml.MessageDynamicNamespaceContextFactory;
- import org.openspcoop2.monitor.engine.config.transazioni.ConfigurazioneTransazione;
- import org.openspcoop2.monitor.engine.config.transazioni.ConfigurazioneTransazionePlugin;
- import org.openspcoop2.monitor.engine.config.transazioni.ConfigurazioneTransazioneRisorsaContenuto;
- import org.openspcoop2.monitor.engine.config.transazioni.ConfigurazioneTransazioneStato;
- import org.openspcoop2.monitor.engine.config.transazioni.constants.PosizioneMascheramento;
- import org.openspcoop2.monitor.engine.config.transazioni.constants.TipoControllo;
- import org.openspcoop2.monitor.engine.config.transazioni.constants.TipoMascheramento;
- import org.openspcoop2.monitor.engine.dynamic.DynamicFactory;
- import org.openspcoop2.monitor.engine.dynamic.IDynamicLoader;
- import org.openspcoop2.monitor.engine.transaction.TransactionContentUtils;
- import org.openspcoop2.monitor.engine.transaction.TransactionManager;
- import org.openspcoop2.monitor.sdk.plugins.ITransactionProcessing;
- import org.openspcoop2.monitor.sdk.transaction.Transaction;
- import org.openspcoop2.protocol.sdk.diagnostica.MsgDiagnostico;
- import org.openspcoop2.protocol.sdk.tracciamento.Traccia;
- import org.openspcoop2.protocol.sdk.tracciamento.TracciamentoException;
- import org.openspcoop2.utils.regexp.RegularExpressionEngine;
- import org.openspcoop2.utils.xml.AbstractXPathExpressionEngine;
- import org.openspcoop2.utils.xml.DynamicNamespaceContext;
- import org.openspcoop2.utils.xml.XPathException;
- import org.openspcoop2.utils.xml.XPathNotFoundException;
- import org.openspcoop2.utils.xml.XPathNotValidException;
- import org.openspcoop2.utils.xml.XPathReturnType;
- import org.slf4j.Logger;
- import org.w3c.dom.NodeList;
- /**
- * TransactionServiceLibrary
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class TransactionServiceLibrary implements Serializable {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private BasicServiceLibrary basicServiceLibrary;
- private ConfigurazioneTransazione transactionActionLibrary;
- private ConfigurazioneTransazione transactionActionAllLibrary;
- public BasicServiceLibrary getBasicServiceLibrary() {
- return this.basicServiceLibrary;
- }
- public void setBasicServiceLibrary(BasicServiceLibrary basicServiceLibrary) {
- this.basicServiceLibrary = basicServiceLibrary;
- }
- public ConfigurazioneTransazione getTransactionActionLibrary() {
- return this.transactionActionLibrary;
- }
- public void setTransactionActionLibrary(
- ConfigurazioneTransazione transactionActionLibrary) {
- this.transactionActionLibrary = transactionActionLibrary;
- }
- public ConfigurazioneTransazione getTransactionActionAllLibrary() {
- return this.transactionActionAllLibrary;
- }
- public void setTransactionActionAllLibrary(
- ConfigurazioneTransazione transactionActionAllLibrary) {
- this.transactionActionAllLibrary = transactionActionAllLibrary;
- }
- // ****** STATI E RISORSE ***************
- public TransactionInfo readStatoAndResources(OpenSPCoop2Message msg, MessageDynamicNamespaceContextFactory dncFactory,
- AbstractXPathExpressionEngine xpathEngine, boolean debug, Logger log, boolean isRichiesta,
- String idTransazione) throws Exception{
- TransactionInfo transactionInfo = new TransactionInfo();
- this._readStatoAndResources(null, msg, dncFactory, xpathEngine, debug, log, isRichiesta, idTransazione, true, true,
- transactionInfo);
- return transactionInfo;
- }
- public TransactionInfo readStato(OpenSPCoop2Message msg, MessageDynamicNamespaceContextFactory dncFactory,
- AbstractXPathExpressionEngine xpathEngine, boolean debug, Logger log, boolean isRichiesta,
- String idTransazione) throws Exception{
- TransactionInfo transactionInfo = new TransactionInfo();
- this._readStatoAndResources(null, msg, dncFactory, xpathEngine, debug, log, isRichiesta, idTransazione, true, false,
- transactionInfo);
- return transactionInfo;
- }
- public TransactionInfo readResources(OpenSPCoop2Message msg, MessageDynamicNamespaceContextFactory dncFactory,
- AbstractXPathExpressionEngine xpathEngine, boolean debug, Logger log, boolean isRichiesta,
- String idTransazione, String stato) throws Exception{
- TransactionInfo transactionInfo = new TransactionInfo();
- transactionInfo.setStato(stato);
- this._readStatoAndResources(null, msg, dncFactory, xpathEngine, debug, log, isRichiesta, idTransazione, false, true,
- transactionInfo);
- return transactionInfo;
- }
- private void _readStatoAndResources(SOAPEnvelope soapEnvelope,OpenSPCoop2Message msg,
- MessageDynamicNamespaceContextFactory dncFactory,
- AbstractXPathExpressionEngine xpathEngine, boolean debug, Logger log, boolean isRichiesta,
- String idTransazione, boolean readStato, boolean readResources,
- TransactionInfo transactionInfo) throws Exception{
- // Ottengo SOAPEnvelope
- DynamicNamespaceContext dnc = null;
- if(readStato){
- // ** Esamino gli stati della transazione se la transazione attuale non ha gia assegnato uno stato **
- if(transactionInfo.getStato()==null){
- // Provo prima ad utilizzare lo stato definito in una azione specifica
- if(this.getTransactionActionLibrary()!=null){
- if(this.getTransactionActionLibrary().sizeConfigurazioneTransazioneStatoList()>0){
- if(soapEnvelope==null){
- soapEnvelope = msg.castAsSoap().getSOAPPart().getEnvelope();
- }
- if(dnc==null){
- if(MessageType.SOAP_11.equals(msg.getMessageType())){
- dnc = dncFactory.getNamespaceContextFromSoapEnvelope11(soapEnvelope);
- }
- else{
- dnc = dncFactory.getNamespaceContextFromSoapEnvelope12(soapEnvelope);
- }
- }
- }
- this.updateTransactionState(this.getTransactionActionLibrary().getConfigurazioneTransazioneStatoList(),
- isRichiesta, soapEnvelope, msg, dnc,
- idTransazione, xpathEngine, debug, log, transactionInfo);
- }
- // Provo poi ad utilizzare gli stati associati all'azione '*'
- if(transactionInfo.getStato()==null){
- if(this.getTransactionActionAllLibrary()!=null){
- if(this.getTransactionActionAllLibrary().sizeConfigurazioneTransazioneStatoList()>0){
- if(soapEnvelope==null){
- soapEnvelope = msg.castAsSoap().getSOAPPart().getEnvelope();
- }
- if(dnc==null){
- if(MessageType.SOAP_11.equals(msg.getMessageType())){
- dnc = dncFactory.getNamespaceContextFromSoapEnvelope11(soapEnvelope);
- }
- else{
- dnc = dncFactory.getNamespaceContextFromSoapEnvelope12(soapEnvelope);
- }
- }
- }
- updateTransactionState(this.getTransactionActionAllLibrary().getConfigurazioneTransazioneStatoList(),
- isRichiesta, soapEnvelope, msg, dnc,
- idTransazione, xpathEngine, debug, log, transactionInfo);
- }
- }
- }
- }
-
-
- if(readResources){
- // elaboro risorse
- List<ConfigurazioneTransazioneRisorsaContenuto> risorse = this.mergeServiceActionTransactionLibrary_resources();
-
- // XPATH
- Map<String, String> notFoundRules = new HashMap<>();
- Map<String, String> dirtyRules = new HashMap<>();
- if(risorse.size()>0){
-
- if(soapEnvelope==null){
- soapEnvelope = msg.castAsSoap().getSOAPPart().getEnvelope();
- }
- if(dnc==null){
- if(MessageType.SOAP_11.equals(msg.getMessageType())){
- dnc = dncFactory.getNamespaceContextFromSoapEnvelope11(soapEnvelope);
- }
- else{
- dnc = dncFactory.getNamespaceContextFromSoapEnvelope12(soapEnvelope);
- }
- }
- // NOTA!!!! I Fault devono essere analizzati, puo' darsi che gli stati o le risorse (errore) le debba estrarre da un SoapFault.
- //if(dnc.isSoapFault()){
- // return; // non devo analizzare i soap fault.
- //}
-
- List<TransactionResource> contenuti = this.recuperaContenuti(isRichiesta, transactionInfo.getStato(), soapEnvelope, dnc, risorse, notFoundRules, dirtyRules,
- xpathEngine, debug, log);
- if(contenuti!=null){
- for (int i = 0; i < contenuti.size(); i++) {
- transactionInfo.getRisorse().add(contenuti.get(i));
- }
- }
-
- }
-
- //controllo se ci sono regole non trovate e/o "sporche"
-
- if(debug){
- StringBuilder sbNotFound = new StringBuilder();
- if(notFoundRules.size()>0){
- sbNotFound.append("Regole non trovate:");
- for (String k : notFoundRules.keySet()) {
- sbNotFound.append("\n["+(k)+"]");
- }
- }
- log.debug(sbNotFound.toString());
- }
-
- StringBuilder sb = new StringBuilder();
- if(dirtyRules.size()>0){
- sb.append("\nRegole non valide:");
- for (String k : dirtyRules.keySet()) {
- String val = "\n["+k+"-"+(dirtyRules.get(k))+"]";
- sb.append(val);
-
- }
- }
-
- if(sb.length()>0){
- throw new TracciamentoException(sb.toString());
- }
- }
- }
- private void updateTransactionState(List<ConfigurazioneTransazioneStato> transactionStates,boolean richiesta,
- SOAPEnvelope soapEnvelope,OpenSPCoop2Message msg,DynamicNamespaceContext dnc,String idTransazione,
- AbstractXPathExpressionEngine xpathEngine, boolean debug, Logger log,
- TransactionInfo transactionInfo) throws Exception{
- for (int i = 0; i < transactionStates.size(); i++) {
- ConfigurazioneTransazioneStato stato = transactionStates.get(i);
-
- if(stato.isEnabled()==false){
- continue;
- }
-
- // controllo su richiesta/risposta
- boolean matchTipoMessaggio = false;
- if(richiesta){
- matchTipoMessaggio = org.openspcoop2.monitor.engine.config.transazioni.constants.TipoMessaggio.RICHIESTA.equals(stato.getTipoMessaggio());
- }else{
- matchTipoMessaggio = org.openspcoop2.monitor.engine.config.transazioni.constants.TipoMessaggio.RISPOSTA.equals(stato.getTipoMessaggio());
- }
- if(!matchTipoMessaggio){
- continue;
- }
-
- // NOTA!!!! I Fault devono essere analizzati, puo' darsi che gli stati o le risorse (errore) le debba estrarre da un SoapFault.
- //if(dnc.isSoapFault()){
- // return; // non devo analizzare i soap fault.
- //}
-
- if(TipoControllo.EXIST.equals(stato.getTipoControllo())){
- Object oString = null;
- try{
- oString = xpathEngine.getMatchPattern(soapEnvelope, dnc, stato.getXpath(), XPathReturnType.STRING);
- }catch (XPathNotFoundException nfe) {
- if(debug)
- log.debug("Stato ["+stato.getNome()+"] con tipoControllo["+stato.getTipoControllo()+"] (xpath:"+stato.getXpath()+") non riscontrato per la trasazione ["+idTransazione+"]: "+nfe.getMessage());
- }
- if(oString!=null){
- if(debug)
- log.info("Trovato stato ["+stato.getNome()+"] con tipoControllo["+stato.getTipoControllo()+"] (xpath:"+stato.getXpath()+") per la trasazione ["+idTransazione+"]");
- transactionInfo.setStato(stato.getNome());
- break;
- }
- }
- else{
- String oString = null;
- try{
- oString = (String) xpathEngine.getMatchPattern(soapEnvelope, dnc, stato.getXpath(), XPathReturnType.STRING);
- }catch (XPathNotFoundException nfe) {
- if(debug)
- log.debug("Stato ["+stato.getNome()+"] con tipoControllo["+stato.getTipoControllo()+"] (xpath:"+stato.getXpath()+") non riscontrato per la trasazione ["+idTransazione+"]: "+nfe.getMessage());
- }
- if(oString!=null){
- if(TipoControllo.EQUALS.equals(stato.getTipoControllo())){
- if(oString.equals(stato.getValore())){
- if(debug)
- log.info("Trovato stato ["+stato.getNome()+"] per trasazione ["+idTransazione+"]");
- transactionInfo.setStato(stato.getNome());
- break;
- }
- }else if(TipoControllo.MATCH.equals(stato.getTipoControllo())){
- if(RegularExpressionEngine.isMatch(oString, stato.getValore())){
- if(debug)
- log.info("Trovato stato ["+stato.getNome()+"] con tipoControllo["+stato.getTipoControllo()+"] (xpath:"+stato.getXpath()+") per la trasazione ["+idTransazione+"]");
- transactionInfo.setStato(stato.getNome());
- break;
- }
- }
- }
- }
- }
- }
-
- private List<TransactionResource> recuperaContenuti(boolean richiesta,String stato,SOAPEnvelope soapEnvelope,DynamicNamespaceContext dnc,
- List<ConfigurazioneTransazioneRisorsaContenuto> risorse, Map<String, String> rulesNotFuond, Map<String, String> dirtyRules,
- AbstractXPathExpressionEngine xpathEngine, boolean debug, Logger log) throws Exception {
-
- List<TransactionResource> res = new ArrayList<TransactionResource>();
-
- if(dnc.isSoapBodyEmpty()){
- return res;
- }
-
- for (int i = 0; i < risorse.size(); i++) {
-
- ConfigurazioneTransazioneRisorsaContenuto risorsa = risorse.get(i);
-
- // check tipo messaggio
- boolean matchTipoMessaggio = false;
- if(richiesta){
- matchTipoMessaggio = org.openspcoop2.monitor.engine.config.transazioni.constants.TipoMessaggio.RICHIESTA.equals(risorsa.getTipoMessaggio());
- }else{
- matchTipoMessaggio = org.openspcoop2.monitor.engine.config.transazioni.constants.TipoMessaggio.RISPOSTA.equals(risorsa.getTipoMessaggio());
- }
- if(!matchTipoMessaggio){
- continue; // messaggio non compatibile con lo stato
- }
-
- // check stato
- if(stato!=null){
- if(risorsa.getIdConfigurazioneTransazioneStato()!=null){
- String statoRichiestoDallaRisorsa = risorsa.getIdConfigurazioneTransazioneStato().getStato();
- if(statoRichiestoDallaRisorsa!=null && !"*".equals(statoRichiestoDallaRisorsa)){
- // check che la risorsa in questione sia compatibili con lo stato che sto esaminando
- if(!stato.equals(statoRichiestoDallaRisorsa)){
- continue; // risorsa non compatibile con lo stato
- }
- }
- }
- }
- else{
- // lo stato associato alla transazione è null.
- // se nella risorsa è richiesto uno stato specifico non devo proseguire
- if(risorsa.getIdConfigurazioneTransazioneStato()!=null){
- String statoRichiestoDallaRisorsa = risorsa.getIdConfigurazioneTransazioneStato().getStato();
- if(statoRichiestoDallaRisorsa!=null && !"*".equals(statoRichiestoDallaRisorsa)){
- continue; // risorsa non compatibile con lo stato
- }
- }
- }
-
- String nomeProprieta = risorsa.getNome();
- String percorsoProprieta = risorsa.getXpath();
- try{
- // NOTA!!!! I Fault devono essere analizzati, puo' darsi che gli stati o le risorse (errore) le debba estrarre da un SoapFault.
- //if(dnc.isSoapFault()){
- // non e' possibile raccogliere proprieta' se abbiamo un soap fault
- // continue;
- //}
-
- // Provo a cercarlo prima come Node
- NodeList nodeList = null;
- Exception exceptionNodeSet = null;
- String risultato = null;
- try{
- nodeList = (NodeList) xpathEngine.getMatchPattern(soapEnvelope, dnc, percorsoProprieta,XPathReturnType.NODESET);
- if(nodeList!=null){
- risultato = xpathEngine.toString(nodeList);
- }
- }catch(Exception e){
- exceptionNodeSet = e;
- }
-
- // Se non l'ho trovato provo a cercarlo come string (es. il metodo sopra serve per avere l'xml, ma fallisce in caso di concat, in caso di errori di concat_openspcoop....)
- // Insomma il caso dell'xml sopra e' quello speciale, che pero' deve essere eseguito prima, perche' altrimenti il caso string sotto funziona sempre, e quindi non si ottiene mai l'xml.
- if(risultato==null || "".equals(risultato)){
- try{
- risultato = xpathEngine.getStringMatchPattern(soapEnvelope, dnc, percorsoProprieta);
- }catch(Exception e){
- if(exceptionNodeSet!=null){
- log.error("Errore avvenuto durante la getStringMatchPattern("+percorsoProprieta
- +") ("+e.getMessage()+") invocata in seguito all'errore dell'invocazione getMatchPattern("+
- percorsoProprieta+",NODESET): "+exceptionNodeSet.getMessage(),exceptionNodeSet);
- }
- // lancio questo errore.
- if(e instanceof XPathNotFoundException){
- throw (XPathNotFoundException) e;
- }else if(e instanceof XPathNotValidException){
- throw (XPathNotValidException) e;
- }else if(e instanceof XPathException){
- throw (XPathException) e;
- }else{
- throw e;
- }
- }
- }
-
- if(risultato == null || "".equals(risultato)){
- if(exceptionNodeSet!=null){
- log.error("Non sono stati trovati risultati tramite l'invocazione del metodo getStringMatchPattern("+percorsoProprieta
- +") invocato in seguito all'errore dell'invocazione getMatchPattern("+
- percorsoProprieta+",NODESET): "+exceptionNodeSet.getMessage(),exceptionNodeSet);
- }
- rulesNotFuond.put(nomeProprieta,percorsoProprieta);
- }else{
- // TROVATO DA AGGIUNGERE AL DATABASE!
- //res.put(nomeProprieta+" - "+ percorsoProprieta, risultato);
- TransactionResource risorsaCalcolata = new TransactionResource();
- if(richiesta)
- risorsaCalcolata.setTipoMessaggio(org.openspcoop2.core.transazioni.constants.TipoMessaggio.RICHIESTA_INGRESSO);
- else
- risorsaCalcolata.setTipoMessaggio(org.openspcoop2.core.transazioni.constants.TipoMessaggio.RISPOSTA_INGRESSO);
- risorsaCalcolata.setNome(nomeProprieta);
- risorsaCalcolata.setValore(risultato);
- res.add(risorsaCalcolata);
- if(debug){
- log.debug(nomeProprieta+" - "+ percorsoProprieta +" : "+risultato);
- }
- }
-
- }catch (XPathNotFoundException nfe) {
- // not found rule
- rulesNotFuond.put(nomeProprieta,nfe.getMessage());
- }catch (XPathNotValidException re) {
- // dirty rule
- log.error("Errore di validazione della query XPath ["+percorsoProprieta+"] durante la valutazione della proprieta ["+nomeProprieta+"]: "+re.getMessage(),re);
- dirtyRules.put(nomeProprieta,re.getMessage());
- }catch (XPathException re) {
- // dirty rule
- log.error("Errore durante la valutazione della proprieta ["+nomeProprieta+"] query XPath ["+percorsoProprieta+"]: "+re.getMessage(),re);
- dirtyRules.put(nomeProprieta,re.getMessage());
- }catch(Exception e){
- throw new Exception("Errore generico durante la valutazione della proprieta ["+nomeProprieta+"] query XPath ["+percorsoProprieta+"]: "+e.getMessage(),e);
- }
- }
-
- return res;
- }
-
-
-
- // ****** SDK BEFORE SAVE ON DATABASE***************
- public boolean processResourcesBeforeSaveOnDatabase(Transazione transazione,
- Traccia tracciaRichiesta, Traccia tracciaRisposta,
- List<MsgDiagnostico> msgDiagnostici,
- DumpMessaggio dumpMessaggioRichiestaIngresso, DumpMessaggio dumpMessaggioRichiestaUscita,
- DumpMessaggio dumpMessaggioRispostaIngresso, DumpMessaggio dumpMessaggioRispostaUscita,
- String stato,
- Logger log, DAOFactory daoFactory) throws Exception{
- return this.processResourcesBeforeSaveOnDatabase(transazione,
- tracciaRichiesta,tracciaRisposta,
- msgDiagnostici,
- dumpMessaggioRichiestaIngresso, dumpMessaggioRichiestaUscita,
- dumpMessaggioRispostaIngresso, dumpMessaggioRispostaUscita,
- stato,
- this.mergeServiceActionTransactionLibrary_resources(),
- this.mergeServiceActionTransactionLibrary_sdkPlugins(log),
- log,daoFactory);
- }
- public boolean processResourcesBeforeSaveOnDatabase(
- Transazione transazione,Traccia tracciaRichiesta, Traccia tracciaRisposta,
- List<MsgDiagnostico> msgDiagnostici,
- DumpMessaggio dumpMessaggioRichiestaIngresso, DumpMessaggio dumpMessaggioRichiestaUscita,
- DumpMessaggio dumpMessaggioRispostaIngresso, DumpMessaggio dumpMessaggioRispostaUscita,
- String stato,
- List<ConfigurazioneTransazioneRisorsaContenuto> listRisorseContenuto,
- List<ITransactionProcessing> listTransactionProcessing,
- Logger log, DAOFactory daoFactory) throws Exception{
- boolean updated = this.updateDumpMessaggio(dumpMessaggioRichiestaIngresso, listRisorseContenuto, stato) &&
- this.updateDumpMessaggio(dumpMessaggioRichiestaUscita, listRisorseContenuto, stato) &&
- this.updateDumpMessaggio(dumpMessaggioRispostaIngresso, listRisorseContenuto, stato) &&
- this.updateDumpMessaggio(dumpMessaggioRispostaUscita, listRisorseContenuto, stato);
- // SDK
- if(listTransactionProcessing!=null && listTransactionProcessing.size()>0){
- Transaction transactionSDK = new Transaction(log,daoFactory,transazione,
- tracciaRichiesta, tracciaRisposta,
- msgDiagnostici);
- if(dumpMessaggioRichiestaIngresso!=null){
- TransactionManager.setContentResourcesInTransaction(transactionSDK, dumpMessaggioRichiestaIngresso);
- }
- if(dumpMessaggioRichiestaUscita!=null){
- TransactionManager.setContentResourcesInTransaction(transactionSDK, dumpMessaggioRichiestaUscita);
- }
- if(dumpMessaggioRispostaIngresso!=null){
- TransactionManager.setContentResourcesInTransaction(transactionSDK, dumpMessaggioRispostaIngresso);
- }
- if(dumpMessaggioRispostaUscita!=null){
- TransactionManager.setContentResourcesInTransaction(transactionSDK, dumpMessaggioRispostaUscita);
- }
- for (ITransactionProcessing iTransactionProcessing : listTransactionProcessing) {
- iTransactionProcessing.processRealTimeResourcesBeforeSaveOnDatabase(transactionSDK);
- }
- if(dumpMessaggioRichiestaIngresso!=null){
- if (TransactionManager.updateResources(dumpMessaggioRichiestaIngresso, transactionSDK)){
- updated = true;
- }
- }
- if(dumpMessaggioRichiestaUscita!=null){
- if (TransactionManager.updateResources(dumpMessaggioRichiestaUscita, transactionSDK)){
- updated = true;
- }
- }
- if(dumpMessaggioRispostaIngresso!=null){
- if (TransactionManager.updateResources(dumpMessaggioRispostaIngresso, transactionSDK)){
- updated = true;
- }
- }
- if(dumpMessaggioRispostaUscita!=null){
- if (TransactionManager.updateResources(dumpMessaggioRispostaUscita, transactionSDK)){
- updated = true;
- }
- }
- }
- return updated;
- }
- private boolean updateDumpMessaggio(DumpMessaggio dumpMessaggio, List<ConfigurazioneTransazioneRisorsaContenuto> listRisorseContenuto, String stato) throws Exception{
- boolean updated = false;
- if(dumpMessaggio!=null){
- // Risorse contenuto (configurate via govwayMonitor)
- if(dumpMessaggio.sizeContenutoList()>0){
- for (DumpContenuto dumpContenuto : dumpMessaggio.getContenutoList()) {
- for (ConfigurazioneTransazioneRisorsaContenuto configurazioneTransazioneRisorsaContenuto : listRisorseContenuto) {
- if(configurazioneTransazioneRisorsaContenuto.getIdConfigurazioneTransazioneStato()!=null &&
- configurazioneTransazioneRisorsaContenuto.getIdConfigurazioneTransazioneStato().getStato()!=null &&
- !"".equals(configurazioneTransazioneRisorsaContenuto.getIdConfigurazioneTransazioneStato().getStato())){
- if(!configurazioneTransazioneRisorsaContenuto.getIdConfigurazioneTransazioneStato().getStato().equals(stato)){
- continue;
- }
- }
- if(configurazioneTransazioneRisorsaContenuto.getTipoMessaggio().toString().equals(dumpMessaggio.getTipoMessaggio().toString()) &&
- configurazioneTransazioneRisorsaContenuto.getNome().equals(dumpContenuto.getNome())){
- // mascheramento
- if(configurazioneTransazioneRisorsaContenuto.getAbilitaAnonimizzazione()!=null &&
- configurazioneTransazioneRisorsaContenuto.getAbilitaAnonimizzazione() == 1){
- if(TipoMascheramento.FISICO.equals(configurazioneTransazioneRisorsaContenuto.getTipoMascheramento())){
- TransactionContentUtils.setDumpContenutoValue(dumpContenuto,
- this.mascheramento(configurazioneTransazioneRisorsaContenuto.getCarattereMaschera(),
- configurazioneTransazioneRisorsaContenuto.getPosizionamentoMaschera(),
- configurazioneTransazioneRisorsaContenuto.getNumeroCaratteriMaschera(),
- TransactionContentUtils.getDumpContenutoValue(dumpContenuto)));
- updated = true;
- }
- }
- // compressione
- if(configurazioneTransazioneRisorsaContenuto.getAbilitaCompressione()!=null &&
- configurazioneTransazioneRisorsaContenuto.getAbilitaCompressione() == 1){
- TransactionContentUtils.compress(dumpContenuto, configurazioneTransazioneRisorsaContenuto.getTipoCompressione());
- updated = true;
- }
- break;
- }
- }
- }
- }
- }
- return updated;
- }
-
- // ****** SDK AFTER READ FROM DATABASE***************
- public boolean processResourcesAfterReadFromDatabase(Transazione transazione,DumpMessaggio dumpMessaggio,String stato,
- Logger log, DAOFactory daoFactory) throws Exception{
- return this.processResourcesAfterReadFromDatabase(transazione,dumpMessaggio, stato,
- this.mergeServiceActionTransactionLibrary_resources(),
- this.mergeServiceActionTransactionLibrary_sdkPlugins(log),
- log,daoFactory);
- }
- public boolean processResourcesAfterReadFromDatabase(Transazione transazione,DumpMessaggio dumpMessaggio,String stato,
- List<ConfigurazioneTransazioneRisorsaContenuto> list,
- List<ITransactionProcessing> listTransactionProcessing,
- Logger log, DAOFactory daoFactory) throws Exception{
- boolean updated = false;
- if(dumpMessaggio!=null){
- // Risorse contenuto (configurate via govwayMonitor)
- if(dumpMessaggio.sizeContenutoList()>0){
- for (DumpContenuto dumpContenuto : dumpMessaggio.getContenutoList()) {
- for (ConfigurazioneTransazioneRisorsaContenuto configurazioneTransazioneRisorsaContenuto : list) {
- if(configurazioneTransazioneRisorsaContenuto.getIdConfigurazioneTransazioneStato()!=null &&
- configurazioneTransazioneRisorsaContenuto.getIdConfigurazioneTransazioneStato().getStato()!=null &&
- !"".equals(configurazioneTransazioneRisorsaContenuto.getIdConfigurazioneTransazioneStato().getStato())){
- if(!configurazioneTransazioneRisorsaContenuto.getIdConfigurazioneTransazioneStato().getStato().equals(stato)){
- continue;
- }
- }
- if(configurazioneTransazioneRisorsaContenuto.getTipoMessaggio().toString().equals(dumpMessaggio.getTipoMessaggio().toString()) &&
- configurazioneTransazioneRisorsaContenuto.getNome().equals(dumpContenuto.getNome())){
- // de-compressione
- if(configurazioneTransazioneRisorsaContenuto.getAbilitaCompressione()!=null &&
- configurazioneTransazioneRisorsaContenuto.getAbilitaCompressione() == 1){
- TransactionContentUtils.decompress(dumpContenuto, configurazioneTransazioneRisorsaContenuto.getTipoCompressione());
- updated = true;
- }
- // de-mascheramento
- if(configurazioneTransazioneRisorsaContenuto.getAbilitaAnonimizzazione()!=null &&
- configurazioneTransazioneRisorsaContenuto.getAbilitaAnonimizzazione() == 1){
- if(TipoMascheramento.LOGICO.equals(configurazioneTransazioneRisorsaContenuto.getTipoMascheramento())){
- TransactionContentUtils.setDumpContenutoValue(dumpContenuto,
- this.mascheramento(configurazioneTransazioneRisorsaContenuto.getCarattereMaschera(),
- configurazioneTransazioneRisorsaContenuto.getPosizionamentoMaschera(),
- configurazioneTransazioneRisorsaContenuto.getNumeroCaratteriMaschera(),
- TransactionContentUtils.getDumpContenutoValue(dumpContenuto)));
- updated = true;
- }
- }
- break;
- }
- }
- }
- }
- // SDK
- if(listTransactionProcessing!=null && listTransactionProcessing.size()>0){
- Transaction transactionSDK = new Transaction(log,daoFactory,transazione);
- TransactionManager.setContentResourcesInTransaction(transactionSDK, dumpMessaggio);
- for (ITransactionProcessing iTransactionProcessing : listTransactionProcessing) {
- iTransactionProcessing.processRealTimeResourcesAfterReadFromDatabase(transactionSDK);
- }
- if (TransactionManager.updateResources(dumpMessaggio, transactionSDK)){
- updated = true;
- }
- }
- }
- return updated;
- }
- // ****** UTILS ***************
- @Override
- public String toString(){
- StringBuilder bf = new StringBuilder();
- if(this.basicServiceLibrary==null){
- bf.append("BasicServiceLibrary: notDefined");
- bf.append("\n");
- }
- else{
- bf.append(this.basicServiceLibrary.toString());
- }
- bf.append("TransactionActionLibrary: ");
- if(this.getTransactionActionLibrary()!=null){
- bf.append("presente size-plugins[").
- append(this.getTransactionActionLibrary().sizeConfigurazioneTransazionePluginList()).
- append("] plugins[").
- append(this.getTransactionActionLibrary().getConfigurazioneTransazionePluginList()).
- append(" size-stati[").
- append(this.getTransactionActionLibrary().sizeConfigurazioneTransazioneStatoList()).
- append("] stati[").
- append(this.getTransactionActionLibrary().getConfigurazioneTransazioneStatoList()).
- append("] size-risorse[").
- append(this.getTransactionActionLibrary().sizeConfigurazioneTransazioneRisorsaContenutoList()).
- append("] risorse[").
- append(this.getTransactionActionLibrary().getConfigurazioneTransazioneRisorsaContenutoList()).
- append("] enabled[").
- append(this.getTransactionActionLibrary().isEnabled()).
- append("]");
- }else{
- bf.append("-");
- }
- bf.append("\n");
- bf.append("TransactionActionAllLibrary: ");
- if(this.getTransactionActionAllLibrary()!=null){
- bf.append("presente size-plugins[").
- append(this.getTransactionActionAllLibrary().sizeConfigurazioneTransazionePluginList()).
- append("] plugins[").
- append(this.getTransactionActionAllLibrary().getConfigurazioneTransazionePluginList()).
- append("presente size-stati[").
- append(this.getTransactionActionAllLibrary().sizeConfigurazioneTransazioneStatoList()).
- append("] stati[").
- append(this.getTransactionActionAllLibrary().getConfigurazioneTransazioneStatoList()).
- append("] size-risorse[").
- append(this.getTransactionActionAllLibrary().sizeConfigurazioneTransazioneRisorsaContenutoList()).
- append("] risorse[").
- append(this.getTransactionActionAllLibrary().getConfigurazioneTransazioneRisorsaContenutoList()).
- append("] enabled[").
- append(this.getTransactionActionAllLibrary().isEnabled()).
- append("]");
- }else{
- bf.append("-");
- }
- bf.append("\n");
- return bf.toString();
- }
- public List<ConfigurazioneTransazioneStato> mergeServiceActionTransactionLibrary_states() throws Exception{
- List<ConfigurazioneTransazioneStato> list = new ArrayList<ConfigurazioneTransazioneStato>();
- List<String> idStati = new ArrayList<>();
- // Leggo le risorse associate all'azione specifica
- if(this.transactionActionLibrary!=null && this.transactionActionLibrary.sizeConfigurazioneTransazioneStatoList()>0){
- for (ConfigurazioneTransazioneStato configurazioneTransazioneStato : this.transactionActionLibrary.getConfigurazioneTransazioneStatoList()) {
- if(configurazioneTransazioneStato.isEnabled()){
- list.add(configurazioneTransazioneStato);
- idStati.add(configurazioneTransazioneStato.getNome());
- }
- }
- }
- // Leggo le risorse associate all'azione '*'
- if(this.transactionActionAllLibrary!=null && this.transactionActionAllLibrary.sizeConfigurazioneTransazioneStatoList()>0){
- for (ConfigurazioneTransazioneStato configurazioneTransazioneStato : this.transactionActionAllLibrary.getConfigurazioneTransazioneStatoList()) {
- if(configurazioneTransazioneStato.isEnabled()){
- String idStato = configurazioneTransazioneStato.getNome();
- if(idStati.contains(idStato)==false){
-
- // inserisco solo gli stati il cui nome non siano gia stati utilizzati nell'azione specifica
-
- list.add(configurazioneTransazioneStato);
- idStati.add(idStato);
- }
- }
- }
- }
- return list;
- }
- public List<ConfigurazioneTransazioneRisorsaContenuto> mergeServiceActionTransactionLibrary_resources() throws Exception{
- List<ConfigurazioneTransazioneRisorsaContenuto> list = new ArrayList<ConfigurazioneTransazioneRisorsaContenuto>();
- List<String> idRisorse = new ArrayList<>();
- // Leggo le risorse associate all'azione specifica
- if(this.transactionActionLibrary!=null && this.transactionActionLibrary.sizeConfigurazioneTransazioneRisorsaContenutoList()>0){
- for (ConfigurazioneTransazioneRisorsaContenuto configurazioneTransazioneRisorsaContenuto : this.transactionActionLibrary.getConfigurazioneTransazioneRisorsaContenutoList()) {
- if(configurazioneTransazioneRisorsaContenuto.isEnabled()){
- list.add(configurazioneTransazioneRisorsaContenuto);
- //idRisorse.add(configurazioneTransazioneRisorsaContenuto.getNome()+"_"+configurazioneTransazioneRisorsaContenuto.getTipoMessaggio().name());
- idRisorse.add(configurazioneTransazioneRisorsaContenuto.getNome()); // è stato definito lo unique sul nome
- }
- }
- }
- // Leggo le risorse associate all'azione '*'
- if(this.transactionActionAllLibrary!=null && this.transactionActionAllLibrary.sizeConfigurazioneTransazioneRisorsaContenutoList()>0){
- for (ConfigurazioneTransazioneRisorsaContenuto configurazioneTransazioneRisorsaContenuto : this.transactionActionAllLibrary.getConfigurazioneTransazioneRisorsaContenutoList()) {
- if(configurazioneTransazioneRisorsaContenuto.isEnabled()){
- //String idRisorsa = configurazioneTransazioneRisorsaContenuto.getNome()+"_"+configurazioneTransazioneRisorsaContenuto.getTipoMessaggio().name();
- String idRisorsa = configurazioneTransazioneRisorsaContenuto.getNome(); // è stato definito lo unique sul nome
- if(idRisorse.contains(idRisorsa)==false){
-
- // inserisco solo le risorse il cui nome e tipo non siano gia stati utilizzati nell'azione specifica
-
- list.add(configurazioneTransazioneRisorsaContenuto);
- idRisorse.add(idRisorsa);
- }
- }
- }
- }
- return list;
- }
- public List<ITransactionProcessing> mergeServiceActionTransactionLibrary_sdkPlugins(Logger log) throws Exception{
- List<ITransactionProcessing> list = new ArrayList<ITransactionProcessing>();
- List<String> idRisorse = new ArrayList<>();
- // Leggo le risorse associate all'azione specifica
- if(this.transactionActionLibrary!=null && this.transactionActionLibrary.getEnabled()
- && this.transactionActionLibrary.getConfigurazioneTransazionePluginList()!=null &&
- this.transactionActionLibrary.getConfigurazioneTransazionePluginList().size()>0){
- for (ConfigurazioneTransazionePlugin configTransazionePlugin : this.transactionActionLibrary.getConfigurazioneTransazionePluginList()) {
- if(configTransazionePlugin.isEnabled()){
- String className = configTransazionePlugin.getPlugin().getClassName();
- if(idRisorse.contains(className)==false){
- IDynamicLoader loader = DynamicFactory.getInstance().newDynamicLoader(configTransazionePlugin.getPlugin().getTipoPlugin(), configTransazionePlugin.getPlugin().getTipo(),
- className, log);
- ITransactionProcessing transactionProcessor = (ITransactionProcessing) loader.newInstance();
- idRisorse.add(className);
- list.add(transactionProcessor);
- }
- }
- }
- }
- // Leggo le risorse associate all'azione '*'
- if(this.transactionActionAllLibrary!=null && this.transactionActionAllLibrary.getEnabled()
- && this.transactionActionAllLibrary.getConfigurazioneTransazionePluginList()!=null &&
- this.transactionActionAllLibrary.getConfigurazioneTransazionePluginList().size()>0){
- for (ConfigurazioneTransazionePlugin configTransazionePlugin : this.transactionActionAllLibrary.getConfigurazioneTransazionePluginList()) {
- if(configTransazionePlugin.isEnabled()){
- String className = configTransazionePlugin.getPlugin().getClassName();
- if(idRisorse.contains(className)==false){
- IDynamicLoader loader = DynamicFactory.getInstance().newDynamicLoader(configTransazionePlugin.getPlugin().getTipoPlugin(), configTransazionePlugin.getPlugin().getTipo(),
- className, log);
- ITransactionProcessing transactionProcessor = (ITransactionProcessing) loader.newInstance();
- idRisorse.add(className);
- list.add(transactionProcessor);
- }
- }
- }
- }
- return list;
- }
- private String mascheramento(char carattereMascheramento, PosizioneMascheramento posizioneMascheramento, int numero, String originale){
- StringBuilder bf = new StringBuilder();
- if(originale.length()<=numero || numero<=0 ){
- for (int i = 0; i < originale.length(); i++) {
- bf.append(carattereMascheramento);
- }
- }
- else{
- if(PosizioneMascheramento.PRIMI.equals(posizioneMascheramento)){
- int i=0;
- for (; i < numero; i++) {
- bf.append(carattereMascheramento);
- }
- for (; i < originale.length(); i++) {
- bf.append(originale.charAt(i));
- }
- }
- else{
- int i=0;
- for (; i < (originale.length()-numero); i++) {
- bf.append(originale.charAt(i));
- }
- for (; i < originale.length(); i++) {
- bf.append(carattereMascheramento);
- }
- }
- }
- return bf.toString();
- }
- }