ConnettoreMsg.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.connettori;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.openspcoop2.core.config.InvocazioneCredenziali;
import org.openspcoop2.core.config.Property;
import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
import org.openspcoop2.core.constants.CostantiConnettori;
import org.openspcoop2.core.id.IDAccordo;
import org.openspcoop2.core.id.IDPortaApplicativa;
import org.openspcoop2.core.transazioni.TransazioneApplicativoServer;
import org.openspcoop2.message.OpenSPCoop2Message;
import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
import org.openspcoop2.pdd.config.ForwardProxy;
import org.openspcoop2.pdd.core.PdDContext;
import org.openspcoop2.pdd.core.controllo_traffico.PolicyTimeoutConfig;
import org.openspcoop2.pdd.core.handlers.OutRequestContext;
import org.openspcoop2.pdd.core.token.PolicyNegoziazioneToken;
import org.openspcoop2.pdd.logger.MsgDiagnostico;
import org.openspcoop2.protocol.sdk.Busta;
import org.openspcoop2.protocol.sdk.BustaRawContent;
import org.openspcoop2.protocol.sdk.IProtocolFactory;
import org.openspcoop2.protocol.sdk.ProtocolException;
import org.openspcoop2.protocol.sdk.ProtocolMessage;
import org.openspcoop2.protocol.sdk.builder.ProprietaManifestAttachments;
import org.openspcoop2.protocol.sdk.constants.FaseSbustamento;
import org.openspcoop2.protocol.sdk.constants.RuoloMessaggio;
import org.openspcoop2.protocol.sdk.state.IState;
import org.openspcoop2.protocol.sdk.state.RequestInfo;
import org.openspcoop2.utils.transport.TransportRequestContext;
/**
* Classe utilizzata per rappresentare le informazioni utilizzata da un generico connettore.
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class ConnettoreMsg {
/* ******** F I E L D S P R I V A T I ******** */
/** Tipo di Connettore */
private String tipoConnector;
/** Messaggio da spedire */
private OpenSPCoop2Message request;
/** Proprieta' del connettore */
private java.util.Map<String,String> properties;
/** Errore generato con un prefisso del connettore */
protected boolean generateErrorWithConnectorPrefix = true;
/** Indicazione su di un eventuale sbustamento SOAP */
private boolean sbustamentoSoap;
/** Indicazione su di un eventuale sbustamento delle informazioni di protocollo */
private boolean sbustamentoInformazioniProtocollo;
/** Proprieta' di trasporto che deve utilizzare il connettore */
private Map<String, List<String>> propertiesTrasporto;
/** Proprieta' urlBased che deve utilizzare il connettore */
private Map<String, List<String>> propertiesUrlBased;
/** Tipo di Autenticazione */
private String tipoAutenticazione;
/** Credenziali per l'autenticazione */
private InvocazioneCredenziali credenziali;
/** Busta */
private Busta busta;
/** Identificativo Modulo che utilizza il connettore */
private String idModulo;
/** ProtocolFactory */
private IProtocolFactory<?> protocolFactory;
/** Attributi per lo sbustamento del protocollo */
private boolean gestioneManifest = false;
private ProprietaManifestAttachments proprietaManifestAttachments = null;
/** Eventuale header sbustato contenente le informazioni di protocollo */
private BustaRawContent<?> soapProtocolInfo = null;
/** Informazione sulla modalita LocalForward */
private boolean localForward = false;
/** Indicazione se il messaggio in consegna riguarda una richiesta o una risposta
* Il set di questo field, potrĂ essere usato per la risposta di una invocazione sincrona con consegna su I.M. */
private RuoloMessaggio ruoloMessaggio = RuoloMessaggio.RICHIESTA;
/** Policy Token */
private PolicyNegoziazioneToken policyNegoziazioneToken;
private PolicyTimeoutConfig policyTimeoutConfig;
/** OutRequestContext */
private OutRequestContext outRequestContext;
/** MessaggioDiagnostico */
private MsgDiagnostico msgDiagnostico;
/** IState */
private IState state;
private TransazioneApplicativoServer transazioneApplicativoServer;
private IDPortaApplicativa idPortaApplicativa;
private Date dataConsegnaTransazioneApplicativoServer;
private ForwardProxy forwardProxy;
private IDAccordo idAccordo;
private String urlInvocazionePorta;
private Boolean forceSendContent = null;
/* ******** C O S T R U T T O R E ******** */
/**
* Costruttore.
*
*
*/
public ConnettoreMsg(){}
/**
* Costruttore.
*
* @param type Tipo di Connettore
* @param r Messaggio di Richiesta
* @param p Proprieta' del Connettore
*
*/
public ConnettoreMsg(String type,OpenSPCoop2Message r,
Property[] p){
java.util.Map<String,String> pr = new java.util.HashMap<>();
if(p!=null){
for(int i=0; i<p.length; i++){
if(p[i]!=null){
pr.put(p[i].getNome(),p[i].getValore());
}
}
}
this.tipoConnector = type;
this.request = r;
this.properties = pr;
}
/**
* Costruttore.
*
* @param type Tipo di Connettore
* @param r Messaggio di Richiesta
* @param p Proprieta' del Connettore
*
*/
public ConnettoreMsg(String type,OpenSPCoop2Message r,
java.util.Map<String,String> p){
this(type,r,p,false,null,null,true);
}
/**
* Costruttore.
*
* @param type Tipo di Connettore
* @param r Messaggio di Richiesta
* @param p Proprieta' del Connettore
* @param sb Indicazione su di un eventuale sbustamento SOAP
* @param tipoAuth Tipo di Autenticazione associata al connettore
* @param cr Credenziali Associate al connettore
*
*/
public ConnettoreMsg(String type,OpenSPCoop2Message r,
Property[] p,boolean sb,
String tipoAuth,InvocazioneCredenziali cr,
boolean isRichiesta){
this(type,r,new java.util.HashMap<>() ,sb,tipoAuth,cr,isRichiesta);
java.util.Map<String,String> pr = new java.util.HashMap<>();
if(p!=null){
for(int i=0; i<p.length; i++){
if(p[i]!=null){
pr.put(p[i].getNome(),p[i].getValore());
}
}
}
this.properties = pr;
}
/**
* Costruttore.
*
* @param type Tipo di Connettore
* @param r Messaggio di Richiesta
* @param p Proprieta' del Connettore
* @param sb Indicazione su di un eventuale sbustamento SOAP
* @param tipoAuth Tipo di Autenticazione associata al connettore
* @param cr Credenziali Associate al connettore
*
*/
public ConnettoreMsg(String type,OpenSPCoop2Message r,
java.util.Map<String,String> p,boolean sb,
String tipoAuth,InvocazioneCredenziali cr,
boolean isRichiesta){
this.tipoConnector = type;
this.request = r;
this.properties = p;
this.sbustamentoSoap = sb;
this.tipoAutenticazione = tipoAuth;
this.credenziali = cr;
}
/* ******** S E T T E R ******** */
/**
* Imposta il tipo di connettore.
*
* @param tipo Tipo di Connettore.
*
*/
public void setTipoConnettore(String tipo) {
this.tipoConnector = tipo;
}
/**
* Imposta il messaggio da spedire.
*
* @param r Messaggio da Spedire
*
*/
public void setRequestMessage(OpenSPCoop2Message r) {
this.request = r;
}
/**
* Imposta le proprieta' del connettore.
*
* @param p Proprieta' del Connettore
*
*/
public void setConnectorProperties(java.util.Map<String,String> p) {
this.properties = p;
}
/**
* Imposta l'indicazione su di un eventuale sbustamento SOAP.
*
* @param sb indicazione su di un eventuale sbustamento SOAP.
*
*/
public void setSbustamentoSOAP(boolean sb) {
this.sbustamentoSoap = sb;
}
/**
* Imposta il tipo di autenticazione associato al connettore
*
* @param tipoAuth tipo di autenticazione.
*
*/
public void setAutenticazione(String tipoAuth){
this.tipoAutenticazione = tipoAuth;
}
/**
* Imposta le credenziali associate all'autenticazione utilizzata dal connettore
*
* @param cr Credenziali
*
*/
public void setCredenziali(InvocazioneCredenziali cr){
this.credenziali = cr;
}
public void setGenerateErrorWithConnectorPrefix(boolean generateErrorWithConnectorPrefix) {
this.generateErrorWithConnectorPrefix = generateErrorWithConnectorPrefix;
}
public void setIdAccordo(IDAccordo id) {
this.idAccordo = id;
}
public void setUrlInvocazionePorta(String urlInvocazionePorta) {
this.urlInvocazionePorta = urlInvocazionePorta;
}
public void forceSendContent() {
this.forceSendContent = true;
}
/* ******** G E T T E R ******** */
/**
* Ritorna il tipo di connettore.
*
* @return Tipo di Connettore.
*
*/
public String getTipoConnettore() {
return this.tipoConnector;
}
/**
* Ritorna il messaggio da spedire.
*
* @return Messaggio da Spedire
*
*/
private boolean sbustamentoProtocolInfoEffettuato = false;
private boolean checkPresenzaHeaderPrimaSbustamento = false;
public void setCheckPresenzaHeaderPrimaSbustamento(boolean checkPresenzaHeaderPrimaSbustamento) {
this.checkPresenzaHeaderPrimaSbustamento = checkPresenzaHeaderPrimaSbustamento;
}
public OpenSPCoop2Message getRequestMessage(RequestInfo requestInfo, PdDContext pddContext) throws ProtocolException {
if(!this.localForward && this.sbustamentoInformazioniProtocollo && !this.sbustamentoProtocolInfoEffettuato){
boolean protocolloPresente = true;
if(this.checkPresenzaHeaderPrimaSbustamento){
try{
protocolloPresente = this.protocolFactory.createValidazioneSintattica(this.state).
verifyProtocolPresence(this.outRequestContext.getTipoPorta(), this.busta.getProfiloDiCollaborazione(), this.ruoloMessaggio, this.request);
}catch(Exception e){}
}
if(protocolloPresente){
org.openspcoop2.protocol.engine.builder.Sbustamento sbustatore =
new org.openspcoop2.protocol.engine.builder.Sbustamento(this.protocolFactory,this.state);
ProtocolMessage protocolMessage = sbustatore.sbustamento(this.request,pddContext,
this.busta,
this.ruoloMessaggio,this.gestioneManifest,this.proprietaManifestAttachments,
FaseSbustamento.PRE_CONSEGNA_RICHIESTA, requestInfo);
if(protocolMessage!=null) {
this.soapProtocolInfo = protocolMessage.getBustaRawContent();
this.request = protocolMessage.getMessage(); // updated
}
this.sbustamentoProtocolInfoEffettuato = true;
}
}
return this.request;
}
public TransportRequestContext getTransportRequestContext() {
if(this.request!=null) {
return this.request.getTransportRequestContext();
}
return null;
}
/**
* Ritorna le proprieta' del connettore.
*
* @return Proprieta' del Connettore
*
*/
public java.util.Map<String,String> getConnectorProperties() {
return this.properties;
}
/**
* Ritorna l'indicazione su di un eventuale sbustamento SOAP.
*
* @return indicazione su di un eventuale sbustamento SOAP.
*
*/
public boolean isSbustamentoSOAP() {
return this.sbustamentoSoap;
}
/**
* Ritorna il tipo di autenticazione associato al connettore
*
* @return tipo di autenticazione.
*
*/
public String getAutenticazione(){
return this.tipoAutenticazione;
}
/**
* Ritorna le credenziali associate all'autenticazione utilizzata dal connettore
*
* @return Credenziali
*
*/
public InvocazioneCredenziali getCredenziali(){
return this.credenziali;
}
/**
* @return the propertiesTrasporto
*/
public Map<String, List<String>> getPropertiesTrasporto() {
return this.propertiesTrasporto;
}
/**
* @return the propertiesUrlBased
*/
public Map<String, List<String>> getPropertiesUrlBased() {
return this.propertiesUrlBased;
}
/**
* @param propertiesTrasporto the propertiesTrasporto to set
*/
public void setPropertiesTrasporto(Map<String, List<String>> propertiesTrasporto) {
this.propertiesTrasporto = propertiesTrasporto;
}
/**
* @param propertiesUrlBased the propertiesUrlBased to set
*/
public void setPropertiesUrlBased(Map<String, List<String>> propertiesUrlBased) {
this.propertiesUrlBased = propertiesUrlBased;
}
/**
* @return the busta
*/
public Busta getBusta() {
return this.busta;
}
/**
* @param busta the busta to set
*/
public void setBusta(Busta busta) {
this.busta = busta;
}
public String getIdModulo() {
return this.idModulo;
}
public void setIdModulo(String idModulo) {
this.idModulo = idModulo;
}
public boolean isSbustamentoInformazioniProtocollo() {
return this.sbustamentoInformazioniProtocollo;
}
public void setSbustamentoInformazioniProtocollo(
boolean sbustamentoInformazioniProtocollo) {
this.sbustamentoInformazioniProtocollo = sbustamentoInformazioniProtocollo;
}
public RuoloMessaggio getRuoloMessaggio() {
return this.ruoloMessaggio;
}
public void setRuoloMessaggio(RuoloMessaggio ruoloMessaggio) {
this.ruoloMessaggio = ruoloMessaggio;
}
public void setProtocolFactory(IProtocolFactory<?> protocolFactory) {
this.protocolFactory = protocolFactory;
}
public void setGestioneManifest(boolean gestioneManifest) {
this.gestioneManifest = gestioneManifest;
}
public void setProprietaManifestAttachments(
ProprietaManifestAttachments proprietaManifestAttachments) {
this.proprietaManifestAttachments = proprietaManifestAttachments;
}
public BustaRawContent<?> getSoapProtocolInfo() {
return this.soapProtocolInfo;
}
public boolean isLocalForward() {
return this.localForward;
}
public void setLocalForward(boolean localForward) {
this.localForward = localForward;
}
public OutRequestContext getOutRequestContext() {
return this.outRequestContext;
}
public void setOutRequestContext(OutRequestContext outRequestContext) {
this.outRequestContext = outRequestContext;
}
public MsgDiagnostico getMsgDiagnostico() {
return this.msgDiagnostico;
}
public void setMsgDiagnostico(MsgDiagnostico msgDiagnostico) {
this.msgDiagnostico = msgDiagnostico;
}
public IState getState() {
return this.state;
}
public void setState(IState state) {
this.state = state;
}
public boolean isGenerateErrorWithConnectorPrefix() {
return this.generateErrorWithConnectorPrefix;
}
public PolicyNegoziazioneToken getPolicyNegoziazioneToken() {
return this.policyNegoziazioneToken;
}
public void setPolicyNegoziazioneToken(PolicyNegoziazioneToken policyNegoziazioneToken) {
this.policyNegoziazioneToken = policyNegoziazioneToken;
}
public void initPolicyGestioneToken(ConfigurazionePdDManager configPdDManager, RequestInfo requestInfo) throws DriverConfigurazioneException, DriverConfigurazioneNotFound {
if(this.properties!=null && !this.properties.isEmpty()) {
Iterator<String> en = this.properties.keySet().iterator();
while (en.hasNext()) {
String propertyName = en.next();
if(CostantiConnettori.CONNETTORE_TOKEN_POLICY.equals(propertyName)) {
String tokenPolicy = this.properties.get(propertyName);
if(tokenPolicy!=null && !"".equals(tokenPolicy)) {
boolean forceNoCache = true;
this.policyNegoziazioneToken = configPdDManager.getPolicyNegoziazioneToken(!forceNoCache, tokenPolicy, requestInfo);
}
}
}
}
}
public PolicyTimeoutConfig getPolicyTimeoutConfig() {
return this.policyTimeoutConfig;
}
public void setPolicyTimeoutConfig(PolicyTimeoutConfig policyConfig) {
this.policyTimeoutConfig = policyConfig;
}
public TransazioneApplicativoServer getTransazioneApplicativoServer() {
return this.transazioneApplicativoServer;
}
public void setTransazioneApplicativoServer(TransazioneApplicativoServer transazioneApplicativoServer) {
this.transazioneApplicativoServer = transazioneApplicativoServer;
}
public IDPortaApplicativa getIdPortaApplicativa() {
return this.idPortaApplicativa;
}
public void setIdPortaApplicativa(IDPortaApplicativa idPortaApplicativa) {
this.idPortaApplicativa = idPortaApplicativa;
}
public Date getDataConsegnaTransazioneApplicativoServer() {
return this.dataConsegnaTransazioneApplicativoServer;
}
public void setDataConsegnaTransazioneApplicativoServer(Date dataConsegnaTransazioneApplicativoServer) {
this.dataConsegnaTransazioneApplicativoServer = dataConsegnaTransazioneApplicativoServer;
}
public ForwardProxy getForwardProxy() {
return this.forwardProxy;
}
public void setForwardProxy(ForwardProxy forwardProxy) {
this.forwardProxy = forwardProxy;
}
public IDAccordo getIdAccordo() {
return this.idAccordo;
}
public String getUrlInvocazionePorta() {
return this.urlInvocazionePorta;
}
public boolean isForceSendContent() {
return this.forceSendContent!=null ? this.forceSendContent.booleanValue() : false;
}
}