ApiApiHelper.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */
  20. package org.openspcoop2.core.config.rs.server.api.impl.api;

  21. import static org.openspcoop2.utils.service.beans.utils.BaseHelper.evalnull;
  22. import static org.openspcoop2.utils.service.beans.utils.ProfiloUtils.toProfilo;

  23. import java.util.ArrayList;
  24. import java.util.List;
  25. import java.util.Objects;

  26. import org.apache.commons.lang3.StringUtils;
  27. import org.openspcoop2.core.commons.CoreException;
  28. import org.openspcoop2.core.commons.Liste;
  29. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  30. import org.openspcoop2.core.config.rs.server.api.impl.Enums;
  31. import org.openspcoop2.core.config.rs.server.api.impl.Helper;
  32. import org.openspcoop2.core.config.rs.server.config.ServerProperties;
  33. import org.openspcoop2.core.config.rs.server.model.Api;
  34. import org.openspcoop2.core.config.rs.server.model.ApiAllegato;
  35. import org.openspcoop2.core.config.rs.server.model.ApiAllegatoGenerico;
  36. import org.openspcoop2.core.config.rs.server.model.ApiAllegatoItem;
  37. import org.openspcoop2.core.config.rs.server.model.ApiAllegatoItemGenerico;
  38. import org.openspcoop2.core.config.rs.server.model.ApiAllegatoItemSpecificaSemiformale;
  39. import org.openspcoop2.core.config.rs.server.model.ApiAllegatoSpecificaSemiformale;
  40. import org.openspcoop2.core.config.rs.server.model.ApiAzione;
  41. import org.openspcoop2.core.config.rs.server.model.ApiCanale;
  42. import org.openspcoop2.core.config.rs.server.model.ApiInterfacciaRest;
  43. import org.openspcoop2.core.config.rs.server.model.ApiInterfacciaSoap;
  44. import org.openspcoop2.core.config.rs.server.model.ApiItem;
  45. import org.openspcoop2.core.config.rs.server.model.ApiRisorsa;
  46. import org.openspcoop2.core.config.rs.server.model.ApiServizio;
  47. import org.openspcoop2.core.config.rs.server.model.CanaleEnum;
  48. import org.openspcoop2.core.config.rs.server.model.FormatoRestEnum;
  49. import org.openspcoop2.core.config.rs.server.model.FormatoSoapEnum;
  50. import org.openspcoop2.core.config.rs.server.model.HttpMethodEnum;
  51. import org.openspcoop2.core.config.rs.server.model.RuoloAllegatoAPI;
  52. import org.openspcoop2.core.config.rs.server.model.StatoApiEnum;
  53. import org.openspcoop2.core.config.rs.server.model.TipoApiEnum;
  54. import org.openspcoop2.core.config.rs.server.model.TipoSpecificaSemiformaleEnum;
  55. import org.openspcoop2.core.id.IDAccordo;
  56. import org.openspcoop2.core.id.IDPortTypeAzione;
  57. import org.openspcoop2.core.id.IDResource;
  58. import org.openspcoop2.core.id.IDSoggetto;
  59. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  60. import org.openspcoop2.core.registry.Documento;
  61. import org.openspcoop2.core.registry.IdSoggetto;
  62. import org.openspcoop2.core.registry.Message;
  63. import org.openspcoop2.core.registry.Operation;
  64. import org.openspcoop2.core.registry.PortType;
  65. import org.openspcoop2.core.registry.Resource;
  66. import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneSintetico;
  67. import org.openspcoop2.core.registry.beans.GruppoSintetico;
  68. import org.openspcoop2.core.registry.constants.BindingUse;
  69. import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
  70. import org.openspcoop2.core.registry.constants.FormatoSpecifica;
  71. import org.openspcoop2.core.registry.constants.HttpMethod;
  72. import org.openspcoop2.core.registry.constants.ProfiloCollaborazione;
  73. import org.openspcoop2.core.registry.constants.RuoliDocumento;
  74. import org.openspcoop2.core.registry.constants.StatoFunzionalita;
  75. import org.openspcoop2.core.registry.constants.TipiDocumentoSemiformale;
  76. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  77. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  78. import org.openspcoop2.message.constants.ServiceBinding;
  79. import org.openspcoop2.protocol.basic.archive.APIUtils;
  80. import org.openspcoop2.protocol.information_missing.constants.StatoType;
  81. import org.openspcoop2.protocol.manifest.constants.InterfaceType;
  82. import org.openspcoop2.protocol.sdk.ProtocolException;
  83. import org.openspcoop2.protocol.sdk.constants.ConsoleOperationType;
  84. import org.openspcoop2.protocol.sdk.constants.FunzionalitaProtocollo;
  85. import org.openspcoop2.protocol.sdk.properties.ConsoleConfiguration;
  86. import org.openspcoop2.protocol.sdk.properties.IConsoleDynamicConfiguration;
  87. import org.openspcoop2.protocol.sdk.properties.ProtocolProperties;
  88. import org.openspcoop2.protocol.sdk.registry.IConfigIntegrationReader;
  89. import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
  90. import org.openspcoop2.utils.service.beans.ProfiloEnum;
  91. import org.openspcoop2.utils.service.beans.utils.BaseHelper;
  92. import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
  93. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  94. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCostanti;
  95. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneUtilities;
  96. import org.openspcoop2.web.ctrlstat.servlet.apc.api.ApiCostanti;
  97. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;

  98. /**
  99.  * ApiApiHelper
  100.  *
  101.  * @author $Author$
  102.  * @version $Rev$, $Date$
  103.  *
  104.  */
  105. public class ApiApiHelper {



  106.     public static void validateProperties(ApiEnv env, ProtocolProperties protocolProperties, IDAccordo idAccordoFromAccordo,
  107.             ConsoleOperationType operationType)
  108.             throws DriverConfigurazioneException {
  109.         if(protocolProperties!=null) {
  110.             try{

  111.                 ConsoleConfiguration consoleConf = getConsoleConfiguration(env, idAccordoFromAccordo);

  112.                 env.apcHelper.validaProtocolProperties(consoleConf, ConsoleOperationType.ADD, protocolProperties);
  113.                
  114.                 IConsoleDynamicConfiguration consoleDynamicConfiguration = env.protocolFactory.createDynamicConfigurationConsole();
  115.                 IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  116.                 IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);
  117.                 consoleDynamicConfiguration.updateDynamicConfigAccordoServizioParteComune(consoleConf, operationType, env.apcHelper, protocolProperties,
  118.                         registryReader, configRegistryReader, idAccordoFromAccordo);
  119.                
  120.                 consoleDynamicConfiguration.validateDynamicConfigAccordoServizioParteComune(consoleConf, operationType, env.apcHelper, protocolProperties,
  121.                         registryReader, configRegistryReader, idAccordoFromAccordo);
  122.                
  123.             }catch(ProtocolException e){
  124.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(e.getMessage());
  125.             }
  126.         }
  127.     }

  128.     public static ConsoleConfiguration getConsoleConfiguration(ApiEnv env, IDAccordo idAccordoFromAccordo)
  129.             throws ProtocolException, DriverConfigurazioneException {
  130.         IConsoleDynamicConfiguration consoleDynamicConfiguration = env.protocolFactory.createDynamicConfigurationConsole();

  131.         IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  132.         IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);

  133.         ConsoleConfiguration consoleConf = consoleDynamicConfiguration.getDynamicConfigAccordoServizioParteComune(ConsoleOperationType.ADD, env.apcHelper,
  134.                 registryReader, configRegistryReader, idAccordoFromAccordo);
  135.         return consoleConf;
  136.     }

  137.     public static void validateProperties(ApiEnv env, ProtocolProperties protocolProperties, IDResource idResource, String method, String path,
  138.             ConsoleOperationType operationType)
  139.             throws DriverConfigurazioneException {
  140.         if(protocolProperties!=null) {
  141.             try{

  142.                 ConsoleConfiguration consoleConf = getConsoleConfiguration(env, idResource, method, path);

  143.                 env.apcHelper.validaProtocolProperties(consoleConf, ConsoleOperationType.ADD, protocolProperties);
  144.                
  145.                 IConsoleDynamicConfiguration consoleDynamicConfiguration = env.protocolFactory.createDynamicConfigurationConsole();
  146.                 IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  147.                 IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);
  148.                 consoleDynamicConfiguration.updateDynamicConfigResource(consoleConf, operationType, env.apcHelper, protocolProperties,
  149.                         registryReader, configRegistryReader, idResource, method, path);
  150.                
  151.                 consoleDynamicConfiguration.validateDynamicConfigResource(consoleConf, operationType, env.apcHelper, protocolProperties,
  152.                         registryReader, configRegistryReader, idResource, method, path);
  153.                
  154.             }catch(ProtocolException e){
  155.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(e.getMessage());
  156.             }
  157.         }
  158.     }
  159.    
  160.     public static ConsoleConfiguration getConsoleConfiguration(ApiEnv env, IDResource idResource, String method, String path)
  161.             throws ProtocolException, DriverConfigurazioneException {
  162.         IConsoleDynamicConfiguration consoleDynamicConfiguration = env.protocolFactory.createDynamicConfigurationConsole();

  163.         IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  164.         IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);

  165.         ConsoleConfiguration consoleConf = consoleDynamicConfiguration.getDynamicConfigResource(ConsoleOperationType.ADD, env.apcHelper, registryReader, configRegistryReader,
  166.                 idResource, method, path);
  167.         return consoleConf;
  168.     }

  169.     public static void validateProperties(ApiEnv env, ProtocolProperties protocolProperties, IDPortTypeAzione idAccordoAzione,
  170.             ConsoleOperationType operationType)
  171.             throws DriverConfigurazioneException {
  172.         if(protocolProperties!=null) {
  173.             try{

  174.                 ConsoleConfiguration consoleConf = getConsoleConfiguration(env, idAccordoAzione);

  175.                 env.apcHelper.validaProtocolProperties(consoleConf, ConsoleOperationType.ADD, protocolProperties);
  176.                
  177.                 IConsoleDynamicConfiguration consoleDynamicConfiguration = env.protocolFactory.createDynamicConfigurationConsole();
  178.                 IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  179.                 IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);
  180.                 consoleDynamicConfiguration.updateDynamicConfigOperation(consoleConf, operationType, env.apcHelper, protocolProperties,
  181.                         registryReader, configRegistryReader, idAccordoAzione);
  182.                
  183.                 consoleDynamicConfiguration.validateDynamicConfigOperation(consoleConf, operationType, env.apcHelper, protocolProperties,
  184.                         registryReader, configRegistryReader, idAccordoAzione);
  185.                
  186.             }catch(ProtocolException e){
  187.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(e.getMessage());
  188.             }
  189.         }
  190.     }
  191.    
  192.     public static ConsoleConfiguration getConsoleConfiguration(ApiEnv env, IDPortTypeAzione idAccordoAzione)
  193.             throws ProtocolException, DriverConfigurazioneException {
  194.        
  195.         IConsoleDynamicConfiguration consoleDynamicConfiguration = env.protocolFactory.createDynamicConfigurationConsole();

  196.         IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  197.         IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);

  198.         ConsoleConfiguration consoleConf = consoleDynamicConfiguration.getDynamicConfigOperation(ConsoleOperationType.ADD, env.apcHelper, registryReader, configRegistryReader,
  199.                 idAccordoAzione);
  200.         return consoleConf;
  201.     }

  202.     public static ProtocolProperties getProtocolProperties(ApiAzione body, ProfiloEnum profilo, AccordoServizioParteComune as, Operation op, ApiEnv env) throws Exception {
  203.         if(!profilo.equals(ProfiloEnum.MODI) && !profilo.equals(ProfiloEnum.MODIPA) && body.getModi() != null) {
  204.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Configurazione 'ModI' non conforme con il profilo '"+profilo+"' indicato");
  205.         }

  206.         switch(profilo) {
  207.         case APIGATEWAY:
  208.             return null;// trasparente
  209.         case EDELIVERY:
  210.             return EDeliveryApiApiHelper.getProtocolProperties(body);
  211.         case FATTURAPA:
  212.             return FatturaPAApiApiHelper.getProtocolProperties(body);
  213.         case MODI:
  214.         case MODIPA:
  215.             return ModiApiApiHelper.getProtocolProperties(body, as, op, env);
  216.         case SPCOOP:
  217.             return SPCoopApiApiHelper.getProtocolProperties(body);
  218.         }
  219.         return null;
  220.     }


  221.     public static ProtocolProperties getProtocolProperties(ApiRisorsa body, ProfiloEnum profilo, Resource res, ApiEnv env) throws Exception {
  222.         if(!profilo.equals(ProfiloEnum.MODI) && !profilo.equals(ProfiloEnum.MODIPA) && body.getModi() != null) {
  223.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Configurazione 'ModI' non conforme con il profilo '"+profilo+"' indicato");
  224.         }

  225.         switch(profilo) {
  226.         case APIGATEWAY:
  227.             return null;// trasparente
  228.         case EDELIVERY:
  229.             return EDeliveryApiApiHelper.getProtocolProperties(body);
  230.         case FATTURAPA:
  231.             return FatturaPAApiApiHelper.getProtocolProperties(body);
  232.         case MODI:
  233.         case MODIPA:
  234.             return ModiApiApiHelper.getProtocolProperties(body, res, env);
  235.         case SPCOOP:
  236.             return SPCoopApiApiHelper.getProtocolProperties(body);
  237.         }
  238.         return null;
  239.     }


  240.     public static ProtocolProperties getProtocolProperties(Api body, ProfiloEnum profilo) throws Exception {


  241.         if(!profilo.equals(ProfiloEnum.MODI) && !profilo.equals(ProfiloEnum.MODIPA) && body.getModi() != null) {
  242.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Configurazione 'ModI' non conforme con il profilo '"+profilo+"' indicato");
  243.         }

  244.         switch(profilo) {
  245.         case APIGATEWAY:
  246.             return null;// trasparente
  247.         case EDELIVERY:
  248.             return EDeliveryApiApiHelper.getProtocolProperties(body);
  249.         case FATTURAPA:
  250.             return FatturaPAApiApiHelper.getProtocolProperties(body);
  251.         case MODI:
  252.         case MODIPA:
  253.             return ModiApiApiHelper.getProtocolProperties(body);
  254.         case SPCOOP:
  255.             return SPCoopApiApiHelper.getProtocolProperties(body);
  256.         }
  257.         return null;
  258.     }

  259.     public static final AccordoServizioParteComune accordoApiToRegistro(Api body, ApiEnv env) throws Exception {
  260.         AccordoServizioParteComune as = new AccordoServizioParteComune();

  261.         as.setNome(body.getNome());
  262.         as.setDescrizione(body.getDescrizione());
  263.         as.setProfiloCollaborazione(ProfiloCollaborazione.SINCRONO);

  264.         // Quando sono in SPCoopSoap Specifico di tutti i vari wsdl\wsbl solo il wsdlserv, ovvero  AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_EROGATORE
  265.         // Quando invece sono in modalitĆ  ApiGateway e passo una OpenApi, imposto il wsdlconcettuale
  266.         String interfaccia = body.getInterfaccia() != null ? new String(body.getInterfaccia()) : null;

  267.         // defaults
  268.         // Questo codice e il controllo sotto non dovrebbero mai intervenire essendo tipo required
  269.         if (env.profilo != ProfiloEnum.APIGATEWAY) {

  270.             if (body.getTipoInterfaccia() == null) {
  271.                 ApiInterfacciaSoap iSoap = new ApiInterfacciaSoap();
  272.                 iSoap.setProtocollo(TipoApiEnum.SOAP);
  273.                 iSoap.setFormato(FormatoSoapEnum._1);
  274.                 body.setTipoInterfaccia(iSoap);
  275.             }
  276.         }

  277.         if ( env.profilo == ProfiloEnum.APIGATEWAY ) {

  278.             if ( body.getTipoInterfaccia() == null ) {
  279.                 ApiInterfacciaRest iRest = new ApiInterfacciaRest();
  280.                 iRest.setProtocollo(TipoApiEnum.REST);
  281.                 iRest.setFormato(FormatoRestEnum.OPENAPI3_0);
  282.                 body.setTipoInterfaccia(iRest);
  283.             }

  284.         }

  285.         if ( body.getTipoInterfaccia() == null )    // Questo non può mai accadere, lo tengo perchĆØ in futuro il codice sopra potrĆ  cambiare.
  286.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificare un tipo di interfaccia per la Api");

  287.         switch (body.getTipoInterfaccia().getProtocollo()) {
  288.         case REST:

  289.             if(body.getTipoInterfaccia() instanceof ApiInterfacciaSoap) {
  290.                 ApiInterfacciaSoap soap = (ApiInterfacciaSoap) body.getTipoInterfaccia();
  291.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il formato dell'interfaccia ("+soap.getFormato()+") non ĆØ compatibile con il protocollo REST indicato");
  292.             }
  293.             else if(body.getTipoInterfaccia() instanceof ApiInterfacciaRest) {
  294.                 ApiInterfacciaRest iRest = (ApiInterfacciaRest) body.getTipoInterfaccia();

  295.                 as.setByteWsdlConcettuale(interfaccia != null && !interfaccia.trim().replaceAll("\n", "").equals("") ? interfaccia.trim().getBytes() : null);
  296.                 FormatoRestEnum formatoRest = iRest.getFormato();
  297.                 as.setFormatoSpecifica( BaseHelper.evalorElse( () ->
  298.                 Enums.formatoSpecificaFromRest.get(formatoRest),
  299.                 FormatoSpecifica.OPEN_API_3
  300.                         ));
  301.             }
  302.             else {
  303.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il formato dell'interfaccia ("+body.getTipoInterfaccia().getClass().getName()+") risulta sconosciuto e non compatibile con il protocollo REST indicato");
  304.             }

  305.             break;
  306.         case SOAP:

  307.             if(body.getTipoInterfaccia() instanceof ApiInterfacciaRest) {
  308.                 ApiInterfacciaRest rest = (ApiInterfacciaRest) body.getTipoInterfaccia();
  309.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il formato dell'interfaccia ("+rest.getFormato()+") non ĆØ compatibile con il protocollo SOAP indicato");
  310.             }
  311.             else if(body.getTipoInterfaccia() instanceof ApiInterfacciaSoap) {
  312.                 ApiInterfacciaSoap iSoap = (ApiInterfacciaSoap) body.getTipoInterfaccia();

  313.                 FormatoSoapEnum formatoSoap = iSoap.getFormato();
  314.                 as.setFormatoSpecifica( BaseHelper.evalorElse(
  315.                         () -> Enums.formatoSpecificaFromSoap.get(formatoSoap),
  316.                         FormatoSpecifica.WSDL_11
  317.                         ));
  318.                 as.setByteWsdlLogicoErogatore(interfaccia != null && !interfaccia.trim().replaceAll("\n", "").equals("") ? interfaccia.trim().getBytes() : null);   // Da commenti e audit, WSDL solo logico ed erogatore
  319.             }
  320.             else {
  321.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il formato dell'interfaccia ("+body.getTipoInterfaccia().getClass().getName()+") risulta sconosciuto e non compatibile con il protocollo SOAP indicato");
  322.             }

  323.             break;
  324.         }

  325.         as.setServiceBinding(env.apcCore.fromMessageServiceBinding(Enums.serviceBindingFromTipo.get(body.getTipoInterfaccia().getProtocollo())));

  326.         boolean facilityUnicoWSDL_interfacciaStandard = false;
  327.         if(as.getByteWsdlLogicoErogatore()!=null && as.getByteWsdlLogicoFruitore()==null && as.getByteWsdlConcettuale()==null){
  328.             as.setByteWsdlConcettuale(as.getByteWsdlLogicoErogatore());
  329.             facilityUnicoWSDL_interfacciaStandard = true;
  330.         }

  331.         boolean filtroDuplicatiSupportato = env.stationCore.isFunzionalitaProtocolloSupportataDalProtocollo(
  332.                 env.tipo_protocollo,
  333.                 env.apcCore.toMessageServiceBinding(as.getServiceBinding())
  334.                 , FunzionalitaProtocollo.FILTRO_DUPLICATI
  335.                 );

  336.         as.setFiltroDuplicati(Helper.boolToStatoFunzionalita(filtroDuplicatiSupportato));
  337.         as.setConfermaRicezione(StatoFunzionalita.DISABILITATO);
  338.         as.setIdCollaborazione(StatoFunzionalita.DISABILITATO);
  339.         as.setConsegnaInOrdine(StatoFunzionalita.DISABILITATO);
  340.         as.setIdRiferimentoRichiesta(StatoFunzionalita.DISABILITATO);
  341.         as.setUtilizzoSenzaAzione(true);    // Default a true.
  342.         as.setPrivato(false);   // Da Audit ĆØ false.
  343.         as.setStatoPackage(StatoType.FINALE.getValue());    // Come da Audit

  344.         if (body.getVersione() != null)
  345.             as.setVersione(body.getVersione());

  346.         as.setSuperUser(env.userLogin);

  347.         // Questo resta a null dal debug anche quando specifico un wsdl
  348.         // as.setMessageType(apcCore.fromMessageMessageType(this.messageType));

  349.         // Setto il soggetto referente, true in caso di "spcoop" "sdi", "as4"
  350.         // Se non lo gestisco (caso "trasparente") allora ĆØ il sistema a legare l'applicativo con un soggetto di default.
  351.         IdSoggetto idSoggReferente = new IdSoggetto();
  352.         if (env.gestisciSoggettoReferente) {            
  353.             idSoggReferente.setNome(Helper.getSoggettoOrDefault(body.getReferente(), env.profilo));
  354.             idSoggReferente.setTipo(env.tipo_soggetto);
  355.         }
  356.         else {
  357.             IDSoggetto idSogg = env.apcCore.getSoggettoOperativoDefault(env.userLogin, env.tipo_protocollo);
  358.             idSoggReferente.setNome(idSogg.getNome());
  359.             idSoggReferente.setTipo(idSogg.getTipo());
  360.         }

  361.         if (!env.soggettiCore.existsSoggetto(idSoggReferente.toIDSoggetto())) {
  362.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il soggetto referente " + idSoggReferente.toIDSoggetto().toString() + " non ĆØ presente nel registro");
  363.         }

  364.         idSoggReferente.setId(env.soggettiCore.getIdSoggetto(idSoggReferente.getNome(),idSoggReferente.getTipo()));

  365.         as.setSoggettoReferente(idSoggReferente);

  366.         // Canale
  367.         if(env.gestioneCanali && body.getCanale()!=null) {
  368.             if(!env.canali.contains(body.getCanale())) {
  369.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il canale fornito '" + body.getCanale() + "' non ĆØ presente nel registro");
  370.             }
  371.             as.setCanale(body.getCanale());
  372.         }

  373.         // Automapping
  374.         ServerProperties properties = ServerProperties.getInstance();
  375.         InterfaceType interfaceType = Enums.interfaceTypeFromFormatoSpecifica.get(as.getFormatoSpecifica());

  376.         AccordiServizioParteComuneUtilities.mapppingAutomaticoInterfaccia(
  377.                 as,
  378.                 env.apcCore,
  379.                 properties.isEnabledAutoMapping(),
  380.                 properties.isValidazioneDocumenti(),
  381.                 properties.isEnabledAutoMappingEstraiXsdSchemiFromWsdlTypes(),
  382.                 facilityUnicoWSDL_interfacciaStandard,
  383.                 env.tipo_protocollo, interfaceType);


  384.         return as;
  385.     }


  386.     public static final Documento apiAllegatoToDocumento(ApiAllegato body, AccordoServizioParteComune as, ApiEnv env) {

  387.         Documento documento = new Documento();
  388.         documento.setIdProprietarioDocumento(as.getId());

  389.         RuoloAllegatoAPI ruoloAllegato = body.getAllegato().getRuolo();

  390.         documento.setRuolo(Enums.ruoliDocumentoFromApi.get(ruoloAllegato).toString());

  391.         switch (ruoloAllegato) {
  392.         case ALLEGATO:

  393.             if(! (body.getAllegato() instanceof ApiAllegatoGenerico)) {
  394.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'allegato fornito possiede una struttura dati '"+body.getAllegato().getClass().getName()+"' non compatibile con il ruolo '"+ruoloAllegato+"'");
  395.             }
  396.             ApiAllegatoGenerico allegatoGenerico = (ApiAllegatoGenerico) body.getAllegato();
  397.             documento.setFile(allegatoGenerico.getNome());
  398.             documento.setByteContenuto(allegatoGenerico.getDocumento());
  399.             documento.setTipo( evalnull( () -> allegatoGenerico.getNome().substring( allegatoGenerico.getNome().lastIndexOf('.')+1, allegatoGenerico.getNome().length())) );
  400.             break;

  401.         case SPECIFICASEMIFORMALE:

  402.             if(! (body.getAllegato() instanceof ApiAllegatoSpecificaSemiformale)) {
  403.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'allegato fornito possiede una struttura dati '"+body.getAllegato().getClass().getName()+"' non compatibile con il ruolo '"+ruoloAllegato+"'");
  404.             }
  405.             ApiAllegatoSpecificaSemiformale allegatoSS = (ApiAllegatoSpecificaSemiformale) body.getAllegato();
  406.             documento.setFile(allegatoSS.getNome());
  407.             documento.setByteContenuto(allegatoSS.getDocumento());
  408.             if(ApiCheckNotNull.isNotNullTipoSpecifica(allegatoSS, documento)) {
  409.                 TipoSpecificaSemiformaleEnum tipoAllegato = (TipoSpecificaSemiformaleEnum) allegatoSS.getTipoSpecifica();
  410.                 documento.setTipo( evalnull( () -> Enums.tipoDocumentoSemiFormaleFromSpecifica.get(tipoAllegato) ).toString() );
  411.             }
  412.             break;
  413.         }

  414.         return documento;
  415.     }


  416.     public static final ApiAllegato documentoToApiAllegato(Documento d) {
  417.         ApiAllegato ret = new ApiAllegato();

  418.         RuoloAllegatoAPI ruoloAllegato = Enums.ruoliApiFromDocumento.get(Enum.valueOf(RuoliDocumento.class, d.getRuolo()));

  419.         switch (ruoloAllegato) {
  420.         case ALLEGATO:

  421.             ApiAllegatoGenerico allegatoGenerico = new ApiAllegatoGenerico();
  422.             allegatoGenerico.setRuolo(ruoloAllegato);
  423.             allegatoGenerico.setDocumento(d.getByteContenuto());
  424.             allegatoGenerico.setNome(d.getFile());
  425.             ret.setAllegato(allegatoGenerico);
  426.             break;

  427.         case SPECIFICASEMIFORMALE:

  428.             ApiAllegatoSpecificaSemiformale allegatoSS = new ApiAllegatoSpecificaSemiformale();
  429.             allegatoSS.setRuolo(ruoloAllegato);
  430.             allegatoSS.setDocumento(d.getByteContenuto());
  431.             allegatoSS.setNome(d.getFile());
  432.             TipiDocumentoSemiformale tipo = TipiDocumentoSemiformale.toEnumConstant(d.getTipo());
  433.             allegatoSS.setTipoSpecifica((Helper.apiEnumToGovway(tipo, TipoSpecificaSemiformaleEnum.class)));
  434.             ret.setAllegato(allegatoSS);
  435.             break;
  436.         }

  437.         return ret;
  438.     }

  439.     public static final ApiAllegatoItem documentoToApiAllegatoItem(Documento d) {
  440.         ApiAllegatoItem ret = new ApiAllegatoItem();

  441.         RuoloAllegatoAPI ruoloAllegato = Enums.ruoliApiFromDocumento.get(Enum.valueOf(RuoliDocumento.class, d.getRuolo()));

  442.         switch (ruoloAllegato) {
  443.         case ALLEGATO:

  444.             ApiAllegatoItemGenerico allegatoGenerico = new ApiAllegatoItemGenerico();
  445.             allegatoGenerico.setRuolo(ruoloAllegato);
  446.             allegatoGenerico.setNome(d.getFile());
  447.             ret.setAllegato(allegatoGenerico);
  448.             break;

  449.         case SPECIFICASEMIFORMALE:

  450.             ApiAllegatoItemSpecificaSemiformale allegatoSS = new ApiAllegatoItemSpecificaSemiformale();
  451.             allegatoSS.setRuolo(ruoloAllegato);
  452.             allegatoSS.setNome(d.getFile());
  453.             TipiDocumentoSemiformale tipo = TipiDocumentoSemiformale.toEnumConstant(d.getTipo());
  454.             allegatoSS.setTipoSpecifica((Helper.apiEnumToGovway(tipo, TipoSpecificaSemiformaleEnum.class)));
  455.             ret.setAllegato(allegatoSS);
  456.             break;
  457.         }

  458.         return ret;
  459.     }

  460.     public static final void updatePortType(ApiServizio body, PortType pt, ApiEnv env) throws DriverRegistroServiziNotFound, DriverRegistroServiziException {

  461.         pt.setNome(body.getNome());
  462.         pt.setDescrizione(body.getDescrizione());

  463.         boolean filtroDuplicatiSupportato = env.stationCore.isFunzionalitaProtocolloSupportataDalProtocollo(
  464.                 env.tipo_protocollo,
  465.                 ServiceBinding.SOAP
  466.                 , FunzionalitaProtocollo.FILTRO_DUPLICATI
  467.                 );

  468.         pt.setFiltroDuplicati(Helper.boolToStatoFunzionalita(filtroDuplicatiSupportato));  
  469.         pt.setIdCollaborazione(Helper.boolToStatoFunzionalita(body.isIdCollaborazione()));
  470.         pt.setIdRiferimentoRichiesta(Helper.boolToStatoFunzionalita(body.isRiferimentoIdRichiesta()));
  471.         pt.setProfiloPT(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO);
  472.         pt.setProfiloCollaborazione(Enums.profiloCollaborazioneFromApiEnum.get(body.getProfiloCollaborazione()));          
  473.     }


  474.     public static final void updateOperation(ApiAzione azione, PortType parent, Operation to_update) {

  475.         to_update.setNome(azione.getNome());    

  476.         if (azione.isProfiloRidefinito()) {
  477.             to_update.setProfAzione(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO);
  478.             to_update.setIdCollaborazione(Helper.boolToStatoFunzionalita(azione.isIdCollaborazione()));
  479.             to_update.setIdRiferimentoRichiesta(Helper.boolToStatoFunzionalita(azione.isRiferimentoIdRichiesta()));
  480.             to_update.setProfiloCollaborazione(Enums.profiloCollaborazioneFromApiEnum.get(azione.getProfiloCollaborazione()));
  481.         }
  482.         else {
  483.             to_update.setProfAzione(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT);
  484.             to_update.setFiltroDuplicati(parent.getFiltroDuplicati());
  485.             to_update.setConfermaRicezione(parent.getConfermaRicezione());
  486.             to_update.setConsegnaInOrdine(parent.getConsegnaInOrdine());
  487.             to_update.setIdCollaborazione(parent.getIdCollaborazione());
  488.             to_update.setIdRiferimentoRichiesta(parent.getIdRiferimentoRichiesta());
  489.             to_update.setProfiloCollaborazione(parent.getProfiloCollaborazione());
  490.             to_update.setScadenza(parent.getScadenza());
  491.         }      
  492.     }


  493.     public static final Operation apiAzioneToOperazione(ApiAzione azione, PortType parent) {
  494.         final Operation ret = new Operation();
  495.         updateOperation(azione, parent, ret);

  496.         final String useOp = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_PORT_TYPE_OPERATION_USE;
  497.         final String namespaceWsdlOp = "";

  498.         final BindingUse use = BindingUse.toEnumConstant(useOp);
  499.         ret.setMessageInput(new Message());
  500.         ret.getMessageInput().setSoapNamespace(namespaceWsdlOp);
  501.         ret.getMessageInput().setUse(use);

  502.         // Se il profilo non ĆØ oneWay dobbiamo specificare anche in mesaggio di i uscita, la comunicazione diventa a due vie.
  503.         if (ret.getProfiloCollaborazione() != ProfiloCollaborazione.ONEWAY) {
  504.             ret.setMessageOutput(new Message());
  505.             ret.getMessageOutput().setSoapNamespace(namespaceWsdlOp);
  506.             ret.getMessageOutput().setUse(use);
  507.         }

  508.         return ret;
  509.     }

  510.     public static final ApiAzione operazioneToApiAzione(Operation op) {
  511.         ApiAzione ret = new ApiAzione();

  512.         ret.setNome(op.getNome());
  513.         ret.setIdCollaborazione(op.getIdCollaborazione() == StatoFunzionalita.ABILITATO ? true : false);
  514.         ret.setRiferimentoIdRichiesta(op.getIdRiferimentoRichiesta() == StatoFunzionalita.ABILITATO ? true : false);
  515.         ret.setProfiloCollaborazione(Enums.profiloCollaborazioneApiFromRegistro.get(op.getProfiloCollaborazione()));
  516.         ret.setProfiloRidefinito(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO.equals(op.getProfAzione()) ? true : false);

  517.         return ret;
  518.     }


  519.     public static final PortType apiServizioToRegistro(ApiServizio body, AccordoServizioParteComune parent, ApiEnv env) throws DriverRegistroServiziNotFound, DriverRegistroServiziException {

  520.         PortType ret = new PortType();

  521.         updatePortType(body, ret, env);

  522.         ret.setScadenza("");
  523.         ret.setConfermaRicezione(parent.getConfermaRicezione());
  524.         ret.setConsegnaInOrdine(parent.getConsegnaInOrdine());

  525.         return ret;
  526.     }




  527.     public static final ApiServizio servizioRegistroToApi(PortType pt) {
  528.         ApiServizio ret = new ApiServizio();
  529.         ret.setNome(pt.getNome());
  530.         ret.setDescrizione(pt.getDescrizione());
  531.         ret.setIdCollaborazione(Helper.statoFunzionalitaToBool(pt.getIdCollaborazione()));
  532.         ret.setRiferimentoIdRichiesta(Helper.statoFunzionalitaToBool(pt.getIdRiferimentoRichiesta()));
  533.         ret.setProfiloCollaborazione(Enums.profiloCollaborazioneApiFromRegistro.get(pt.getProfiloCollaborazione()));

  534.         return ret;
  535.     }


  536.     public static final void updateRisorsa(ApiRisorsa body, Resource res) {

  537.         res.setNome(body.getNome());
  538.         res.setDescrizione(body.getDescrizione());

  539.         // 1. se il path non inizia per '/' aggiungo all'inizio della stringa
  540.         String pathNormalizzato = body.getPath();

  541.         if(pathNormalizzato !=null && !"".equals(pathNormalizzato)) {
  542.             pathNormalizzato = pathNormalizzato.trim();
  543.             if(!pathNormalizzato.startsWith("/"))
  544.                 pathNormalizzato = "/" + pathNormalizzato;
  545.         }

  546.         res.setPath(pathNormalizzato);

  547.         res.setMethod(Helper.apiEnumToGovway(body.getHttpMethod(), HttpMethod.class));

  548.         if (res.getMethod() != null)
  549.             res.setMethodRawEnumValue(res.getMethod().toString());

  550.         if (StringUtils.isEmpty(res.getNome()) && res.getMethod() != null)
  551.             res.setNome(APIUtils.normalizeResourceName(res.getMethod(), pathNormalizzato));

  552.         res.setIdCollaborazione( Helper.boolToStatoFunzionalita(body.isIdCollaborazione()));
  553.         res.setIdRiferimentoRichiesta( Helper.boolToStatoFunzionalita(body.isRiferimentoIdRichiesta()));        
  554.         res.setProfAzione(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO);
  555.     }

  556.     // Todo prendiFiltroDuplicati e roba dal parent.
  557.     public static final Resource apiRisorsaToRegistro(ApiRisorsa body, AccordoServizioParteComune parent) {
  558.         Resource ret = new Resource();

  559.         ret.setMessageType(null);
  560.         ret.setRequestMessageType(null);
  561.         ret.setResponseMessageType(null);
  562.         ret.setFiltroDuplicati(parent.getFiltroDuplicati());
  563.         ret.setConfermaRicezione(parent.getConfermaRicezione());
  564.         ret.setIdCollaborazione(parent.getIdCollaborazione());
  565.         ret.setIdRiferimentoRichiesta(parent.getIdRiferimentoRichiesta());
  566.         ret.setConsegnaInOrdine(parent.getConsegnaInOrdine());
  567.         ret.setScadenza(parent.getScadenza());      

  568.         updateRisorsa(body,ret);

  569.         return ret;
  570.     }


  571.     public static final ApiRisorsa risorsaRegistroToApi(Resource r) {
  572.         ApiRisorsa ret = new ApiRisorsa();

  573.         ret.setNome(r.getNome());
  574.         ret.setDescrizione(r.getDescrizione());

  575.         ret.setHttpMethod( r.getMethodRawEnumValue() == null || HttpMethodEnum.valueOf(r.getMethodRawEnumValue()) == null
  576.                 ? HttpMethodEnum.QUALSIASI
  577.                         : HttpMethodEnum.valueOf(r.getMethodRawEnumValue())
  578.                 );

  579.         ret.setIdCollaborazione(r.getIdCollaborazione() == StatoFunzionalita.ABILITATO ? true : false);
  580.         ret.setRiferimentoIdRichiesta(r.getIdRiferimentoRichiesta() == StatoFunzionalita.ABILITATO ? true : false);
  581.         ret.setPath(r.getPath());

  582.         return ret;
  583.     }

  584.     public static void populateApiRisorsaWithProtocolInfo(AccordoServizioParteComune as, Resource res, ApiEnv env, ProfiloEnum profilo, ApiRisorsa ret) throws Exception {
  585.        
  586.         if(profilo != null) {
  587.             switch(profilo) {
  588.             case APIGATEWAY:
  589.                 return ;// trasparente
  590.             case EDELIVERY:
  591.                 EDeliveryApiApiHelper.populateApiRisorsaWithProtocolInfo(as, res, env, ret);
  592.                 break;
  593.             case FATTURAPA:
  594.                 FatturaPAApiApiHelper.populateApiRisorsaWithProtocolInfo(as, res, env, ret);
  595.                 break;
  596.             case MODI:
  597.             case MODIPA:
  598.                 ModiApiApiHelper.populateApiRisorsaWithProtocolInfo(as, res,  env, ret);
  599.                 break;
  600.             case SPCOOP:
  601.                 SPCoopApiApiHelper.populateApiRisorsaWithProtocolInfo(as, res, env, ret);
  602.             }
  603.         }      
  604.     }

  605.     public static void populateApiAzioneWithProtocolInfo(AccordoServizioParteComune as, Operation az, ApiEnv env, ProfiloEnum profilo, ApiAzione ret) throws Exception {
  606.        
  607.         if(profilo != null) {
  608.             switch(profilo) {
  609.             case APIGATEWAY:
  610.                 return ;// trasparente
  611.             case EDELIVERY:
  612.                 EDeliveryApiApiHelper.populateApiAzioneWithProtocolInfo(as, az, env, ret);
  613.                 break;
  614.             case FATTURAPA:
  615.                 FatturaPAApiApiHelper.populateApiAzioneWithProtocolInfo(as, az, env, ret);
  616.                 break;
  617.             case MODI:
  618.             case MODIPA:
  619.                 ModiApiApiHelper.populateApiAzioneWithProtocolInfo(as, az,  env, ret);
  620.                 break;
  621.             case SPCOOP:
  622.                 SPCoopApiApiHelper.populateApiAzioneWithProtocolInfo(as, az, env, ret);
  623.             }
  624.         }      
  625.     }

  626.     public static final ApiItem apiToItem(Api api, AccordoServizioParteComuneSintetico as, ApiEnv env) {
  627.         ApiItem ret = new ApiItem();

  628.         ProfiloEnum profilo = toProfilo(as.getSoggettoReferente().getTipo());
  629.         ret.setDescrizione(api.getDescrizione());
  630.         ret.setTipoInterfaccia(api.getTipoInterfaccia());
  631.         ret.setNome(api.getNome());
  632.         ret.setProfilo(Objects.requireNonNullElse(profilo, ProfiloEnum.APIGATEWAY));
  633.         ret.setSoggetto(api.getReferente());
  634.         ret.setVersione(api.getVersione());
  635.         ret.setReferente(api.getReferente());


  636.         StatoApiEnum stato = null;
  637.         String descrizioneStato = "";
  638.         ConsoleSearch searchForCount = new ConsoleSearch(true);
  639.         switch (ret.getTipoInterfaccia().getProtocollo()) {
  640.         case REST:
  641.             // caso REST: l'API e' abilitata se ha almeno una risorsa
  642.             try {
  643.                 env.apcCore.accordiResourceList(as.getId().intValue(), searchForCount);
  644.             } catch (Exception e) { throw new RuntimeException(e); }

  645.             int numRisorse = searchForCount.getNumEntries(Liste.ACCORDI_API_RESOURCES);

  646.             if(numRisorse > 0) {
  647.                 stato = StatoApiEnum.OK;
  648.             }
  649.             else {
  650.                 stato = StatoApiEnum.ERROR;
  651.                 descrizioneStato = ApiCostanti.APC_API_ICONA_STATO_RISORSE_TUTTE_DISABILITATE_TOOLTIP;
  652.             }
  653.             break;
  654.         case SOAP:
  655.         default:

  656.             List<PortType> accordiPorttypeList = null;
  657.             try {
  658.                 accordiPorttypeList = env.apcCore.accordiPorttypeList(as.getId().intValue(), searchForCount);
  659.             } catch (Exception e) { throw new RuntimeException(e); }

  660.             int numeroTotaleServizi = accordiPorttypeList.size();
  661.             int numeroServiziAbilitati = 0;

  662.             for (PortType portType : accordiPorttypeList) {
  663.                 if(portType.sizeAzioneList()>0) {
  664.                     numeroServiziAbilitati ++;
  665.                 }  
  666.             }

  667.             if(numeroTotaleServizi == 0) {
  668.                 stato = StatoApiEnum.ERROR;
  669.                 descrizioneStato = ApiCostanti.APC_API_ICONA_STATO_SERVIZI_TUTTI_DISABILITATI_TOOLTIP;
  670.             }
  671.             else if(numeroServiziAbilitati==0) {
  672.                 stato = StatoApiEnum.ERROR;
  673.                 if(numeroTotaleServizi==1) {
  674.                     descrizioneStato = ApiCostanti.APC_API_ICONA_STATO_SERVIZIO_PARZIALMENTE_CONFIGURATO_DISABILITATI_TOOLTIP;
  675.                 }
  676.                 else {
  677.                     descrizioneStato = ApiCostanti.APC_API_ICONA_STATO_SERVIZI_TUTTI_SENZA_AZIONE_TOOLTIP;
  678.                 }
  679.             } else if(numeroServiziAbilitati == numeroTotaleServizi) {
  680.                 stato = StatoApiEnum.OK;
  681.             }
  682.             else {
  683.                 stato = StatoApiEnum.WARN;
  684.                 descrizioneStato = ApiCostanti.APC_API_ICONA_STATO_SERVIZI_PARZIALMENTE_ABILITATI_TOOLTIP;
  685.             }
  686.             break;
  687.         }

  688.         ret.setStatoDescrizione(descrizioneStato);
  689.         ret.setStato(stato);

  690.         if(as.getGruppo()!=null &&  !as.getGruppo().isEmpty()) {
  691.             ret.setTags(new ArrayList<>());
  692.             for (GruppoSintetico tag : as.getGruppo()) {
  693.                 ret.addTagsItem(tag.getNome());
  694.             }
  695.         }

  696.         if(env.gestioneCanali) {
  697.             ApiCanale canale = new ApiCanale();
  698.             if(as.getCanale()!=null && !"".equals(as.getCanale())) {
  699.                 canale.setNome(as.getCanale());
  700.                 canale.setConfigurazione(CanaleEnum.API);
  701.             }
  702.             else {
  703.                 canale.setNome(env.canaleDefault);
  704.                 canale.setConfigurazione(CanaleEnum.DEFAULT);
  705.             }
  706.             ret.setCanale(canale);
  707.         }

  708.         return ret;

  709.     }

  710.     public static final Api accordoSpcRegistroToApi(AccordoServizioParteComuneSintetico as, SoggettiCore soggettiCore) {
  711.         Api ret = new Api();

  712.         ret.setNome(as.getNome());
  713.         ret.setDescrizione(as.getDescrizione());

  714.         switch (as.getServiceBinding()) {
  715.         case REST:
  716.             ApiInterfacciaRest iRest = new ApiInterfacciaRest();
  717.             iRest.setProtocollo(TipoApiEnum.REST);
  718.             iRest.setFormato(Enums.formatoRestFromSpecifica.get(as.getFormatoSpecifica()));
  719.             ret.setTipoInterfaccia(iRest);
  720.             ret.setInterfaccia(as.getByteWsdlConcettuale());
  721.             break;
  722.         case SOAP:
  723.             ApiInterfacciaSoap iSoap = new ApiInterfacciaSoap();
  724.             iSoap.setProtocollo(TipoApiEnum.SOAP);
  725.             iSoap.setFormato(Enums.formatoSoapFromSpecifica.get(as.getFormatoSpecifica()));
  726.             ret.setTipoInterfaccia(iSoap);
  727.             ret.setInterfaccia(as.getByteWsdlLogicoErogatore());
  728.             break;
  729.         }

  730.         ret.setVersione(as.getVersione());
  731.         ret.setReferente(as.getSoggettoReferente().getNome());

  732.         return ret;
  733.     }


  734.     // Versione "deprecata" in favore di quella più generica nell'Helper
  735.     public static final AccordoServizioParteComune getAccordoFull(String nome, Integer versione, ApiEnv env) throws CoreException {
  736.         return Helper.getAccordoFull(nome, versione, env.idSoggetto.toIDSoggetto(), env.apcCore);
  737.     }
  738.     public static final AccordoServizioParteComuneSintetico getAccordoSintetico(String nome, Integer versione, ApiEnv env) throws CoreException {
  739.         return Helper.getAccordoSintetico(nome, versione, env.idSoggetto.toIDSoggetto(), env.apcCore);
  740.     }

  741. }