BasicFactory.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.protocol.basic;


  21. import org.openspcoop2.core.config.driver.IDriverConfigurazioneGet;
  22. import org.openspcoop2.core.registry.driver.IDriverRegistroServiziGet;
  23. import org.openspcoop2.protocol.basic.archive.BasicArchive;
  24. import org.openspcoop2.protocol.basic.builder.BustaBuilder;
  25. import org.openspcoop2.protocol.basic.builder.ErroreApplicativoBuilder;
  26. import org.openspcoop2.protocol.basic.builder.EsitoBuilder;
  27. import org.openspcoop2.protocol.basic.config.BasicProtocolIntegrationConfiguration;
  28. import org.openspcoop2.protocol.basic.config.BasicTraduttore;
  29. import org.openspcoop2.protocol.basic.diagnostica.DiagnosticSerializer;
  30. import org.openspcoop2.protocol.basic.properties.BasicDynamicConfiguration;
  31. import org.openspcoop2.protocol.basic.registry.ConfigIntegrationReader;
  32. import org.openspcoop2.protocol.basic.registry.RegistryReader;
  33. import org.openspcoop2.protocol.basic.tracciamento.TracciaSerializer;
  34. import org.openspcoop2.protocol.basic.validator.ValidatoreErrori;
  35. import org.openspcoop2.protocol.basic.validator.ValidazioneAccordi;
  36. import org.openspcoop2.protocol.basic.validator.ValidazioneConSchema;
  37. import org.openspcoop2.protocol.basic.validator.ValidazioneDocumenti;
  38. import org.openspcoop2.protocol.basic.validator.ValidazioneSemantica;
  39. import org.openspcoop2.protocol.basic.validator.ValidazioneSintattica;
  40. import org.openspcoop2.protocol.manifest.Openspcoop2;
  41. import org.openspcoop2.protocol.registry.CachedRegistryReader;
  42. import org.openspcoop2.protocol.registry.RegistroServiziManager;
  43. import org.openspcoop2.protocol.sdk.ConfigurazionePdD;
  44. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  45. import org.openspcoop2.protocol.sdk.InformazioniProtocollo;
  46. import org.openspcoop2.protocol.sdk.ProtocolException;
  47. import org.openspcoop2.protocol.sdk.archive.IArchive;
  48. import org.openspcoop2.protocol.sdk.config.IProtocolIntegrationConfiguration;
  49. import org.openspcoop2.protocol.sdk.diagnostica.IDiagnosticDriver;
  50. import org.openspcoop2.protocol.sdk.diagnostica.IDiagnosticProducer;
  51. import org.openspcoop2.protocol.sdk.dump.IDumpProducer;
  52. import org.openspcoop2.protocol.sdk.properties.IConsoleDynamicConfiguration;
  53. import org.openspcoop2.protocol.sdk.registry.IConfigIntegrationReader;
  54. import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
  55. import org.openspcoop2.protocol.sdk.state.IState;
  56. import org.openspcoop2.protocol.sdk.state.RequestInfo;
  57. import org.openspcoop2.protocol.sdk.tracciamento.ITracciaDriver;
  58. import org.openspcoop2.protocol.sdk.tracciamento.ITracciaProducer;
  59. import org.openspcoop2.protocol.sdk.validator.IValidazioneAccordi;
  60. import org.openspcoop2.protocol.sdk.validator.IValidazioneDocumenti;
  61. import org.openspcoop2.protocol.utils.EsitiProperties;
  62. import org.openspcoop2.protocol.utils.ProtocolUtils;
  63. import org.openspcoop2.utils.Map;
  64. import org.openspcoop2.utils.MapKey;
  65. import org.slf4j.Logger;


  66. /**
  67.  * BasicFactory
  68.  *
  69.  * @author Poli Andrea (apoli@link.it)
  70.  * @author $Author$
  71.  * @version $Rev$, $Date$
  72.  */
  73. public abstract class BasicFactory<BustaRawType> implements IProtocolFactory<BustaRawType> {
  74.     private static final long serialVersionUID = 1L;
  75.    
  76.     private String protocol;
  77.     private MapKey<String> protocolMapKey;
  78.     private InformazioniProtocollo informazioniProtocollo;
  79.     protected Logger log;
  80.     protected Logger logProtocol;
  81.     private ConfigurazionePdD configPdD;
  82.     private Openspcoop2 manifest;
  83.     protected BasicStaticInstanceConfig staticInstanceConfig;

  84.     /* ** INIT ** */
  85.        
  86.     @Override
  87.     public void init(Logger log,String protocol,ConfigurazionePdD configPdD,Openspcoop2 manifest) throws ProtocolException{
  88.         this.protocol = protocol;
  89.         this.protocolMapKey = ProtocolUtils.protocolToMapKey(this.protocol);
  90.         this.log = log;
  91.         this.configPdD = configPdD;
  92.         this.manifest = manifest;
  93.         this.informazioniProtocollo = new InformazioniProtocollo();
  94.         this.informazioniProtocollo.setName(this.protocol);
  95.         this.informazioniProtocollo.setLabel(manifest.getProtocol().getLabel());
  96.         this.informazioniProtocollo.setWebSite(manifest.getProtocol().getWebSite());
  97.         this.informazioniProtocollo.setDescription(manifest.getProtocol().getDescrizione());
  98.         if(manifest.getProtocol().getTransaction()!=null) {
  99.             this.informazioniProtocollo.setErrorProtocol(manifest.getProtocol().getTransaction().isErrorProtocol());
  100.             this.informazioniProtocollo.setEnvelopeErrorProtocol(manifest.getProtocol().getTransaction().isEnvelopeErrorProtocol());
  101.             this.informazioniProtocollo.setLabelErrorProtocol(manifest.getProtocol().getTransaction().getLabelErrorProtocol());
  102.             this.informazioniProtocollo.setExternalFault(manifest.getProtocol().getTransaction().isExternalFault());
  103.             this.informazioniProtocollo.setLabelExternalFault(manifest.getProtocol().getTransaction().getLabelExternalFault());
  104.         }
  105.     }
  106.     protected void initStaticInstance(BasicStaticInstanceConfig staticInstanceConfig) throws ProtocolException{
  107.         if(staticInstanceConfig!=null) {
  108.             this.staticInstanceConfig = staticInstanceConfig;
  109.             if(staticInstanceConfig.isStaticConfig()) {
  110.                 if(staticInstanceTraduttore==null) {
  111.                     initStaticInstanceTraduttore();
  112.                 }
  113.                 createTraduttore();
  114.                 if(staticInstanceProtocolIntegrationConfiguration==null) {
  115.                     initStaticInstanceProtocolIntegrationConfiguration();
  116.                 }
  117.                 createProtocolIntegrationConfiguration();
  118.             }
  119.             if(staticInstanceConfig.isStaticErrorBuilder()) {
  120.                 if(staticInstanceErroreApplicativoBuilder==null) {
  121.                     initStaticInstanceErroreApplicativoBuilder();
  122.                 }
  123.                 createErroreApplicativoBuilder();
  124.             }
  125.             if(staticInstanceConfig.isStaticEsitoBuilder() && EsitiProperties.isInitializedProtocol(this.getProtocolMapKey())) {
  126.                 if(staticInstanceEsitoBuilder==null) {
  127.                     initStaticInstanceEsitoBuilder();
  128.                 }
  129.                 createEsitoBuilder();
  130.             }
  131.         }
  132.     }
  133.     public void initStaticInstance() throws ProtocolException{
  134.         if(this.staticInstanceConfig!=null && this.staticInstanceConfig.isStaticEsitoBuilder() && EsitiProperties.isInitializedProtocol(this.getProtocolMapKey()) &&
  135.                 (staticInstanceEsitoBuilder==null || !staticInstanceEsitoBuilder.containsKey(this.getProtocolMapKey()))) {
  136.             if(staticInstanceEsitoBuilder==null) {
  137.                 initStaticInstanceEsitoBuilder();
  138.             }
  139.             createEsitoBuilder();
  140.         }
  141.     }
  142.    
  143.     @Override
  144.     public void initProtocolLogger(Logger protocolLogger) throws ProtocolException{
  145.         this.logProtocol = protocolLogger;
  146.     }
  147.    
  148.    
  149.     /* ** LOGGER ** */
  150.    
  151.     @Override
  152.     public Logger getLogger() {
  153.         return this.log;
  154.     }
  155.    
  156.     @Override
  157.     public Logger getProtocolLogger() {
  158.         if(this.logProtocol!=null) {
  159.             return this.logProtocol;
  160.         }
  161.         else {
  162.             return this.log; // Per contesti di utilizzo fuori dalla PdD, (es. console) per non avere nullPointer
  163.         }
  164.     }
  165.    
  166.    
  167.     /* ** INFO SERVIZIO ** */
  168.    
  169.     @Override
  170.     public String getProtocol() {
  171.         return this.protocol;
  172.     }
  173.        
  174.     @Override
  175.     public MapKey<String> getProtocolMapKey() {
  176.         return this.protocolMapKey;
  177.     }
  178.    
  179.     @Override
  180.     public InformazioniProtocollo getInformazioniProtocol() {
  181.         return this.informazioniProtocollo;
  182.     }
  183.    
  184.     @Override
  185.     public ConfigurazionePdD getConfigurazionePdD() {
  186.         return this.configPdD;
  187.     }
  188.    
  189.     @Override
  190.     public Openspcoop2 getManifest() {
  191.         return this.manifest;
  192.     }

  193.    
  194.     /* ** PROTOCOL BUILDER ** */
  195.    
  196.     @Override
  197.     public org.openspcoop2.protocol.sdk.builder.IBustaBuilder<BustaRawType> createBustaBuilder(IState state) throws ProtocolException {
  198.         return new BustaBuilder<BustaRawType>(this, state);
  199.     }
  200.    
  201.     private static Map<org.openspcoop2.protocol.sdk.builder.IErroreApplicativoBuilder> staticInstanceErroreApplicativoBuilder = null;
  202.     private static synchronized void initStaticInstanceErroreApplicativoBuilder() {
  203.         if(staticInstanceErroreApplicativoBuilder==null) {
  204.             staticInstanceErroreApplicativoBuilder = new Map<org.openspcoop2.protocol.sdk.builder.IErroreApplicativoBuilder>();
  205.         }
  206.     }
  207.     @Override
  208.     public org.openspcoop2.protocol.sdk.builder.IErroreApplicativoBuilder createErroreApplicativoBuilder()  throws ProtocolException {
  209.         if(staticInstanceErroreApplicativoBuilder!=null) {
  210.             org.openspcoop2.protocol.sdk.builder.IErroreApplicativoBuilder builder = staticInstanceErroreApplicativoBuilder.get(this.getProtocolMapKey());
  211.             if(builder==null) {
  212.                 initErroreApplicativoBuilder(this.getProtocolMapKey());
  213.                 builder = staticInstanceErroreApplicativoBuilder.get(this.getProtocolMapKey());
  214.             }
  215.             return builder;
  216.         }
  217.         else {
  218.             return new ErroreApplicativoBuilder(this);
  219.         }
  220.     }
  221.     private synchronized void initErroreApplicativoBuilder(MapKey<String> protocolMapKey) throws ProtocolException {
  222.         if(!staticInstanceErroreApplicativoBuilder.containsKey(protocolMapKey)) {
  223.             staticInstanceErroreApplicativoBuilder.put(protocolMapKey, new ErroreApplicativoBuilder(this));
  224.         }
  225.     }
  226.    
  227.     private static Map<org.openspcoop2.protocol.sdk.builder.IEsitoBuilder> staticInstanceEsitoBuilder = null;
  228.     private static synchronized void initStaticInstanceEsitoBuilder() {
  229.         if(staticInstanceEsitoBuilder==null) {
  230.             staticInstanceEsitoBuilder = new Map<org.openspcoop2.protocol.sdk.builder.IEsitoBuilder>();
  231.         }
  232.     }
  233.     @Override
  234.     public org.openspcoop2.protocol.sdk.builder.IEsitoBuilder createEsitoBuilder()  throws ProtocolException{
  235.         if(staticInstanceEsitoBuilder!=null) {
  236.             org.openspcoop2.protocol.sdk.builder.IEsitoBuilder builder = staticInstanceEsitoBuilder.get(this.getProtocolMapKey());
  237.             if(builder==null) {
  238.                 initEsitoBuilder(this.getProtocolMapKey());
  239.                 builder = staticInstanceEsitoBuilder.get(this.getProtocolMapKey());
  240.             }
  241.             return builder;
  242.         }
  243.         else {
  244.             return new EsitoBuilder(this);
  245.         }
  246.     }
  247.     private synchronized void initEsitoBuilder(MapKey<String> protocolMapKey) throws ProtocolException {
  248.         if(!staticInstanceEsitoBuilder.containsKey(protocolMapKey)) {
  249.             staticInstanceEsitoBuilder.put(protocolMapKey, new EsitoBuilder(this));
  250.         }
  251.     }
  252.    
  253.    
  254.     /* ** PROTOCOL VALIDATOR ** */
  255.    
  256.     @Override
  257.     public org.openspcoop2.protocol.sdk.validator.IValidatoreErrori createValidatoreErrori(IState state)  throws ProtocolException{
  258.         return new ValidatoreErrori(this, state);
  259.     }

  260.     @Override
  261.     public org.openspcoop2.protocol.sdk.validator.IValidazioneSintattica<BustaRawType> createValidazioneSintattica(IState state) throws ProtocolException {
  262.         return new ValidazioneSintattica<BustaRawType>(this, state);
  263.     }
  264.    
  265.     @Override
  266.     public org.openspcoop2.protocol.sdk.validator.IValidazioneSemantica createValidazioneSemantica(IState state)  throws ProtocolException {
  267.         return new ValidazioneSemantica(this, state);
  268.     }

  269.     @Override
  270.     public org.openspcoop2.protocol.sdk.validator.IValidazioneConSchema createValidazioneConSchema(IState state)  throws ProtocolException{
  271.         return new ValidazioneConSchema(this, state);
  272.     }
  273.    
  274.     @Override
  275.     public IValidazioneDocumenti createValidazioneDocumenti()
  276.             throws ProtocolException {
  277.         return new ValidazioneDocumenti(this);
  278.     }

  279.     @Override
  280.     public IValidazioneAccordi createValidazioneAccordi()
  281.             throws ProtocolException {
  282.         return new ValidazioneAccordi(this);
  283.     }
  284.    
  285.    

  286.     /* ** DIAGNOSTICI ** */

  287.     @Override
  288.     public IDiagnosticDriver createDiagnosticDriver() throws ProtocolException{
  289.         return new org.openspcoop2.protocol.basic.diagnostica.DiagnosticDriver(this);
  290.     }
  291.    
  292.     @Override
  293.     public IDiagnosticProducer createDiagnosticProducer() throws ProtocolException{
  294.         return new org.openspcoop2.protocol.basic.diagnostica.DiagnosticProducer(this);
  295.     }
  296.    
  297.     @Override
  298.     public org.openspcoop2.protocol.sdk.diagnostica.IDiagnosticSerializer createDiagnosticSerializer()  throws ProtocolException {
  299.         return new DiagnosticSerializer(this);
  300.     }

  301.    
  302.     /* ** TRACCE ** */
  303.    
  304.     @Override
  305.     public ITracciaDriver createTracciaDriver() throws ProtocolException{
  306.         return new org.openspcoop2.protocol.basic.tracciamento.TracciaDriver(this);
  307.     }
  308.    
  309.     @Override
  310.     public ITracciaProducer createTracciaProducer() throws ProtocolException{
  311.         return new org.openspcoop2.protocol.basic.tracciamento.TracciaProducer(this);
  312.     }
  313.    
  314.     @Override
  315.     public org.openspcoop2.protocol.sdk.tracciamento.ITracciaSerializer createTracciaSerializer()  throws ProtocolException {
  316.         return new TracciaSerializer(this);
  317.     }
  318.    
  319.    
  320.     /* ** DUMP ** */
  321.    
  322.     @Override
  323.     public IDumpProducer createDumpProducer() throws ProtocolException{
  324.         return new org.openspcoop2.protocol.basic.dump.DumpProducer(this);
  325.     }
  326.    
  327.    
  328.     /* ** ARCHIVE ** */
  329.    
  330.     @Override
  331.     public IArchive createArchive() throws ProtocolException{
  332.         return new BasicArchive(this);
  333.     }
  334.    
  335.    
  336.     /* ** CONFIG ** */
  337.    
  338.     private static Map<org.openspcoop2.protocol.sdk.config.ITraduttore> staticInstanceTraduttore = null;
  339.     private static synchronized void initStaticInstanceTraduttore() {
  340.         if(staticInstanceTraduttore==null) {
  341.             staticInstanceTraduttore = new Map<org.openspcoop2.protocol.sdk.config.ITraduttore>();
  342.         }
  343.     }
  344.     @Override
  345.     public org.openspcoop2.protocol.sdk.config.ITraduttore createTraduttore()  throws ProtocolException{
  346.         if(staticInstanceTraduttore!=null) {
  347.             org.openspcoop2.protocol.sdk.config.ITraduttore traduttore = staticInstanceTraduttore.get(this.getProtocolMapKey());
  348.             if(traduttore==null) {
  349.                 initTraduttore(this.getProtocolMapKey());
  350.                 traduttore = staticInstanceTraduttore.get(this.getProtocolMapKey());
  351.             }
  352.             return traduttore;
  353.         }
  354.         else {
  355.             return new BasicTraduttore(this);
  356.         }
  357.     }
  358.     private synchronized void initTraduttore(MapKey<String> protocolMapKey) throws ProtocolException {
  359.         if(!staticInstanceTraduttore.containsKey(protocolMapKey)) {
  360.             staticInstanceTraduttore.put(protocolMapKey, new BasicTraduttore(this));
  361.         }
  362.     }
  363.    
  364.     private static Map<org.openspcoop2.protocol.sdk.config.IProtocolIntegrationConfiguration> staticInstanceProtocolIntegrationConfiguration = null;
  365.     private static synchronized void initStaticInstanceProtocolIntegrationConfiguration() {
  366.         if(staticInstanceProtocolIntegrationConfiguration==null) {
  367.             staticInstanceProtocolIntegrationConfiguration = new Map<org.openspcoop2.protocol.sdk.config.IProtocolIntegrationConfiguration>();
  368.         }
  369.     }
  370.     @Override
  371.     public IProtocolIntegrationConfiguration createProtocolIntegrationConfiguration() throws ProtocolException{
  372.         if(staticInstanceProtocolIntegrationConfiguration!=null) {
  373.             IProtocolIntegrationConfiguration config = staticInstanceProtocolIntegrationConfiguration.get(this.getProtocolMapKey());
  374.             if(config==null) {
  375.                 initProtocolIntegrationConfiguration(this.getProtocolMapKey());
  376.                 config = staticInstanceProtocolIntegrationConfiguration.get(this.getProtocolMapKey());
  377.             }
  378.             return config;
  379.         }
  380.         else {
  381.             return new BasicProtocolIntegrationConfiguration(this);
  382.         }
  383.     }
  384.     private synchronized void initProtocolIntegrationConfiguration(MapKey<String> protocolMapKey) throws ProtocolException {
  385.         if(!staticInstanceProtocolIntegrationConfiguration.containsKey(protocolMapKey)) {
  386.             staticInstanceProtocolIntegrationConfiguration.put(protocolMapKey, new BasicProtocolIntegrationConfiguration(this));
  387.         }
  388.     }

  389.    
  390.     /* ** CONSOLE ** */
  391.    
  392.     @Override
  393.     public IConsoleDynamicConfiguration createDynamicConfigurationConsole() throws ProtocolException{
  394.         return new BasicDynamicConfiguration(this);
  395.     }
  396.    
  397.    
  398.     /* ** REGISTRY  ** */
  399.    
  400.     @Override
  401.     public IRegistryReader getRegistryReader(IDriverRegistroServiziGet driverRegistry) throws ProtocolException{
  402.         try{
  403.             return new RegistryReader(driverRegistry, this.log);
  404.         }catch(Exception e){
  405.             throw new ProtocolException(e.getMessage(),e);
  406.         }
  407.     }
  408.     @Override
  409.     public IRegistryReader getCachedRegistryReader(IState state, RequestInfo requestInfo) throws ProtocolException{
  410.         try{
  411.             return new CachedRegistryReader(this.log, this, state, requestInfo);
  412.         }catch(Exception e){
  413.             throw new ProtocolException(e.getMessage(),e);
  414.         }
  415.     }
  416.     @Override
  417.     public IRegistryReader getCachedRegistryReader(Object registryReader, RequestInfo requestInfo) throws ProtocolException{
  418.         try{
  419.             return new CachedRegistryReader(this.log, this, (RegistroServiziManager)registryReader, requestInfo);
  420.         }catch(Exception e){
  421.             throw new ProtocolException(e.getMessage(),e);
  422.         }
  423.     }
  424.     @Override
  425.     public IConfigIntegrationReader getConfigIntegrationReader(IDriverConfigurazioneGet driver) throws ProtocolException{
  426.         try{
  427.             return new ConfigIntegrationReader(driver, this.log);
  428.         }catch(Exception e){
  429.             throw new ProtocolException(e.getMessage(),e);
  430.         }
  431.     }
  432.     @Override
  433.     public IConfigIntegrationReader getCachedConfigIntegrationReader(IState state, RequestInfo requestInfo) throws ProtocolException{
  434.         try{
  435.             Class<?> c = Class.forName("org.openspcoop2.pdd.config.CachedConfigIntegrationReader");
  436.             return (IConfigIntegrationReader) c.getConstructor(Logger.class,IProtocolFactory.class,IState.class,RequestInfo.class).
  437.                 newInstance(this.log,this,state,requestInfo);
  438.         }catch(Exception e){
  439.             throw new ProtocolException(e.getMessage(),e);
  440.         }
  441.     }
  442.     @Override
  443.     public IConfigIntegrationReader getCachedConfigIntegrationReader(Object configReader, RequestInfo requestInfo) throws ProtocolException{
  444.         try{
  445.             Class<?> cConfigurazionePdDManager = Class.forName("org.openspcoop2.pdd.config.ConfigurazionePdDManager");
  446.             Class<?> c = Class.forName("org.openspcoop2.pdd.config.CachedConfigIntegrationReader");
  447.             return (IConfigIntegrationReader) c.getConstructor(Logger.class,IProtocolFactory.class,cConfigurazionePdDManager,RequestInfo.class).
  448.                 newInstance(this.log,this,configReader,requestInfo);
  449.         }catch(Exception e){
  450.             throw new ProtocolException(e.getMessage(),e);
  451.         }
  452.     }

  453. }