GestoreCorrelazioneApplicativaPSUtilities.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.pdd.core;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Timestamp;

import org.openspcoop2.core.config.CorrelazioneApplicativa;
import org.openspcoop2.protocol.sdk.ProtocolException;
import org.openspcoop2.protocol.sdk.constants.CodiceErroreIntegrazione;
import org.openspcoop2.protocol.sdk.constants.ErroriIntegrazione;
import org.openspcoop2.protocol.sdk.state.StateMessage;
import org.openspcoop2.utils.date.DateManager;

/**
 * GestoreCorrelazioneApplicativaPSUtilities
 *
 * @author Andrea Poli (apoli@link.it)
 * @author $Author$
 * @version $Rev$, $Date$
 */

public class GestoreCorrelazioneApplicativaPSUtilities {

	// In questa classe vengono registrati i metodi per cui vengono collezionate le prepared statement
	
	public static void applicaCorrelazione(GestoreCorrelazioneApplicativa gestore,
			CorrelazioneApplicativa correlazioneApplicativa,String idApplicativo,String idBustaRequest) throws GestoreMessaggiException, ProtocolException{

		if(correlazioneApplicativa==null){
			gestore.errore = ErroriIntegrazione.ERRORE_416_CORRELAZIONE_APPLICATIVA_RICHIESTA_ERRORE.
					getErrore416_CorrelazioneApplicativaRichiesta("dati per l'identificazione dell'id di correlazione non presenti");
			throw new GestoreMessaggiException(gestore.errore.getDescrizione(gestore.protocolFactory));
		}
		if(idBustaRequest==null){
			gestore.errore = ErroriIntegrazione.ERRORE_416_CORRELAZIONE_APPLICATIVA_RICHIESTA_ERRORE.
					getErrore416_CorrelazioneApplicativaRichiesta("identificativo non presente tra i parametri di invocazione");
			throw new GestoreMessaggiException(gestore.errore.getDescrizione(gestore.protocolFactory));
		}
		if(idApplicativo==null){
			gestore.errore = ErroriIntegrazione.ERRORE_416_CORRELAZIONE_APPLICATIVA_RICHIESTA_ERRORE.
					getErrore416_CorrelazioneApplicativaRichiesta("identificativo applicativo non presente tra i parametri di invocazione");
			throw new GestoreMessaggiException(gestore.errore.getDescrizione(gestore.protocolFactory));
		}

		Timestamp scadenzaCorrelazioneT = null;
		if(correlazioneApplicativa.getScadenza()!=null){
			try{
				long scadenza = Long.parseLong(correlazioneApplicativa.getScadenza());
				scadenzaCorrelazioneT = new Timestamp(DateManager.getTimeMillis()+(scadenza*60*1000));
			}catch(Exception e){
				gestore.errore = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
						get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_529_CORRELAZIONE_APPLICATIVA_RICHIESTA_NON_RIUSCITA);
				throw new GestoreMessaggiException("Scadenza impostata per la correlazione applicativa non corretta: "+e.getMessage(),e);
			}
		}
		// E' stata introdotta l'ora di registrazione per gestire le scadenze null
//		else{
//			scadenzaCorrelazioneT = new Timestamp(DateManager.getTimeMillis()+(this.scadenzaDefault*60*1000));
//		}

		/** Fase di verifica dell'id di correlazione con l'id */
		PreparedStatement pstmtInsert = null;
		try{
			StateMessage stateMSG = (StateMessage)gestore.state;
			Connection connectionDB = stateMSG.getConnectionDB();

			// nuova correlazione
			StringBuilder queryInsert = new StringBuilder();
			queryInsert.append("INSERT INTO "+GestoreCorrelazioneApplicativa.CORRELAZIONE_APPLICATIVA);
			queryInsert.append(" (ID_MESSAGGIO,ID_APPLICATIVO,SERVIZIO_APPLICATIVO,TIPO_MITTENTE,MITTENTE,TIPO_DESTINATARIO,DESTINATARIO,TIPO_SERVIZIO,SERVIZIO,VERSIONE_SERVIZIO,AZIONE ");
			if(scadenzaCorrelazioneT!=null){
				queryInsert.append(",SCADENZA");
			}
			queryInsert.append(") VALUES (?,?,?,?,?,?,?,?,?,?,?");
			if(scadenzaCorrelazioneT!=null){
				queryInsert.append(",?");
			}
			queryInsert.append(")");
			pstmtInsert = connectionDB.prepareStatement(queryInsert.toString());
			int index = 1;
			pstmtInsert.setString(index++,idBustaRequest);
			pstmtInsert.setString(index++,idApplicativo);
			pstmtInsert.setString(index++,gestore.servizioApplicativo);
			pstmtInsert.setString(index++,gestore.soggettoFruitore.getTipo());
			pstmtInsert.setString(index++,gestore.soggettoFruitore.getNome());
			pstmtInsert.setString(index++,gestore.idServizio.getSoggettoErogatore().getTipo());
			pstmtInsert.setString(index++,gestore.idServizio.getSoggettoErogatore().getNome());
			pstmtInsert.setString(index++,gestore.idServizio.getTipo());
			pstmtInsert.setString(index++,gestore.idServizio.getNome());
			pstmtInsert.setInt(index++,gestore.idServizio.getVersione());
			pstmtInsert.setString(index++,gestore.idServizio.getAzione());
			if(scadenzaCorrelazioneT!=null){
				pstmtInsert.setTimestamp(index++,scadenzaCorrelazioneT);
			}

			//	Add PreparedStatement
			String valoreAzione = "N.D.";
			if( (gestore.idServizio.getAzione()!=null) && ("".equals(gestore.idServizio.getAzione())==false) ){
				valoreAzione = gestore.idServizio.getAzione();
			}
			stateMSG.getPreparedStatement().put("INSERT CorrelazioneApplicativa_"+idBustaRequest+"_"+idApplicativo+"_"+gestore.soggettoFruitore.getTipo()+gestore.soggettoFruitore.getNome()+
					"_"+gestore.idServizio.getSoggettoErogatore().getTipo()+gestore.idServizio.getSoggettoErogatore().getNome()+"_"+
					gestore.idServizio.getTipo()+gestore.idServizio.getNome()+":"+gestore.idServizio.getVersione()+"_"+valoreAzione,pstmtInsert);

		}catch(Exception er){
			gestore.errore = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
					get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_529_CORRELAZIONE_APPLICATIVA_RICHIESTA_NON_RIUSCITA);
			gestore.log.error("Correlazione IDApplicativo - ID non riuscita: "+er.getMessage());
			throw new GestoreMessaggiException("Correlazione IDApplicativo - ID non riuscita: "+er.getMessage(),er);
		}

	}

}