IdentificazionePortaDelegata.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.protocol.basic.registry;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import org.openspcoop2.core.config.PortaDelegata;
- import org.openspcoop2.core.config.constants.PortaDelegataAzioneIdentificazione;
- import org.openspcoop2.core.config.constants.StatoFunzionalita;
- import org.openspcoop2.core.id.IDPortaDelegata;
- import org.openspcoop2.protocol.registry.RegistroServiziManager;
- import org.openspcoop2.protocol.sdk.IProtocolFactory;
- 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.registry.ProtocolFiltroRicercaPorteDelegate;
- import org.openspcoop2.protocol.sdk.registry.IConfigIntegrationReader;
- import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
- import org.openspcoop2.protocol.sdk.registry.RegistryException;
- import org.openspcoop2.protocol.sdk.registry.RegistryNotFound;
- import org.openspcoop2.protocol.sdk.state.RequestInfo;
- import org.openspcoop2.utils.BooleanNullable;
- import org.openspcoop2.utils.transport.TransportRequestContext;
- import org.slf4j.Logger;
- /**
- * Classe utilizzabile per identificare la porta delegata richiesta.
- *
- * @author Andrea Poli (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class IdentificazionePortaDelegata extends AbstractIdentificazionePorta {
- /* ---- Porta Delegata ---- */
- private PortaDelegata pd = null;
-
- /* ---- Porta Delegata (Azione specifica) ---- */
- private HashMap<String, PortaDelegata> pdDelegatedByAction = new HashMap<String, PortaDelegata>();
- private HashMap<String, IDPortaDelegata> idPdDelegatedByAction = new HashMap<String, IDPortaDelegata>();
-
-
- /**
- * Costruttore
- *
- * @param urlProtocolContext Parametri identificativi della porta delegata.
- * @throws ProtocolException
- *
- */
- public IdentificazionePortaDelegata(TransportRequestContext urlProtocolContext, Logger log,
- boolean portaUrlBased, IRegistryReader registryReader, IConfigIntegrationReader configIntegrationReader,
- IProtocolFactory<?> protocolFactory) throws ProtocolException {
- super(urlProtocolContext, log, portaUrlBased, registryReader, configIntegrationReader, protocolFactory);
- }
- /*public IdentificazionePortaDelegata(Logger log, IProtocolFactory<?> protocolFactory, org.openspcoop2.protocol.sdk.state.IState state,
- PortaDelegata pd)
- throws ProtocolException {
- super(log, protocolFactory, state);
- this.pd = pd;
- IDPortaDelegata idPD = new IDPortaDelegata();
- idPD.setNome(this.pd.getNome());
- this.identificativoPorta = idPD;
- }*/
- public IdentificazionePortaDelegata(Logger log, IProtocolFactory<?> protocolFactory,
- RegistroServiziManager registroServiziManager, Object configurazioneManager, RequestInfo requestInfo,
- PortaDelegata pd)
- throws ProtocolException {
- super(log, protocolFactory, registroServiziManager, configurazioneManager, requestInfo);
- this.pd = pd;
- IDPortaDelegata idPD = new IDPortaDelegata();
- idPD.setNome(this.pd.getNome());
- this.identificativoPorta = idPD;
- }
- public IdentificazionePortaDelegata(Logger log, IProtocolFactory<?> protocolFactory,
- IRegistryReader registryReader, IConfigIntegrationReader configIntegrationReader, RequestInfo requestInfo,
- PortaDelegata pd)
- throws ProtocolException {
- super(log, protocolFactory, registryReader, configIntegrationReader, requestInfo);
- this.pd = pd;
- IDPortaDelegata idPD = new IDPortaDelegata();
- idPD.setNome(this.pd.getNome());
- this.identificativoPorta = idPD;
- }
- @Override
- protected Object getIDPorta(String porta) throws RegistryNotFound, RegistryException{
- return this.configIntegrationReader.getIdPortaDelegata(porta, this.protocolFactory);
- }
-
- @Override
- protected String enrichPorta(String porta) throws RegistryException{
- try {
- return this.porteNamingUtils.enrichPD(porta);
- }catch(Exception e) {
- throw new RegistryException(e.getMessage(),e);
- }
- }
-
- /**
- * Avvia il processo di identificazione.
- *
- * @return true in caso di identificazione con successo, false altrimenti.
- *
- */
- @Override
- public boolean process() {
- try{
- if(super.process()==false){
- return false;
- }
-
- IDPortaDelegata idPD = this.getIDPortaDelegata();
-
- // Get Porta Delegata
- try{
- this.pd = this.configIntegrationReader.getPortaDelegata(idPD);
- }catch(RegistryNotFound notFound){
- this.erroreIntegrazione =
- ErroriIntegrazione.ERRORE_401_PORTA_INESISTENTE.
- getErrore401_PortaInesistente(notFound.getMessage(),idPD.getNome(),this.urlCompleta);
- return false;
- }
-
- // Verifico che l'azione non sia in modalità delegatedBy
- if(this.pd.getAzione()!=null && PortaDelegataAzioneIdentificazione.DELEGATED_BY.equals(this.pd.getAzione().getIdentificazione())) {
- this.erroreIntegrazione =
- ErroriIntegrazione.ERRORE_441_PORTA_NON_INVOCABILE_DIRETTAMENTE.
- getErrore441_PortaNonInvocabileDirettamente(idPD.getNome(),this.urlCompleta);
- return false;
- }
- return true;
- }catch(Exception e){
- this.log.error("Identificazione porta delegata non riuscita location["+this.location+"] urlInvocazione["+this.urlCompleta+"]",e);
- try{
- this.erroreIntegrazione = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_502_IDENTIFICAZIONE_PORTA);
- }catch(Exception eError){
- throw new RuntimeException(eError.getMessage(), eError);
- }
- return false;
- }
- }
- public IDPortaDelegata getIDPortaDelegata(){
- return (IDPortaDelegata) this.identificativoPorta;
- }
- public PortaDelegata getPortaDelegata() {
- return this.pd;
- }
- /**
- * Avvia il processo di identificazione della porta per l'azione specifica.
- *
- * @return true in caso di identificazione con successo, false altrimenti.
- *
- */
- public boolean find(String action) {
- try {
-
- if(this.pd.getRicercaPortaAzioneDelegata()!=null && StatoFunzionalita.ABILITATO.equals(this.pd.getRicercaPortaAzioneDelegata())) {
-
- ProtocolFiltroRicercaPorteDelegate filtroPD = new ProtocolFiltroRicercaPorteDelegate();
- filtroPD.setNomePortaDelegante(getIDPortaDelegata().getNome());
- filtroPD.setAzione(action);
- List<IDPortaDelegata> list = null;
- IDPortaDelegata idPD = null;
- boolean useRequestInfo = false;
- boolean addRequestInfo = false;
- try {
- useRequestInfo = this.requestInfo!=null && this.requestInfo.getRequestConfig()!=null;
- if(useRequestInfo) {
- BooleanNullable nullConditionsList = BooleanNullable.NULL();
- list = this.requestInfo.getRequestConfig().getPorteDelegateByFiltroRicerca(filtroPD, nullConditionsList);
- if(nullConditionsList==null || nullConditionsList.getValue()==null) {
- list = null;
- }
- }
-
- if(list==null) {
- addRequestInfo = true;
- list = this.configIntegrationReader.findIdPorteDelegate(filtroPD);
- }
-
- }catch(RegistryNotFound notFound) {
- list=new ArrayList<>();
- }
-
- if(useRequestInfo && addRequestInfo) {
- this.requestInfo.getRequestConfig().addPorteDelegateByFiltroRicerca(filtroPD, list,
- this.requestInfo.getIdTransazione());
- }
-
- if(list!=null && list.size()>0) {
- if(list.size()>1) {
- throw new Exception("Trovate più porte ("+list.size()+") che corrisponde al filtro?? ("+filtroPD+")");
- }
- idPD = list.get(0);
- this.idPdDelegatedByAction.put(action, idPD);
-
- try{
- PortaDelegata pd = this.configIntegrationReader.getPortaDelegata(idPD);
- this.pdDelegatedByAction.put(action, pd);
- }catch(RegistryNotFound notFound){
- this.erroreIntegrazione =
- ErroriIntegrazione.ERRORE_401_PORTA_INESISTENTE.
- getErrore401_PortaInesistente(notFound.getMessage(),idPD.getNome(),this.urlCompleta);
- return false;
- }
- }
-
- }
-
- return true;
-
- }catch(Exception e){
- this.log.error("Identificazione porta delegata non riuscita per azione specifica ["+action+"], porta delegata di base["+getIDPortaDelegata().getNome()+"]",e);
- try{
- this.erroreIntegrazione = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_502_IDENTIFICAZIONE_PORTA);
- }catch(Exception eError){
- throw new RuntimeException(eError.getMessage(), eError);
- }
- return false;
- }
- }
-
- public IDPortaDelegata getIDPortaDelegata(String action){
- if(this.idPdDelegatedByAction.containsKey(action)) {
- return this.idPdDelegatedByAction.get(action);
- }
- return null;
- }
- public PortaDelegata getPortaDelegata(String action) {
- if(this.pdDelegatedByAction.containsKey(action)) {
- return this.pdDelegatedByAction.get(action);
- }
- return null;
- }
- }