GestoreTransazioniStateful.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.pdd.core.transazioni;
- import java.sql.Connection;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import org.openspcoop2.core.commons.dao.DAOFactory;
- import org.openspcoop2.core.config.OpenspcoopAppender;
- import org.openspcoop2.core.config.Property;
- import org.openspcoop2.core.config.utils.OpenSPCoopAppenderUtilities;
- import org.openspcoop2.core.transazioni.Transazione;
- import org.openspcoop2.core.transazioni.constants.RuoloTransazione;
- import org.openspcoop2.core.transazioni.dao.ITransazioneService;
- import org.openspcoop2.generic_project.beans.UpdateField;
- import org.openspcoop2.generic_project.exception.NotFoundException;
- import org.openspcoop2.generic_project.expression.IPaginatedExpression;
- import org.openspcoop2.generic_project.utils.ServiceManagerProperties;
- import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
- import org.openspcoop2.protocol.sdk.diagnostica.IDiagnosticProducer;
- import org.openspcoop2.protocol.sdk.diagnostica.MsgDiagnostico;
- import org.openspcoop2.protocol.sdk.dump.IDumpProducer;
- import org.openspcoop2.protocol.sdk.dump.Messaggio;
- import org.openspcoop2.protocol.sdk.tracciamento.ITracciaProducer;
- import org.openspcoop2.protocol.sdk.tracciamento.Traccia;
- import org.openspcoop2.protocol.utils.EsitiProperties;
- import org.slf4j.Logger;
- /**
- * GestoreTransazioniStateful
- *
- * @author Poli Andrea (poli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class GestoreTransazioniStateful {
- private Logger log = null;
- private Logger logSql = null;
- // private String datasource = null;
- private String tipoDatabase = null;
- private boolean debug = false;
-
- private ITracciaProducer tracciamentoOpenSPCoopAppender = null;
- private IDiagnosticProducer msgDiagnosticiOpenSPCoopAppender = null;
- private IDumpProducer dumpOpenSPCoopAppender = null;
- private boolean transazioniRegistrazioneDumpHeadersCompactEnabled = false;
-
- public GestoreTransazioniStateful(Logger log,Logger logSql,
- //String dataSource,
- String tipoDatabase,boolean debug) throws Exception{
-
- this.log = log;
- this.logSql = logSql;
- this.tipoDatabase = tipoDatabase;
- // this.datasource = dataSource;
- this.debug = debug;
-
- boolean usePdDConnection = true;
-
- try{
-
- // Init
- this.tracciamentoOpenSPCoopAppender = new org.openspcoop2.pdd.logger.TracciamentoOpenSPCoopProtocolAppender();
- OpenspcoopAppender tracciamentoOpenSPCoopAppender = new OpenspcoopAppender();
- tracciamentoOpenSPCoopAppender.setTipo("__gestoreTransazioniStateful");
- List<Property> tracciamentoOpenSPCoopAppenderProperties = new ArrayList<Property>();
- // Verra poi utilizzata la connessione ottenuta ogni volta che il timer viene eseguito, infatti si usa usePdDConnection
- OpenSPCoopAppenderUtilities.addParameters(this.logSql, tracciamentoOpenSPCoopAppenderProperties,
- null, // nessun datasource
- null, null, null, null, // nessuna connection
- this.tipoDatabase,
- usePdDConnection, // viene usata la connessione della PdD
- this.debug
- );
- OpenSPCoopAppenderUtilities.addCheckProperties(tracciamentoOpenSPCoopAppenderProperties, false);
- tracciamentoOpenSPCoopAppender.setPropertyList(tracciamentoOpenSPCoopAppenderProperties);
- this.tracciamentoOpenSPCoopAppender.initializeAppender(tracciamentoOpenSPCoopAppender);
- this.tracciamentoOpenSPCoopAppender.isAlive();
-
- }catch(Exception e){
- throw new Exception("Errore durante l'inizializzazione del TracciamentoAppender: "+e.getMessage(),e);
- }
-
- try{
-
- // Init
- this.msgDiagnosticiOpenSPCoopAppender = new org.openspcoop2.pdd.logger.MsgDiagnosticoOpenSPCoopProtocolAppender();
- OpenspcoopAppender diagnosticoOpenSPCoopAppender = new OpenspcoopAppender();
- diagnosticoOpenSPCoopAppender.setTipo("__gestoreTransazioniStateful");
- List<Property> diagnosticoOpenSPCoopAppenderProperties = new ArrayList<Property>();
- // Verra poi utilizzata la connessione ottenuta ogni volta che il timer viene eseguito, infatti si usa usePdDConnection
- OpenSPCoopAppenderUtilities.addParameters(this.logSql, diagnosticoOpenSPCoopAppenderProperties,
- null, // nessun datasource
- null, null, null, null, // nessuna connection
- this.tipoDatabase,
- usePdDConnection, // viene usata la connessione della PdD
- this.debug
- );
- OpenSPCoopAppenderUtilities.addCheckProperties(diagnosticoOpenSPCoopAppenderProperties, false);
- diagnosticoOpenSPCoopAppender.setPropertyList(diagnosticoOpenSPCoopAppenderProperties);
- this.msgDiagnosticiOpenSPCoopAppender.initializeAppender(diagnosticoOpenSPCoopAppender);
- this.msgDiagnosticiOpenSPCoopAppender.isAlive();
-
- }catch(Exception e){
- throw new Exception("Errore durante l'inizializzazione del DiagnosticoAppender: "+e.getMessage(),e);
- }
-
- try{
-
- // Init
- this.dumpOpenSPCoopAppender = new org.openspcoop2.pdd.logger.DumpOpenSPCoopProtocolAppender();
- OpenspcoopAppender dumpOpenSPCoopAppender = new OpenspcoopAppender();
- dumpOpenSPCoopAppender.setTipo("__gestoreTransazioniStateful");
- List<Property> dumpOpenSPCoopAppenderProperties = new ArrayList<Property>();
- // Verra poi utilizzata la connessione ottenuta ogni volta che il timer viene eseguito, infatti si usa usePdDConnection
- OpenSPCoopAppenderUtilities.addParameters(this.logSql, dumpOpenSPCoopAppenderProperties,
- null, // nessun datasource
- null, null, null, null, // nessuna connection
- this.tipoDatabase,
- usePdDConnection, // viene usata la connessione della PdD
- this.debug
- );
- OpenSPCoopAppenderUtilities.addCheckProperties(dumpOpenSPCoopAppenderProperties, false);
- dumpOpenSPCoopAppender.setPropertyList(dumpOpenSPCoopAppenderProperties);
- this.dumpOpenSPCoopAppender.initializeAppender(dumpOpenSPCoopAppender);
- this.dumpOpenSPCoopAppender.isAlive();
-
- // Indicazioni sulle modalita' di salvataggio degli header del dump
- this.transazioniRegistrazioneDumpHeadersCompactEnabled = OpenSPCoop2Properties.getInstance().isTransazioniRegistrazioneDumpHeadersCompactEnabled();
-
- }catch(Exception e){
- throw new Exception("Errore durante l'inizializzazione del DumpAppender: "+e.getMessage(),e);
- }
- }
-
-
- public void verificaOggettiPresentiRepository(DAOFactory daoFactory, ServiceManagerProperties daoFactoryServiceManagerPropertiesTransazioni,
- Logger daoFactoryLoggerTransazioni, Connection con) throws Exception{
-
-
- try{
- if(this.debug)
- this.log.debug("\n\n****************************************************************************************************");
- boolean autoCommit = false;
- con.setAutoCommit(autoCommit);
-
-
- org.openspcoop2.core.transazioni.dao.jdbc.JDBCServiceManager jdbcServiceManager =
- (org.openspcoop2.core.transazioni.dao.jdbc.JDBCServiceManager) daoFactory.getServiceManager(org.openspcoop2.core.transazioni.utils.ProjectInfo.getInstance(),
- con, autoCommit,
- daoFactoryServiceManagerPropertiesTransazioni, daoFactoryLoggerTransazioni);
- jdbcServiceManager.getJdbcProperties().setShowSql(this.debug);
- ITransazioneService transazioneService = jdbcServiceManager.getTransazioneService();
-
- int size = RepositoryGestioneStateful.size();
- if(this.debug)
- this.log.debug("Trovati "+size+" elementi da gestire");
- while(size>0){
-
- StatefulObject so = RepositoryGestioneStateful.removeObject();
- try{
-
- String type = "";
- if(so.getType()!=null){
- type = so.getType().toString();
- }
- String className = "";
- if(so.getObject()!=null){
- type = so.getObject().getClass().getName();
- }
- String idTransazione = "";
- if(so.getObject()!=null){
- idTransazione = so.getIdTransazione();
- }
-
- if(so.getIdTransazione()==null){
- throw new Exception("Oggetto presente nel repository (Tipo:"+type+")(Class:"+className+") senza associato un id di transazione");
- }
- if(so.getType()==null){
- throw new Exception("Oggetto presente nel repository (ID:"+idTransazione+")(Class:"+className+") senza associato un tipo");
- }
- if(so.getObject()==null){
- throw new Exception("Oggetto presente nel repository (ID:"+idTransazione+")(Tipo:"+type+") senza un valore");
- }
-
- if(this.debug)
- this.log.debug("-------------- "+so.getType().toString()+"/"+so.getObject().getClass().getName()+"/"+so.getIdTransazione()+" --------------");
-
- TransactionDB transactionDB = readTransazione(transazioneService, so.getIdTransazione());
- if(transactionDB==null){
- // Transazione non ancora inserita nel database dal modulo PostOutResponseHandler
- if(this.debug)
- this.log.debug("Transazione non ancora presente, reinserisco nel repository");
- RepositoryGestioneStateful.addObject(so);
- continue;
- }
-
- gestioneStatefulObject(transazioneService, con, so, transactionDB,true);
-
- con.commit();
- if(this.debug)
- this.log.debug("Commit eseguito con successo");
-
- }catch(Exception e){
- try{
- if(this.debug)
- this.log.debug("Errore durante la gestione dell'oggetto (reinserisco nel repository): "+e.getMessage());
- RepositoryGestioneStateful.addObject(so);
- con.rollback();
- }catch(Exception eRollback){}
- throw e;
- }finally{
- size--;
- }
- }
-
-
- }finally{
- try{
- con.setAutoCommit(true);
- }catch(Exception eRollback){
- // ignore
- }
- }
-
- }
-
- public void gestioneStatefulObject(ITransazioneService transazioneService,Connection con,StatefulObject so) throws Exception{
- gestioneStatefulObject(transazioneService, con, so, null,false);
- }
- public void gestioneStatefulObject(ITransazioneService transazioneService,Connection con,StatefulObject so,TransactionDB transactionDB) throws Exception{
- gestioneStatefulObject(transazioneService, con, so, transactionDB,false);
- }
- private void gestioneStatefulObject(ITransazioneService transazioneService,Connection con,StatefulObject so,TransactionDB transactionDB,boolean thread) throws Exception{
-
- String tipoGestione = "[Thread] ";
- if(!thread)
- tipoGestione = "[GestioneDiretta] ";
-
- switch (so.getType()) {
- case MSGDIAGNOSTICO:
-
- this.msgDiagnosticiOpenSPCoopAppender.log(con,(MsgDiagnostico)so.getObject());
- if(this.debug)
- this.log.debug(tipoGestione+"MsgDiagnostico inserito nel database");
-
- break;
-
- case TRACCIA:
-
- Traccia traccia = (Traccia) so.getObject();
- this.tracciamentoOpenSPCoopAppender.log(con, traccia);
- if(this.debug)
- this.log.debug(tipoGestione+"Traccia ("+traccia.getTipoMessaggio()+") inserita nel database");
-
- break;
-
- case MESSAGGIO:
-
- this.dumpOpenSPCoopAppender.dump(con, (Messaggio)so.getObject(), this.transazioniRegistrazioneDumpHeadersCompactEnabled);
- if(this.debug)
- this.log.debug(tipoGestione+"DumpMessaggio inserito nel database");
-
- break;
-
- // case DATA_USCITA_RICHIESTA:
- //
- // updateDataUscitaRichiesta(transazioneService, (Date)so.getObject(), so.getIdTransazione());
- // if(this.debug)
- // this.log.debug(tipoGestione+"Informazione sulla data di uscita della richiesta aggiornata");
- //
- // break;
- //
- // case DATA_INGRESSO_RISPOSTA:
- //
- // updateDataIngressoRisposta(transazioneService, (Date)so.getObject(), so.getIdTransazione());
- // if(this.debug)
- // this.log.debug(tipoGestione+"Informazione sulla data di ingresso della risposta aggiornata");
- //
- // break;
- //
- // case DIMENSIONE_USCITA_RICHIESTA:
- //
- // updateDimensioneUscitaRichiesta(transazioneService, (Long)so.getObject(), so.getIdTransazione());
- // if(this.debug)
- // this.log.debug(tipoGestione+"Informazione sulla dimensione di uscita della richiesta aggiornata");
- //
- // break;
- //
- // case DIMENSIONE_INGRESSO_RISPOSTA:
- //
- // updateDimensioneIngressoRisposta(transazioneService, (Long)so.getObject(), so.getIdTransazione());
- // if(this.debug)
- // this.log.debug(tipoGestione+"Informazione sulla dimensione di ingresso della risposta aggiornata");
- //
- // break;
- //
- // case LOCATION:
- //
- // updateLocationConnettore(transazioneService, (String)so.getObject(), so.getIdTransazione());
- // if(this.debug)
- // this.log.debug(tipoGestione+"Informazione sulla location aggiornata");
- //
- // break;
- //
- // case TIPO_CONNETTORE:
- //
- // updateTipoConnettore(transazioneService, (String)so.getObject(), so.getIdTransazione());
- // if(this.debug)
- // this.log.debug(tipoGestione+"Informazione sul tipo di connettore aggiornata");
- //
- // break;
- //
- // case CODICE_TRASPORTO_RICHIESTA:
- //
- // updateCodiceTrasportoRichiesta(transazioneService, (String)so.getObject(), so.getIdTransazione());
- // if(this.debug)
- // this.log.debug(tipoGestione+"Informazione sul codice di trasporto aggiornata");
- //
- // break;
- //
- // case SCENARIO_COOPERAZIONE:
- //
- // updateScenarioDiCooperazione(transazioneService, (String)so.getObject(), so.getIdTransazione());
- // if(this.debug)
- // this.log.debug(tipoGestione+"Informazione sullo scenario di cooperazione aggiornata");
- //
- // break;
-
- case OUT_REQUEST_STATEFUL_OBJECT:
-
- updateOutRequestStatefulObject(transazioneService, (OutRequestStatefulObject)so.getObject(), so.getIdTransazione());
- if(this.debug)
- this.log.debug(tipoGestione+"Informazione emesse dall'out request handler aggiornate");
-
- break;
-
- case IN_RESPONSE_STATEFUL_OBJECT:
-
- updateInResponseStatefulObject(transazioneService, (InResponseStatefulObject)so.getObject(), so.getIdTransazione());
- if(this.debug)
- this.log.debug(tipoGestione+"Informazione emesse dall'in response handler aggiornate");
-
- break;
- }
- }
-
-
- public TransactionDB readTransazione(ITransazioneService transazioneService,String idTransazione) throws Exception{
-
- IPaginatedExpression expression = transazioneService.newPaginatedExpression();
- expression.equals(Transazione.model().ID_TRANSAZIONE, idTransazione);
-
- List<Map<String, Object>> result = null;
- try{
- result = transazioneService.select(expression,
- Transazione.model().PROTOCOLLO,Transazione.model().ESITO, Transazione.model().ESITO_CONTESTO);
- if(result==null || result.size()<=0){
- if(this.debug){
- this.log.debug("Transazione con id ["+idTransazione+"] non trovata");
- }
- return null;
- }
- }catch(NotFoundException notFound){
- if(this.debug){
- this.log.debug("Transazione con id ["+idTransazione+"] non trovata (DriverNotFound): "+notFound.getMessage());
- }
- return null;
- }
- if(result.size()>1){
- if(this.debug){
- this.log.debug("Trovata piu' di una Transazione con id ["+idTransazione+"]");
- }
- }
- Map<String, Object> map = result.remove(0);
-
- TransactionDB tr = new TransactionDB();
- tr.setIdTransazione(idTransazione);
-
- Object oProtocollo = map.get(Transazione.model().PROTOCOLLO.getFieldName());
- if(oProtocollo==null || !(oProtocollo instanceof String) ){
- throw new Exception("Salvata transazione senza protocollo ["+oProtocollo+"]");
- }
- String protocollo = (String) oProtocollo;
-
- Object oEsito = map.get(Transazione.model().ESITO.getFieldName());
- if(oEsito==null || !(oEsito instanceof Integer) ){
- throw new Exception("Salvata transazione senza esito ["+oEsito+"]");
- }
- Integer esito = (Integer) oEsito;
-
- Object oEsitoContesto = map.get(Transazione.model().ESITO_CONTESTO.getFieldName());
- if(oEsitoContesto==null || !(oEsitoContesto instanceof String) ){
- throw new Exception("Salvata transazione senza esito contesto ["+oEsitoContesto+"]");
- }
- String esitoContesto = (String) oEsitoContesto;
-
- tr.setEsitoTransazione(EsitiProperties.getInstanceFromProtocolName(this.log,protocollo).convertToEsitoTransazione(esito, esitoContesto));
-
- if(this.debug){
- this.log.debug("Trovata transazione");
- }
- return tr;
-
- }
-
-
- // private void updateDataUscitaRichiesta(ITransazioneService transazioneService,Date data,String idTransazione) throws Exception{
- //
- // UpdateField updateField = new UpdateField(Transazione.model().DATA_USCITA_RICHIESTA, data);
- // transazioneService.updateFields(idTransazione, updateField);
- //
- // }
- //
- // private void updateDataIngressoRisposta(ITransazioneService transazioneService,Date data,String idTransazione) throws Exception{
- //
- // UpdateField updateField = new UpdateField(Transazione.model().DATA_INGRESSO_RISPOSTA, data);
- // transazioneService.updateFields(idTransazione, updateField);
- //
- // }
- //
- // private void updateDimensioneUscitaRichiesta(ITransazioneService transazioneService,Long dimensione,String idTransazione) throws Exception{
- //
- // UpdateField updateField = new UpdateField(Transazione.model().RICHIESTA_USCITA_BYTES, dimensione);
- // transazioneService.updateFields(idTransazione, updateField);
- //
- // }
- //
- // private void updateDimensioneIngressoRisposta(ITransazioneService transazioneService,Long dimensione,String idTransazione) throws Exception{
- //
- // UpdateField updateField = new UpdateField(Transazione.model().RISPOSTA_INGRESSO_BYTES, dimensione);
- // transazioneService.updateFields(idTransazione, updateField);
- //
- // }
- //
- // private void updateLocationConnettore(ITransazioneService transazioneService,String value,String idTransazione) throws Exception{
- //
- // UpdateField updateField = new UpdateField(Transazione.model().LOCATION_CONNETTORE, value);
- // transazioneService.updateFields(idTransazione, updateField);
- //
- // }
- //
- // private void updateTipoConnettore(ITransazioneService transazioneService,String value,String idTransazione) throws Exception{
- //
- // // TODO leggere le attuali informazioni e aggiornarle
- //
- // }
- //
- // private void updateCodiceTrasportoRichiesta(ITransazioneService transazioneService,String value,String idTransazione) throws Exception{
- //
- // // TODO leggere le attuali informazioni e aggiornarle
- //
- // }
- //
- //
- // private void updateScenarioDiCooperazione(ITransazioneService transazioneService,String value,String idTransazione) throws Exception{
- //
- // UpdateField updateField = new UpdateField(Transazione.model().RUOLO_TRANSAZIONE, value);
- // transazioneService.updateFields(idTransazione, updateField);
- //
- // }
-
- private void updateOutRequestStatefulObject(ITransazioneService transazioneService,OutRequestStatefulObject object,String idTransazione) throws Exception{
-
- List<UpdateField> updateFields = new ArrayList<UpdateField>();
-
- if(object.getDataUscitaRichiesta()!=null){
- UpdateField updateField = new UpdateField(Transazione.model().DATA_USCITA_RICHIESTA, object.getDataUscitaRichiesta());
- updateFields.add(updateField);
- }
-
- RuoloTransazione ruolo = null;
- if(object.getScenarioCooperazione()!=null){
- ruolo = RuoloTransazione.getEnumConstantFromOpenSPCoopValue(object.getScenarioCooperazione());
- UpdateField updateField = new UpdateField(Transazione.model().RUOLO_TRANSAZIONE, ruolo.getValoreAsInt());
- updateFields.add(updateField);
- }
-
- if(object.getLocation()!=null){
- UpdateField updateField = new UpdateField(Transazione.model().LOCATION_CONNETTORE, object.getLocation());
- updateFields.add(updateField);
- }
-
- if(object.getTipoConnettore()!=null){
- // TODO leggere le attuali informazioni e aggiornarle
- }
-
- if(object.getServiziApplicativiErogatore()!=null && object.getServiziApplicativiErogatore().size()>0){
- StringBuilder sa_erogatori = new StringBuilder();
- for (int i=0; i<object.getServiziApplicativiErogatore().size(); i++) {
- if (i>0){
- sa_erogatori.append(",");
- }
- sa_erogatori.append( object.getServiziApplicativiErogatore().get(i) );
- }
- UpdateField updateField = new UpdateField(Transazione.model().SERVIZIO_APPLICATIVO_EROGATORE, sa_erogatori.toString());
- updateFields.add(updateField);
- }
-
- if(object.getEventiGestione()!=null && object.getEventiGestione().size()>0){
-
- StringBuilder bf = new StringBuilder();
- for (String s : object.getEventiGestione()) {
- if(bf.length()>0){
- bf.append(",");
- }
- bf.append(s);
- }
-
- String attuale = null;
- try{
- IPaginatedExpression expression = transazioneService.newPaginatedExpression();
- expression.equals(Transazione.model().ID_TRANSAZIONE, idTransazione);
- List<Object> list = transazioneService.select(expression, Transazione.model().EVENTI_GESTIONE);
- if(list!=null && list.size()>0){
- Object o = list.get(0);
- if(o!=null && o instanceof String){
- attuale = (String) o;
- }
- }
- }catch(NotFoundException notFound){}
- if(attuale!=null){
- attuale = attuale + ",";
- attuale = attuale + bf.toString();
- }
- else{
- attuale = bf.toString();
- }
-
- UpdateField updateField = new UpdateField(Transazione.model().EVENTI_GESTIONE, attuale);
- updateFields.add(updateField);
- }
-
- if(updateFields.size()>0)
- transazioneService.updateFields(idTransazione, updateFields.toArray(new UpdateField[1]));
-
- }
-
-
- private void updateInResponseStatefulObject(ITransazioneService transazioneService,InResponseStatefulObject object,String idTransazione) throws Exception{
-
- List<UpdateField> updateFields = new ArrayList<UpdateField>();
-
- if(object.getDataRichiestaInoltrata()!=null){
- UpdateField updateField = new UpdateField(Transazione.model().DATA_USCITA_RICHIESTA_STREAM, object.getDataRichiestaInoltrata());
- updateFields.add(updateField);
- }
-
- if(object.getDataAccettazioneRisposta()!=null){
- UpdateField updateField = new UpdateField(Transazione.model().DATA_ACCETTAZIONE_RISPOSTA, object.getDataAccettazioneRisposta());
- updateFields.add(updateField);
- }
-
- if(object.getDataIngressoRisposta()!=null){
- UpdateField updateField = new UpdateField(Transazione.model().DATA_INGRESSO_RISPOSTA, object.getDataIngressoRisposta());
- updateFields.add(updateField);
- }
-
- if(object.getDataUscitaRichiesta()!=null){
- UpdateField updateField = new UpdateField(Transazione.model().DATA_USCITA_RICHIESTA, object.getDataUscitaRichiesta());
- updateFields.add(updateField);
- }
-
- if(object.getLocation()!=null){
- UpdateField updateField = new UpdateField(Transazione.model().LOCATION_CONNETTORE, object.getLocation());
- updateFields.add(updateField);
- }
-
- if(object.getReturnCode()!=null){
- // TODO leggere le attuali informazioni e aggiornarle
- }
-
- if(object.getFaultIntegrazione()!=null){
- UpdateField updateField = new UpdateField(Transazione.model().FAULT_INTEGRAZIONE, object.getFaultIntegrazione());
- updateFields.add(updateField);
- }
-
- if(object.getFormatoFaultIntegrazione()!=null){
- UpdateField updateField = new UpdateField(Transazione.model().FORMATO_FAULT_INTEGRAZIONE, object.getFormatoFaultIntegrazione());
- updateFields.add(updateField);
- }
-
- if(object.getFaultCooperazione()!=null){
- UpdateField updateField = new UpdateField(Transazione.model().FAULT_COOPERAZIONE, object.getFaultCooperazione());
- updateFields.add(updateField);
- }
-
- if(object.getFormatoFaultCooperazione()!=null){
- UpdateField updateField = new UpdateField(Transazione.model().FORMATO_FAULT_COOPERAZIONE, object.getFormatoFaultCooperazione());
- updateFields.add(updateField);
- }
-
- if(object.getEventiGestione()!=null && object.getEventiGestione().size()>0){
-
- StringBuilder bf = new StringBuilder();
- for (String s : object.getEventiGestione()) {
- if(bf.length()>0){
- bf.append(",");
- }
- bf.append(s);
- }
-
- String attuale = null;
- try{
- IPaginatedExpression expression = transazioneService.newPaginatedExpression();
- expression.equals(Transazione.model().ID_TRANSAZIONE, idTransazione);
- List<Object> list = transazioneService.select(expression, Transazione.model().EVENTI_GESTIONE);
- if(list!=null && list.size()>0){
- Object o = list.get(0);
- if(o!=null && o instanceof String){
- attuale = (String) o;
- }
- }
- }catch(NotFoundException notFound){}
- if(attuale!=null){
- attuale = attuale + ",";
- attuale = attuale + bf.toString();
- }
- else{
- attuale = bf.toString();
- }
-
- UpdateField updateField = new UpdateField(Transazione.model().EVENTI_GESTIONE, attuale);
- updateFields.add(updateField);
- }
-
- if(updateFields.size()>0)
- transazioneService.updateFields(idTransazione, updateFields.toArray(new UpdateField[1]));
-
- }
-
-
- }