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 java.util.ArrayList;
  23. import java.util.List;

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

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



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

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

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

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

  129.         IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  130.         IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);

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

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

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

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

  161.         IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  162.         IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);

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

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

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

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

  194.         IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  195.         IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);

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

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

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


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

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


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


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

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

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

  259.         as.setNome(body.getNome());
  260.         as.setDescrizione(body.getDescrizione());
  261.         as.setProfiloCollaborazione(ProfiloCollaborazione.SINCRONO);

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

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

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

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

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

  282.         }

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

  285.         switch (body.getTipoInterfaccia().getProtocollo()) {
  286.         case REST:

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

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

  303.             break;
  304.         case SOAP:

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

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

  321.             break;
  322.         }

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

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

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

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

  342.         if (body.getVersione() != null)
  343.             as.setVersione(body.getVersione());

  344.         as.setSuperUser(env.userLogin);

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

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

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

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

  363.         as.setSoggettoReferente(idSoggReferente);

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

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

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


  382.         return as;
  383.     }


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

  385.         Documento documento = new Documento();
  386.         documento.setIdProprietarioDocumento(as.getId());

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

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

  389.         switch (ruoloAllegato) {
  390.         case ALLEGATO:

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

  399.         case SPECIFICASEMIFORMALE:

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

  412.         return documento;
  413.     }


  414.     public static final ApiAllegato documentoToApiAllegato(Documento d) {
  415.         ApiAllegato ret = new ApiAllegato();

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

  417.         switch (ruoloAllegato) {
  418.         case ALLEGATO:

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

  425.         case SPECIFICASEMIFORMALE:

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

  435.         return ret;
  436.     }

  437.     public static final ApiAllegatoItem documentoToApiAllegatoItem(Documento d) {
  438.         ApiAllegatoItem ret = new ApiAllegatoItem();

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

  440.         switch (ruoloAllegato) {
  441.         case ALLEGATO:

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

  447.         case SPECIFICASEMIFORMALE:

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

  456.         return ret;
  457.     }

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

  459.         pt.setNome(body.getNome());
  460.         pt.setDescrizione(body.getDescrizione());

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

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


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

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

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


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

  494.         final String useOp = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_PORT_TYPE_OPERATION_USE;
  495.         final String namespaceWsdlOp = "";

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

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

  506.         return ret;
  507.     }

  508.     public static final ApiAzione operazioneToApiAzione(Operation op) {
  509.         ApiAzione ret = new ApiAzione();

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

  515.         return ret;
  516.     }


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

  518.         PortType ret = new PortType();

  519.         updatePortType(body, ret, env);

  520.         ret.setScadenza("");
  521.         ret.setConfermaRicezione(parent.getConfermaRicezione());
  522.         ret.setConsegnaInOrdine(parent.getConsegnaInOrdine());

  523.         return ret;
  524.     }




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

  532.         return ret;
  533.     }


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

  535.         res.setNome(body.getNome());
  536.         res.setDescrizione(body.getDescrizione());

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

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

  544.         res.setPath(pathNormalizzato);

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

  546.         if (res.getMethod() != null)
  547.             res.setMethodRawEnumValue(res.getMethod().toString());

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

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

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

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

  566.         updateRisorsa(body,ret);

  567.         return ret;
  568.     }


  569.     public static final ApiRisorsa risorsaRegistroToApi(Resource r) {
  570.         ApiRisorsa ret = new ApiRisorsa();

  571.         ret.setNome(r.getNome());
  572.         ret.setDescrizione(r.getDescrizione());

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

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

  580.         return ret;
  581.     }

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

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

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

  626.         ret.setDescrizione(api.getDescrizione());
  627.         ret.setTipoInterfaccia(api.getTipoInterfaccia());
  628.         ret.setNome(api.getNome());
  629.         ret.setProfilo(env.profilo);    // TODO: In multitenant questo va cambiato al profilo relativo al tip del soggetto referente dell'as
  630.         ret.setSoggetto(api.getReferente());
  631.         ret.setVersione(api.getVersione());
  632.         ret.setReferente(api.getReferente());


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

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

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

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

  657.             int numeroTotaleServizi = accordiPorttypeList.size();
  658.             int numeroServiziAbilitati = 0;

  659.             for (PortType portType : accordiPorttypeList) {
  660.                 if(portType.sizeAzioneList()>0) {
  661.                     numeroServiziAbilitati ++;
  662.                 }  
  663.             }

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

  685.         ret.setStatoDescrizione(descrizioneStato);
  686.         ret.setStato(stato);

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

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

  705.         return ret;

  706.     }

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

  709.         ret.setNome(as.getNome());
  710.         ret.setDescrizione(as.getDescrizione());

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

  727.         ret.setVersione(as.getVersione());
  728.         ret.setReferente(as.getSoggettoReferente().getNome());

  729.         return ret;
  730.     }


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

  738. }