OutRequestHandler.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.handlers.transazioni;
import java.util.Date;
import org.apache.commons.lang.StringUtils;
import org.openspcoop2.core.constants.Costanti;
import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
import org.openspcoop2.pdd.core.CostantiPdD;
import org.openspcoop2.pdd.core.handlers.HandlerException;
import org.openspcoop2.pdd.core.handlers.OutRequestContext;
import org.openspcoop2.pdd.core.transazioni.OutRequestStatefulObject;
import org.openspcoop2.pdd.core.transazioni.RepositoryGestioneStateful;
import org.openspcoop2.pdd.core.transazioni.Transaction;
import org.openspcoop2.pdd.core.transazioni.TransactionContext;
import org.openspcoop2.pdd.core.transazioni.TransactionDeletedException;
import org.openspcoop2.pdd.core.transazioni.TransactionNotExistsException;
import org.openspcoop2.pdd.core.transazioni.TransactionStatefulNotSupportedException;
import org.openspcoop2.utils.transport.http.HttpRequestMethod;
/**
* OutRequestHandler
*
* @author Poli Andrea (poli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class OutRequestHandler extends LastPositionHandler implements org.openspcoop2.pdd.core.handlers.OutRequestHandler{
@Override
public void invoke(OutRequestContext context) throws HandlerException {
OpenSPCoop2Properties op2Properties = OpenSPCoop2Properties.getInstance();
if(op2Properties.isTransazioniEnabled()==false) {
return;
}
String idTransazione = (String) context.getPddContext().getObject(Costanti.ID_TRANSAZIONE);
//System.out.println("------------- OutRequestHandler ("+idTransazione+")("+context.getTipoPorta().getTipo()+") -------------------");
if(context.getTransazioneApplicativoServer()!=null) {
try{
context.getTransazioneApplicativoServer().setDataUscitaRichiesta(context.getDataElaborazioneMessaggio());
if(context.getConnettore()!=null){
context.getTransazioneApplicativoServer().setLocationConnettore(context.getConnettore().getLocation());
}
}catch(Exception e){
throw new HandlerException("Errore durante il processamento delle informazioni relative alla consegna per l'applicativo '"+context.getTransazioneApplicativoServer().getServizioApplicativoErogatore()+"': "+e.getMessage(),e);
}
}
else {
//if(context.getIntegrazione()!=null)
// System.out.println("GESTIONE STATELESS OutRequestHandler ["+context.getIntegrazione().isGestioneStateless()+"] ["+context.getTipoPorta()+"]");
if(context.getIntegrazione()!=null &&
context.getIntegrazione().isGestioneStateless()!=null &&
!context.getIntegrazione().isGestioneStateless()){
if(op2Properties.isTransazioniStatefulEnabled()==false){
throw new HandlerException("Gestione delle transazioni stateful non abilita");
}
}
boolean gestioneStateful = false;
Transaction tr = null;
try{
tr = TransactionContext.getTransaction(idTransazione);
}catch(TransactionNotExistsException e){
gestioneStateful = true;
}
try{
OutRequestStatefulObject sObject = null;
if(tr==null && gestioneStateful){
sObject = new OutRequestStatefulObject();
//System.out.println("@@@@@REPOSITORY@@@@@ OutRequestHandler ID TRANSAZIONE ["+idTransazione+"] GESTIONE COMPLETA");
Date dataElaborazioneMessaggio = context.getDataElaborazioneMessaggio();
// INEFFICIENTE: RepositoryGestioneStateful.addDataUscitaRichiesta(idTransazione, dataElaborazioneMessaggio);
sObject.setDataUscitaRichiesta(dataElaborazioneMessaggio);
if(context.getProtocollo()!=null){
// INEFFICIENTE: RepositoryGestioneStateful.addScenarioCooperazione(idTransazione, context.getProtocollo().getScenarioCooperazione());
sObject.setScenarioCooperazione(context.getProtocollo().getScenarioCooperazione());
}
if(context.getConnettore()!=null){
// INEFFICIENTE: RepositoryGestioneStateful.addTipoConnettore(idTransazione, context.getConnettore().getTipoConnettore());
sObject.setTipoConnettore(context.getConnettore().getTipoConnettore());
// INEFFICIENTE: RepositoryGestioneStateful.addLocation(idTransazione, context.getConnettore().getLocation());
sObject.setLocation(context.getConnettore().getLocation());
}
if(context.getIntegrazione()!=null){
// INEFFICIENTE: RepositoryGestioneStateful.addServizioApplicativoErogatore(context.getIntegrazione().getServizioApplicativoErogatore(i));
for (int i = 0; i < context.getIntegrazione().sizeServiziApplicativiErogatori(); i++) {
sObject.addServizioApplicativoErogatore(context.getIntegrazione().getServizioApplicativoErogatore(i));
}
}
}
else{
if(tr==null) {
throw new HandlerException("Transaction is null");
}
Date dataElaborazioneMessaggio = context.getDataElaborazioneMessaggio();
try{
tr.setDataUscitaRichiesta(dataElaborazioneMessaggio);
//System.out.println("SET DATA ("+dataElaborazioneMessaggio.toString()+")");
}catch(TransactionDeletedException e){
//System.out.println("@@@@@REPOSITORY@@@@@ OutRequestHandler SET DATA ("+dataElaborazioneMessaggio.toString()+")");
// INEFFICIENTE: RepositoryGestioneStateful.addDataUscitaRichiesta(idTransazione, dataElaborazioneMessaggio);
if(sObject==null)
sObject = new OutRequestStatefulObject();
sObject.setDataUscitaRichiesta(dataElaborazioneMessaggio);
}
try{
if(context.getProtocollo()!=null){
//System.out.println("SET SCENARIO ["+context.getProtocollo().getScenarioCooperazione()+"]");
tr.setScenarioCooperazione(context.getProtocollo().getScenarioCooperazione());
}
}catch(TransactionDeletedException e){
//System.out.println("@@@@@REPOSITORY@@@@@ OutRequestHandler SET SCENARIO ["+context.getProtocollo().getScenarioCooperazione()+"]");
// INEFFICIENTE: RepositoryGestioneStateful.addScenarioCooperazione(idTransazione, context.getProtocollo().getScenarioCooperazione());
if(sObject==null)
sObject = new OutRequestStatefulObject();
sObject.setScenarioCooperazione(context.getProtocollo().getScenarioCooperazione());
}
if(context.getConnettore()!=null){
try{
//System.out.println("SET TIPO CONNETTORE ["+context.getConnettore().getTipoConnettore()+"]");
tr.setTipoConnettore(context.getConnettore().getTipoConnettore());
}catch(TransactionDeletedException e){
//System.out.println("@@@@@REPOSITORY@@@@@ OutRequestHandler SET TIPO CONNETTORE ["+context.getConnettore().getTipoConnettore()+"]");
// INEFFICIENTE: RepositoryGestioneStateful.addTipoConnettore(idTransazione, context.getConnettore().getTipoConnettore());
if(sObject==null)
sObject = new OutRequestStatefulObject();
sObject.setTipoConnettore(context.getConnettore().getTipoConnettore());
}
try{
//System.out.println("SET LOCATION ["+context.getConnettore().getLocation()+"]");
String connettoreRequestUrl = null;
String connettoreRequestMethod = null;
if(context.getPddContext()!=null) {
if(context.getPddContext().containsKey(CostantiPdD.CONNETTORE_REQUEST_URL)) {
connettoreRequestUrl = (String) context.getPddContext().getObject(CostantiPdD.CONNETTORE_REQUEST_URL);
}
if(context.getPddContext().containsKey(CostantiPdD.CONNETTORE_REQUEST_METHOD)) {
Object o = context.getPddContext().getObject(CostantiPdD.CONNETTORE_REQUEST_METHOD);
if(o instanceof String) {
connettoreRequestMethod = (String) o;
}
else if(o instanceof HttpRequestMethod) {
HttpRequestMethod oConnettoreRequestMethod = (HttpRequestMethod) o;
connettoreRequestMethod = oConnettoreRequestMethod.name();
}
}
}
if(!StringUtils.isEmpty(connettoreRequestUrl) && !StringUtils.isEmpty(connettoreRequestMethod)) {
tr.setLocation(CostantiPdD.getConnettoreRequest(connettoreRequestUrl, connettoreRequestMethod));
}
else {
tr.setLocation(context.getConnettore().getLocation());
}
}catch(TransactionDeletedException e){
//System.out.println("@@@@@REPOSITORY@@@@@ OutRequestHandler SET LOCATION ["+context.getConnettore().getLocation()+"]");
// INEFFICIENTE: RepositoryGestioneStateful.addLocation(idTransazione, context.getConnettore().getLocation());
if(sObject==null)
sObject = new OutRequestStatefulObject();
sObject.setLocation(context.getConnettore().getLocation());
}
}
if(context.getIntegrazione()!=null){
for (int i = 0; i < context.getIntegrazione().sizeServiziApplicativiErogatori(); i++) {
try{
// System.out.println("ADD SERVIZIO APPLICATIVO EROGATORE ["+context.getConnettore().getLocation()+"]");
tr.addServizioApplicativoErogatore(context.getIntegrazione().getServizioApplicativoErogatore(i));
}catch(TransactionDeletedException e){
//System.out.println("@@@@@REPOSITORY@@@@@ OutRequestHandler ADD SERVIZIO APPLICATIVO EROGATORE ["+context.getIntegrazione().getServizioApplicativoErogatore(i)+"]");
// INEFFICIENTE: RepositoryGestioneStateful.addServizioApplicativoErogatore(context.getIntegrazione().getServizioApplicativoErogatore(i));
if(sObject==null)
sObject = new OutRequestStatefulObject();
sObject.addServizioApplicativoErogatore(context.getIntegrazione().getServizioApplicativoErogatore(i));
}
}
}
}
if(sObject!=null){
// Gestione stateful
RepositoryGestioneStateful.addOutRequestStatefulObject(context.getProtocolFactory().getProtocol(),idTransazione, sObject);
}
}catch(TransactionStatefulNotSupportedException e){
throw new HandlerException("Errore durante il processamento dell'handler: "+e.getMessage(),e);
}
}
}
}