ExporterArchiveUtils.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.engine.archive;

  21. import java.io.OutputStream;
  22. import java.util.ArrayList;
  23. import java.util.List;

  24. import org.apache.commons.lang.StringUtils;
  25. import org.openspcoop2.core.allarmi.Allarme;
  26. import org.openspcoop2.core.allarmi.IdAllarme;
  27. import org.openspcoop2.core.config.AttributeAuthority;
  28. import org.openspcoop2.core.config.Configurazione;
  29. import org.openspcoop2.core.config.ConfigurazioneHandler;
  30. import org.openspcoop2.core.config.ConfigurazioneUrlInvocazione;
  31. import org.openspcoop2.core.config.ConfigurazioneUrlInvocazioneRegola;
  32. import org.openspcoop2.core.config.GenericProperties;
  33. import org.openspcoop2.core.config.PortaApplicativa;
  34. import org.openspcoop2.core.config.PortaApplicativaAutorizzazioneServizioApplicativo;
  35. import org.openspcoop2.core.config.PortaApplicativaAutorizzazioneSoggetto;
  36. import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
  37. import org.openspcoop2.core.config.PortaDelegata;
  38. import org.openspcoop2.core.config.PortaDelegataServizioApplicativo;
  39. import org.openspcoop2.core.config.Property;
  40. import org.openspcoop2.core.config.Ruolo;
  41. import org.openspcoop2.core.config.Scope;
  42. import org.openspcoop2.core.config.ServizioApplicativo;
  43. import org.openspcoop2.core.config.TrasformazioneRegola;
  44. import org.openspcoop2.core.config.TrasformazioneRegolaApplicabilitaServizioApplicativo;
  45. import org.openspcoop2.core.config.TrasformazioneRegolaApplicabilitaSoggetto;
  46. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  47. import org.openspcoop2.core.config.constants.TipoAutenticazione;
  48. import org.openspcoop2.core.config.constants.TipoAutorizzazione;
  49. import org.openspcoop2.core.config.constants.TipoBehaviour;
  50. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  51. import org.openspcoop2.core.config.driver.FiltroRicercaPorteApplicative;
  52. import org.openspcoop2.core.config.driver.FiltroRicercaPorteDelegate;
  53. import org.openspcoop2.core.config.driver.FiltroRicercaServiziApplicativi;
  54. import org.openspcoop2.core.constants.CostantiConnettori;
  55. import org.openspcoop2.core.constants.CostantiDB;
  56. import org.openspcoop2.core.constants.TipiConnettore;
  57. import org.openspcoop2.core.controllo_traffico.AttivazionePolicy;
  58. import org.openspcoop2.core.controllo_traffico.ConfigurazionePolicy;
  59. import org.openspcoop2.core.controllo_traffico.IdActivePolicy;
  60. import org.openspcoop2.core.controllo_traffico.IdPolicy;
  61. import org.openspcoop2.core.controllo_traffico.constants.TipoFiltroApplicativo;
  62. import org.openspcoop2.core.id.IDAccordo;
  63. import org.openspcoop2.core.id.IDAccordoCooperazione;
  64. import org.openspcoop2.core.id.IDFruizione;
  65. import org.openspcoop2.core.id.IDGenericProperties;
  66. import org.openspcoop2.core.id.IDGruppo;
  67. import org.openspcoop2.core.id.IDPortaApplicativa;
  68. import org.openspcoop2.core.id.IDPortaDelegata;
  69. import org.openspcoop2.core.id.IDRuolo;
  70. import org.openspcoop2.core.id.IDScope;
  71. import org.openspcoop2.core.id.IDServizio;
  72. import org.openspcoop2.core.id.IDServizioApplicativo;
  73. import org.openspcoop2.core.id.IDSoggetto;
  74. import org.openspcoop2.core.plugins.IdPlugin;
  75. import org.openspcoop2.core.plugins.constants.TipoPlugin;
  76. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  77. import org.openspcoop2.core.registry.AccordoServizioParteComuneServizioCompostoServizioComponente;
  78. import org.openspcoop2.core.registry.ConfigurazioneServizioAzione;
  79. import org.openspcoop2.core.registry.Fruitore;
  80. import org.openspcoop2.core.registry.GruppoAccordo;
  81. import org.openspcoop2.core.registry.IdSoggetto;
  82. import org.openspcoop2.core.registry.RuoloSoggetto;
  83. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  84. import org.openspcoop2.core.registry.driver.FiltroRicerca;
  85. import org.openspcoop2.core.registry.driver.FiltroRicercaAccordi;
  86. import org.openspcoop2.core.registry.driver.FiltroRicercaGruppi;
  87. import org.openspcoop2.core.registry.driver.FiltroRicercaRuoli;
  88. import org.openspcoop2.core.registry.driver.FiltroRicercaScope;
  89. import org.openspcoop2.core.registry.driver.FiltroRicercaServizi;
  90. import org.openspcoop2.core.registry.driver.FiltroRicercaSoggetti;
  91. import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
  92. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  93. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  94. import org.openspcoop2.protocol.basic.registry.ConfigIntegrationReader;
  95. import org.openspcoop2.protocol.basic.registry.RegistryReader;
  96. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  97. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  98. import org.openspcoop2.protocol.sdk.ProtocolException;
  99. import org.openspcoop2.protocol.sdk.archive.Archive;
  100. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoCooperazione;
  101. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioComposto;
  102. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioParteComune;
  103. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioParteSpecifica;
  104. import org.openspcoop2.protocol.sdk.archive.ArchiveActivePolicy;
  105. import org.openspcoop2.protocol.sdk.archive.ArchiveAllarme;
  106. import org.openspcoop2.protocol.sdk.archive.ArchiveAttributeAuthority;
  107. import org.openspcoop2.protocol.sdk.archive.ArchiveCascadeConfiguration;
  108. import org.openspcoop2.protocol.sdk.archive.ArchiveConfigurationPolicy;
  109. import org.openspcoop2.protocol.sdk.archive.ArchiveFruitore;
  110. import org.openspcoop2.protocol.sdk.archive.ArchiveGruppo;
  111. import org.openspcoop2.protocol.sdk.archive.ArchiveIdCorrelazione;
  112. import org.openspcoop2.protocol.sdk.archive.ArchiveMode;
  113. import org.openspcoop2.protocol.sdk.archive.ArchivePdd;
  114. import org.openspcoop2.protocol.sdk.archive.ArchivePluginArchivio;
  115. import org.openspcoop2.protocol.sdk.archive.ArchivePluginClasse;
  116. import org.openspcoop2.protocol.sdk.archive.ArchivePortaApplicativa;
  117. import org.openspcoop2.protocol.sdk.archive.ArchivePortaDelegata;
  118. import org.openspcoop2.protocol.sdk.archive.ArchiveRuolo;
  119. import org.openspcoop2.protocol.sdk.archive.ArchiveScope;
  120. import org.openspcoop2.protocol.sdk.archive.ArchiveServizioApplicativo;
  121. import org.openspcoop2.protocol.sdk.archive.ArchiveSoggetto;
  122. import org.openspcoop2.protocol.sdk.archive.ArchiveTokenPolicy;
  123. import org.openspcoop2.protocol.sdk.archive.ArchiveUrlInvocazioneRegola;
  124. import org.openspcoop2.protocol.sdk.archive.IArchive;
  125. import org.openspcoop2.protocol.sdk.constants.ArchiveType;
  126. import org.slf4j.Logger;


  127. /**
  128.  * ExporterArchiveUtils
  129.  *
  130.  * @author Poli Andrea (apoli@link.it)
  131.  * @author $Author$
  132.  * @version $Rev$, $Date$
  133.  */
  134. public class ExporterArchiveUtils {

  135.     private AbstractArchiveEngine archiveEngine;
  136.     private Logger log;
  137.     private ProtocolFactoryManager protocolFactoryManager;
  138.     private ArchiveIdCorrelazione idCorrelazione = null;
  139.    
  140.     public ExporterArchiveUtils(AbstractArchiveEngine archiveEngine,Logger log) throws Exception{
  141.         this.archiveEngine = archiveEngine;
  142.         this.log = log;
  143.         this.protocolFactoryManager = ProtocolFactoryManager.getInstance();
  144.         this.idCorrelazione = new ArchiveIdCorrelazione("export"); // non necessario in questa funzione. Comunque viene qua usata una variabile se servisse in futuro
  145.     }
  146.    
  147.     public void export(String protocol,Archive archive,OutputStream out,ArchiveMode mode) throws Exception{
  148.         IProtocolFactory<?> protocolFactory = this.protocolFactoryManager.getProtocolFactoryByName(protocol);
  149.         IArchive archiveEngine = protocolFactory.createArchive();
  150.         RegistryReader archiveRegistryReader = new RegistryReader(this.archiveEngine.getDriverRegistroServizi(),this.log);
  151.         ConfigIntegrationReader archiveConfigIntegrationReader = new ConfigIntegrationReader(this.archiveEngine.getDriverConfigurazione(),this.log);
  152.         archiveEngine.exportArchive(archive, out, mode, archiveRegistryReader, archiveConfigIntegrationReader);
  153.     }
  154.    
  155.     public byte[] export(String protocol,Archive archive,ArchiveMode mode) throws Exception{
  156.         IProtocolFactory<?> protocolFactory = this.protocolFactoryManager.getProtocolFactoryByName(protocol);
  157.         IArchive archiveEngine = protocolFactory.createArchive();
  158.         RegistryReader archiveRegistryReader = new RegistryReader(this.archiveEngine.getDriverRegistroServizi(),this.log);
  159.         ConfigIntegrationReader archiveConfigIntegrationReader = new ConfigIntegrationReader(this.archiveEngine.getDriverConfigurazione(),this.log);
  160.         return archiveEngine.exportArchive(archive, mode, archiveRegistryReader, archiveConfigIntegrationReader);
  161.     }
  162.    
  163.     public void fillArchive(Archive archive, ArchiveType exportSourceArchiveType,List<?> listObject, ArchiveCascadeConfiguration cascadeConfig) throws Exception{
  164.        
  165.         // La navigazione dell'albero degli oggetti avviente con le chiamate effettuate di seguito.
  166.         //
  167.         // Per ogni oggetto e' possibile identificare:
  168.         //  - gli oggetti che lo riferiscono (cascadeAvanti)
  169.         //  - gli oggetti che lui riferisce (dipendenza)
  170.         //
  171.         // Un oggetto (catalogato come servizioApplicativo,pa,pd,accordo....) viene aggiunto all'archivio SOLO SE e' richiesto dalla configurazione di cascade.
  172.         //
  173.         // Gli oggetti che vengono riferiti da un oggetto (dipendenza) vengono navigati SOLO SE l'oggetto e' stato aggiunto all'archivio (e quindi abilitato dalla configurazione di cascade).
  174.         // Saranno aggiunti pero' solo se poi essi stessi sono richiesti dalla configurazione di cascade.
  175.         //
  176.         // Gli oggetti che lo riferiscono (cascadeAvanti) sono sempre navigati.
  177.         // Anche questi pero' saranno aggiunti solo se poi essi stessi sono richiesti dalla configurazione di cascade.
  178.         //
  179.         // Con questo approccio la navigazione e' sempre completa verso gli oggetti che lo riferiscono (cascadeAvanti)
  180.         // mentre gli oggetti padre sono navigati solo se l'oggetto e' abilitato dalla configurazione di cascade.
  181.         //
  182.         // L'utente che configura il cascade puo' di fatto implementare una navigazione che tronca un ramo se disattiva il cascade di tutti i sotto elementi.
  183.         // Fanno eccezione i servizi applicativi per i quali esiste piu' di un padre. In questo caso si esamina il padre:
  184.         // - nel caso di padre=soggetto/sa si vede esclusivamente il cascade dei servizi applicativi
  185.         // - nel caso di padre=porta delegata si controlla sia il cascade dei servizi applicativi che il cascade della porta delegata
  186.         // - nel caso di padre=porta applicativa si controlla sia il cascade dei servizi applicativi che il cascade della porta applicativa
  187.         // - nel caso di padre=fruitore si controlla sia il cascade dei servizi applicativi che il cascade delle fruizioni
  188.        
  189.         switch (exportSourceArchiveType) {
  190.         case PDD:
  191.             for (Object object : listObject) {
  192.                 this.readPdd(archive, (String)object, cascadeConfig, exportSourceArchiveType);
  193.             }
  194.             break;
  195.         case GRUPPO:
  196.             for (Object object : listObject) {
  197.                 this.readGruppo(archive, (IDGruppo)object, cascadeConfig, exportSourceArchiveType);
  198.             }
  199.             break;
  200.         case RUOLO:
  201.             for (Object object : listObject) {
  202.                 this.readRuolo(archive, (IDRuolo)object, cascadeConfig, exportSourceArchiveType);
  203.             }
  204.             break;
  205.         case SCOPE:
  206.             for (Object object : listObject) {
  207.                 this.readScope(archive, (IDScope)object, cascadeConfig, exportSourceArchiveType);
  208.             }
  209.             break;
  210.         case SOGGETTO:
  211.             for (Object object : listObject) {
  212.                 this.readSoggetto(archive, (IDSoggetto)object, cascadeConfig, exportSourceArchiveType);
  213.             }
  214.             break;
  215.         case SERVIZIO_APPLICATIVO:
  216.             for (Object object : listObject) {
  217.                 this.readServizioApplicativo(archive, (IDServizioApplicativo)object, cascadeConfig, exportSourceArchiveType);
  218.             }
  219.             break;
  220.         case PORTA_DELEGATA:
  221.             for (Object object : listObject) {
  222.                 this.readPortaDelegata(archive, (IDPortaDelegata)object, cascadeConfig, exportSourceArchiveType);
  223.             }
  224.             break;
  225.         case PORTA_APPLICATIVA:
  226.             for (Object object : listObject) {
  227.                 this.readPortaApplicativa(archive, (IDPortaApplicativa)object, cascadeConfig, exportSourceArchiveType);
  228.             }
  229.             break;
  230.         case ACCORDO_COOPERAZIONE:
  231.             for (Object object : listObject) {
  232.                 this.readAccordoCooperazione(archive, (IDAccordoCooperazione)object, cascadeConfig, exportSourceArchiveType);
  233.             }
  234.             break;
  235.         case ACCORDO_SERVIZIO_PARTE_COMUNE:
  236.             for (Object object : listObject) {
  237.                 this.readAccordoServizioParteComune(archive, (IDAccordo)object, cascadeConfig, exportSourceArchiveType);
  238.             }
  239.             break;
  240.         case ACCORDO_SERVIZIO_COMPOSTO:
  241.             for (Object object : listObject) {
  242.                 this.readAccordoServizioComposto(archive, (IDAccordo)object, cascadeConfig, exportSourceArchiveType);
  243.             }
  244.             break;
  245.         case ACCORDO_SERVIZIO_PARTE_SPECIFICA:
  246.             for (Object object : listObject) {
  247.                 this.readAccordoServizioParteSpecifica(archive, (IDServizio)object, cascadeConfig, exportSourceArchiveType);
  248.             }
  249.             break;
  250.         case EROGAZIONE:
  251.             for (Object object : listObject) {
  252.                 this.readErogazione(archive, (IDServizio)object, cascadeConfig);
  253.             }
  254.             break;
  255.         case FRUIZIONE:
  256.             for (Object object : listObject) {
  257.                 this.readFruizione(archive, (IDFruizione)object, cascadeConfig);
  258.             }
  259.             break;
  260.         case CONFIGURAZIONE_CONTROLLO_TRAFFICO_CONFIG_POLICY:
  261.             for (Object object : listObject) {
  262.                 this.readControlloTraffico_configurationPolicy(archive, (IdPolicy) object, cascadeConfig, exportSourceArchiveType);
  263.             }
  264.             break;
  265.         case CONFIGURAZIONE_CONTROLLO_TRAFFICO_ACTIVE_POLICY:
  266.             for (Object object : listObject) {
  267.                 this.readControlloTraffico_activePolicy(archive, (IdActivePolicy) object, cascadeConfig, exportSourceArchiveType);
  268.             }
  269.             break;
  270.         case ALLARME:
  271.             for (Object object : listObject) {
  272.                 this.readAllarme(archive, (IdAllarme) object, cascadeConfig, exportSourceArchiveType);
  273.             }
  274.             break;
  275.         case CONFIGURAZIONE_TOKEN_POLICY:
  276.             for (Object object : listObject) {
  277.                 this.readTokenPolicy(archive, (IDGenericProperties) object, cascadeConfig, exportSourceArchiveType);
  278.             }
  279.             break;
  280.         case CONFIGURAZIONE_ATTRIBUTE_AUTHORITY:
  281.             for (Object object : listObject) {
  282.                 this.readAttributeAuthority(archive, (IDGenericProperties) object, cascadeConfig, exportSourceArchiveType);
  283.             }
  284.             break;
  285.         case CONFIGURAZIONE_PLUGIN_CLASSE:
  286.             for (Object object : listObject) {
  287.                 this.readPlugin_classe(archive, (IdPlugin) object, cascadeConfig, exportSourceArchiveType);
  288.             }
  289.             break;
  290.         case CONFIGURAZIONE_PLUGIN_ARCHVIO:
  291.             for (Object object : listObject) {
  292.                 this.readPlugin_archivio(archive, (String) object, cascadeConfig, exportSourceArchiveType);
  293.             }
  294.             break;
  295.         case CONFIGURAZIONE_URL_INVOCAZIONE_REGOLA:
  296.             for (Object object : listObject) {
  297.                 this.readUrlInvocazioneRegola(archive, (String) object, cascadeConfig);
  298.             }
  299.             break;
  300.         case CONFIGURAZIONE_URL_INVOCAZIONE:
  301.             setConfigurazioneUrlInvocazione(archive);
  302.             break;
  303.         case CONFIGURAZIONE:
  304.             readControlloTrafficoConfigurazione(archive, true, false, exportSourceArchiveType);
  305.             readAllarmiConfigurazione(archive, true, false, exportSourceArchiveType);
  306.             readTokenPolicyConfigurazione(archive, exportSourceArchiveType);
  307.             readAttributeAuthorityConfigurazione(archive, exportSourceArchiveType);
  308.             readPluginConfigurazione(archive, exportSourceArchiveType);
  309.            
  310.             setConfigurazione(archive);
  311.            
  312.             // aggiungo gruppi 'zombie'
  313.             FiltroRicercaGruppi filtroRicercaGruppi = new FiltroRicercaGruppi();
  314.             List<IDGruppo> idGruppi = null;
  315.             try{
  316.                 idGruppi = this.archiveEngine.getAllIdGruppi(filtroRicercaGruppi);
  317.                 for (IDGruppo idGruppo : idGruppi) {
  318.                     boolean found = false;
  319.                     if(archive.getGruppi()!=null && archive.getGruppi().size()>0){
  320.                         for (String idArchiveGruppo : archive.getGruppi().keys()) {
  321.                             ArchiveGruppo archiveGruppo = archive.getGruppi().get(idArchiveGruppo);
  322.                             if(archiveGruppo.getIdGruppo().equals(idGruppo)){
  323.                                 found = true;
  324.                                 break;
  325.                             }
  326.                         }
  327.                     }
  328.                     if(!found){
  329.                         this.readGruppo(archive, idGruppo, cascadeConfig, false, ArchiveType.GRUPPO);
  330.                     }
  331.                 }
  332.             }catch(DriverRegistroServiziNotFound notFound){}
  333.            
  334.             break;
  335.         case ALL:
  336.         case ALL_WITHOUT_CONFIGURAZIONE:
  337.            
  338.             // soggetti e tutti gli oggetti interni
  339.             FiltroRicercaSoggetti filtroSoggetti = new FiltroRicercaSoggetti();
  340.             try{
  341.                 ArchiveCascadeConfiguration cascadeAll = new ArchiveCascadeConfiguration(true);
  342.                 List<IDSoggetto> idsSoggetti = this.archiveEngine.getAllIdSoggettiRegistro(filtroSoggetti);
  343.                 if(idsSoggetti!=null && idsSoggetti.size()>0){
  344.                     for (IDSoggetto idSoggetto : idsSoggetti) {
  345.                         this.readSoggetto(archive, idSoggetto, cascadeAll, exportSourceArchiveType); // vengono prese anche le pdd
  346.                     }
  347.                 }
  348.             }catch(DriverConfigurazioneNotFound notFound){}
  349.            
  350.             // configurazione solo se richiesta
  351.             //boolean loadActivePolicyFruizioneErogazione = true;
  352.             boolean loadActivePolicyFruizioneErogazione = false; // vengono gia' caricate da sopra con il cascade sui soggetti, che arriva sulle PD e PA
  353.             boolean loadAllarmiErogazioneFruizione = false; // vale lo stesso motivo delle policy, vengono già caricate sopra con il cascade dei soggetti
  354.             if(exportSourceArchiveType.equals(ArchiveType.ALL)){
  355.                 readControlloTrafficoConfigurazione(archive, true, loadActivePolicyFruizioneErogazione, exportSourceArchiveType);
  356.                 readAllarmiConfigurazione(archive, true, loadAllarmiErogazioneFruizione, exportSourceArchiveType);
  357.                 readTokenPolicyConfigurazione(archive, exportSourceArchiveType);
  358.                 readAttributeAuthorityConfigurazione(archive, exportSourceArchiveType);
  359.                 readPluginConfigurazione(archive, exportSourceArchiveType);
  360.                 setConfigurazione(archive);
  361.             }
  362.             else if(exportSourceArchiveType.equals(ArchiveType.ALL_WITHOUT_CONFIGURAZIONE)){
  363.                 readControlloTrafficoConfigurazione(archive, false, loadActivePolicyFruizioneErogazione, exportSourceArchiveType);
  364.                 readAllarmiConfigurazione(archive, false, loadAllarmiErogazioneFruizione, exportSourceArchiveType);
  365.             }
  366.            
  367.             // aggiungo porte di dominio 'zombie'
  368.             FiltroRicerca filtroRicercaPdd = new FiltroRicerca();
  369.             List<String> idPdds = null;
  370.             try{
  371.                 idPdds = this.archiveEngine.getAllIdPorteDominio(filtroRicercaPdd);
  372.                 for (String idPdd : idPdds) {
  373.                     boolean found = false;
  374.                     if(archive.getPdd()!=null && archive.getPdd().size()>0){
  375.                         for (String idArchivePdd : archive.getPdd().keys()) {
  376.                             ArchivePdd archivePdd = archive.getPdd().get(idArchivePdd);
  377.                             if(archivePdd.getNomePdd().equals(idPdd)){
  378.                                 found = true;
  379.                                 break;
  380.                             }
  381.                         }
  382.                     }
  383.                     if(!found){
  384.                         this.readPdd(archive, idPdd, cascadeConfig, false, ArchiveType.PDD);
  385.                     }
  386.                 }
  387.             }catch(DriverRegistroServiziNotFound notFound){}
  388.            
  389.             // aggiungo gruppi 'zombie'
  390.             if(exportSourceArchiveType.equals(ArchiveType.ALL)){
  391.                 filtroRicercaGruppi = new FiltroRicercaGruppi();
  392.                 idGruppi = null;
  393.                 try{
  394.                     idGruppi = this.archiveEngine.getAllIdGruppi(filtroRicercaGruppi);
  395.                     for (IDGruppo idGruppo : idGruppi) {
  396.                         boolean found = false;
  397.                         if(archive.getGruppi()!=null && archive.getGruppi().size()>0){
  398.                             for (String idArchiveGruppo : archive.getGruppi().keys()) {
  399.                                 ArchiveGruppo archiveGruppo = archive.getGruppi().get(idArchiveGruppo);
  400.                                 if(archiveGruppo.getIdGruppo().equals(idGruppo)){
  401.                                     found = true;
  402.                                     break;
  403.                                 }
  404.                             }
  405.                         }
  406.                         if(!found){
  407.                             this.readGruppo(archive, idGruppo, cascadeConfig, false, ArchiveType.GRUPPO);
  408.                         }
  409.                     }
  410.                 }catch(DriverRegistroServiziNotFound notFound){}
  411.             }
  412.            
  413.             // aggiungo ruoli 'zombie'
  414.             FiltroRicercaRuoli filtroRicercaRuoli = new FiltroRicercaRuoli();
  415.             List<IDRuolo> idRuoli = null;
  416.             try{
  417.                 idRuoli = this.archiveEngine.getAllIdRuoli(filtroRicercaRuoli);
  418.                 for (IDRuolo idRuolo : idRuoli) {
  419.                     boolean found = false;
  420.                     if(archive.getRuoli()!=null && archive.getRuoli().size()>0){
  421.                         for (String idArchiveRuolo : archive.getRuoli().keys()) {
  422.                             ArchiveRuolo archiveRuolo = archive.getRuoli().get(idArchiveRuolo);
  423.                             if(archiveRuolo.getIdRuolo().equals(idRuolo)){
  424.                                 found = true;
  425.                                 break;
  426.                             }
  427.                         }
  428.                     }
  429.                     if(!found){
  430.                         this.readRuolo(archive, idRuolo, cascadeConfig, false, ArchiveType.RUOLO);
  431.                     }
  432.                 }
  433.             }catch(DriverRegistroServiziNotFound notFound){}
  434.            
  435.             // aggiungo scope 'zombie'
  436.             FiltroRicercaScope filtroRicercaScope = new FiltroRicercaScope();
  437.             List<IDScope> idScopes = null;
  438.             try{
  439.                 idScopes = this.archiveEngine.getAllIdScope(filtroRicercaScope);
  440.                 for (IDScope idScope : idScopes) {
  441.                     boolean found = false;
  442.                     if(archive.getScope()!=null && archive.getScope().size()>0){
  443.                         for (String idArchiveScope : archive.getScope().keys()) {
  444.                             ArchiveScope archiveScope = archive.getScope().get(idArchiveScope);
  445.                             if(archiveScope.getIdScope().equals(idScope)){
  446.                                 found = true;
  447.                                 break;
  448.                             }
  449.                         }
  450.                     }
  451.                     if(!found){
  452.                         this.readScope(archive, idScope, cascadeConfig, false, ArchiveType.SCOPE);
  453.                     }
  454.                 }
  455.             }catch(DriverRegistroServiziNotFound notFound){}
  456.                
  457.             break;
  458.         default:
  459.             break;
  460.         }
  461.        
  462.     }
  463.    
  464.     private void setConfigurazione(Archive archive) throws Exception {
  465.         Configurazione configurazione = this.archiveEngine.getConfigurazione();
  466.         _setConfigurazioneUrlInvocazione(archive, configurazione);  
  467.         archive.setConfigurazionePdD(configurazione);
  468.     }
  469.    
  470.     private void setConfigurazioneUrlInvocazione(Archive archive) throws Exception {
  471.         Configurazione configurazione = this.archiveEngine.getConfigurazione();
  472.         _setConfigurazioneUrlInvocazione(archive, configurazione);  
  473.     }
  474.     private void _setConfigurazioneUrlInvocazione(Archive archive, Configurazione configurazione) throws Exception {
  475.         if(configurazione!=null && configurazione.getUrlInvocazione()!=null) {
  476.             ConfigurazioneUrlInvocazione urlInvocazione = configurazione.getUrlInvocazione();
  477.             while(urlInvocazione.sizeRegolaList()>0) {
  478.                 ConfigurazioneUrlInvocazioneRegola regola = urlInvocazione.removeRegola(0);
  479.                
  480.                 String key = ArchiveUrlInvocazioneRegola.buildKey(regola.getNome());
  481.                 if(!archive.getConfigurazionePdD_urlInvocazione_regole().containsKey(key)){
  482.                     archive.getConfigurazionePdD_urlInvocazione_regole().add(new ArchiveUrlInvocazioneRegola(regola, this.idCorrelazione));
  483.                 }
  484.             }
  485.             archive.setConfigurazionePdD_urlInvocazione(urlInvocazione);
  486.         }
  487.     }
  488.    
  489.     private void readUrlInvocazioneRegola(Archive archive, String nome, ArchiveCascadeConfiguration cascadeConfig) throws Exception {
  490.        
  491.         String key = ArchiveUrlInvocazioneRegola.buildKey(nome);
  492.         if(archive.getConfigurazionePdD_urlInvocazione_regole().containsKey(key)){
  493.             // gia gestito
  494.         }
  495.         else{
  496.             archive.getConfigurazionePdD_urlInvocazione_regole().add(new ArchiveUrlInvocazioneRegola(this.archiveEngine.getUrlInvocazioneRegola(nome), this.idCorrelazione));
  497.         }
  498.        
  499.     }
  500.    
  501.     private void readControlloTrafficoConfigurazione(Archive archive, boolean policyGlobali, boolean policyFruizioniErogazioni, ArchiveType provenienza) throws Exception {
  502.        
  503.         archive.setControlloTraffico_configurazione(this.archiveEngine.getControlloTraffico_Configurazione());
  504.        
  505.         List<IdPolicy> listControlloTraffico_configurationPolicies = null;
  506.         try {
  507.             listControlloTraffico_configurationPolicies = this.archiveEngine.getAllIdControlloTraffico_configurationPolicies();
  508.         }catch(DriverConfigurazioneNotFound notFound) {}
  509.         if(policyGlobali) {
  510.             if(listControlloTraffico_configurationPolicies!=null && listControlloTraffico_configurationPolicies.size()>0) {
  511.                 for (IdPolicy idPolicy : listControlloTraffico_configurationPolicies) {
  512.                    
  513.                     String keyPolicyConfig = ArchiveConfigurationPolicy.buildKey(idPolicy.getNome());
  514.                     if(archive.getControlloTraffico_configurationPolicies().containsKey(keyPolicyConfig)==false) {
  515.                    
  516.                         archive.getControlloTraffico_configurationPolicies().add(new ArchiveConfigurationPolicy(
  517.                                 this.archiveEngine.getControlloTraffico_configurationPolicy(idPolicy),
  518.                                 this.idCorrelazione));
  519.                        
  520.                     }
  521.                 }
  522.             }
  523.         }
  524.         else {
  525.             // le aggiungo dopo: aggiungo le policy configurate solamente realmente utilizzate.
  526.         }
  527.        
  528.         List<IdActivePolicy> listControlloTraffico_activePolicies = null;
  529.         try {
  530.             if(policyGlobali && policyFruizioniErogazioni) {
  531.                 listControlloTraffico_activePolicies = this.archiveEngine.getAllIdControlloTraffico_activePolicies_all(null);
  532.             }
  533.             else if(policyGlobali) {
  534.                 listControlloTraffico_activePolicies = this.archiveEngine.getAllIdControlloTraffico_activePolicies_globali(null);
  535.             }
  536.             else if(policyFruizioniErogazioni) {
  537.                 listControlloTraffico_activePolicies = this.archiveEngine.getAllIdControlloTraffico_activePolicies_erogazioniFruizioni(null);
  538.             }
  539.         }catch(DriverConfigurazioneNotFound notFound) {}
  540.         if(listControlloTraffico_activePolicies!=null && listControlloTraffico_activePolicies.size()>0) {
  541.             for (IdActivePolicy idPolicy : listControlloTraffico_activePolicies) {
  542.                
  543.                 AttivazionePolicy policy = null;
  544.                
  545.                 String keyActivePolicy = ArchiveActivePolicy.buildKey(idPolicy.getFiltroRuoloPorta(), idPolicy.getFiltroNomePorta(), idPolicy.getAlias());
  546.                 if(archive.getControlloTraffico_activePolicies().containsKey(keyActivePolicy)==false) {
  547.                    
  548.                     policy = this.archiveEngine.getControlloTraffico_activePolicy(idPolicy.getFiltroRuoloPorta(), idPolicy.getFiltroNomePorta(), idPolicy.getAlias());
  549.                    
  550.                     archive.getControlloTraffico_activePolicies().add(new ArchiveActivePolicy(
  551.                             policy,
  552.                             this.idCorrelazione));  
  553.                 }
  554.                                
  555.                 if(!policyGlobali) {
  556.                     // aggiungo le policy configurate solamente realmente utilizzate.
  557.                    
  558.                     String keyPolicyConfig = ArchiveConfigurationPolicy.buildKey(idPolicy.getIdPolicy());
  559.                     if(archive.getControlloTraffico_configurationPolicies().containsKey(keyPolicyConfig)==false) {
  560.                    
  561.                         if(listControlloTraffico_configurationPolicies!=null && listControlloTraffico_configurationPolicies.size()>0) {
  562.                             for (IdPolicy idConfigPolicy : listControlloTraffico_configurationPolicies) {
  563.                                 if(idConfigPolicy.getNome().equals(idPolicy.getIdPolicy())) {
  564.                                     archive.getControlloTraffico_configurationPolicies().add(new ArchiveConfigurationPolicy(
  565.                                             this.archiveEngine.getControlloTraffico_configurationPolicy(idConfigPolicy),
  566.                                             this.idCorrelazione));
  567.                                     break;
  568.                                 }
  569.                             }
  570.                         }
  571.                        
  572.                     }
  573.                    
  574.                     // aggiungo i plugin configurate solamente realmente utilizzate.
  575.                     if(policy!=null && policy.getFiltro()!=null && policy.getFiltro().isEnabled() &&
  576.                             policy.getFiltro().isInformazioneApplicativaEnabled() &&
  577.                             StringUtils.isNotEmpty(policy.getFiltro().getInformazioneApplicativaTipo())) {
  578.                         TipoFiltroApplicativo tipoFiltro = TipoFiltroApplicativo.toEnumConstant(policy.getFiltro().getInformazioneApplicativaTipo(), false);
  579.                         if(TipoFiltroApplicativo.PLUGIN_BASED.equals(tipoFiltro)) {
  580.                             try {
  581.                                 ArchiveCascadeConfiguration cascadeConfig = new ArchiveCascadeConfiguration();
  582.                                 cascadeConfig.setCascadePluginConfigurazione(true);
  583.                                 readPlugin_classe(archive, TipoPlugin.RATE_LIMITING.getValue(), policy.getFiltro().getInformazioneApplicativaNome(), cascadeConfig, provenienza);
  584.                             }catch(DriverConfigurazioneNotFound notFound) {}
  585.                         }
  586.                     }
  587.                     if(policy!=null && policy.getGroupBy()!=null && policy.getGroupBy().isEnabled() &&
  588.                             policy.getGroupBy().isInformazioneApplicativaEnabled() &&
  589.                             StringUtils.isNotEmpty(policy.getGroupBy().getInformazioneApplicativaTipo())) {
  590.                         TipoFiltroApplicativo tipoFiltro = TipoFiltroApplicativo.toEnumConstant(policy.getGroupBy().getInformazioneApplicativaTipo(), false);
  591.                         if(TipoFiltroApplicativo.PLUGIN_BASED.equals(tipoFiltro)) {
  592.                             try {
  593.                                 ArchiveCascadeConfiguration cascadeConfig = new ArchiveCascadeConfiguration();
  594.                                 cascadeConfig.setCascadePluginConfigurazione(true);
  595.                                 readPlugin_classe(archive, TipoPlugin.RATE_LIMITING.getValue(), policy.getGroupBy().getInformazioneApplicativaNome(), cascadeConfig, provenienza);
  596.                             }catch(DriverConfigurazioneNotFound notFound) {}
  597.                         }
  598.                     }
  599.                    
  600.                 }
  601.             }
  602.         }
  603.        
  604.     }
  605.    
  606.     private void readControlloTrafficoPolicyPorta(Archive archive, boolean delegata, String nomePorta,  ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception {
  607.        
  608.         List<IdActivePolicy> listControlloTraffico_activePolicies = null;
  609.         try {
  610.             if(delegata) {
  611.                 listControlloTraffico_activePolicies = this.archiveEngine.getAllIdControlloTraffico_activePolicies_fruizione(nomePorta);
  612.             }
  613.             else {
  614.                 listControlloTraffico_activePolicies = this.archiveEngine.getAllIdControlloTraffico_activePolicies_erogazione(nomePorta);
  615.             }
  616.         }catch(DriverConfigurazioneNotFound notFound) {}
  617.         if(listControlloTraffico_activePolicies!=null && listControlloTraffico_activePolicies.size()>0) {
  618.             for (IdActivePolicy idPolicy : listControlloTraffico_activePolicies) {
  619.                 this.readControlloTraffico_activePolicy(archive, idPolicy, cascadeConfig, provenienza);            
  620.             }
  621.         }
  622.     }
  623.    
  624.     private void readControlloTraffico_configurationPolicy(Archive archive, IdPolicy idPolicy, ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception {
  625.        
  626.         ConfigurazionePolicy policy = null;
  627.        
  628.         String key = ArchiveConfigurationPolicy.buildKey(idPolicy.getNome());
  629.         if(archive.getControlloTraffico_configurationPolicies().containsKey(key)){
  630.             // gia gestito
  631.         }
  632.         else{
  633.             policy = this.archiveEngine.getControlloTraffico_configurationPolicy(idPolicy.getNome());
  634.             archive.getControlloTraffico_configurationPolicies().add(new ArchiveConfigurationPolicy(policy, this.idCorrelazione));
  635.         }
  636.        
  637.     }
  638.    
  639.    
  640.     private void readControlloTraffico_activePolicy(Archive archive, IdActivePolicy idPolicy, ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception {
  641.        
  642.         AttivazionePolicy policy = null;
  643.        
  644.         String keyActivePolicy = ArchiveActivePolicy.buildKey(idPolicy.getFiltroRuoloPorta(), idPolicy.getFiltroNomePorta(), idPolicy.getAlias());
  645.         if(archive.getControlloTraffico_activePolicies().containsKey(keyActivePolicy)==false) {
  646.             policy = this.archiveEngine.getControlloTraffico_activePolicy(idPolicy.getFiltroRuoloPorta(), idPolicy.getFiltroNomePorta(), idPolicy.getAlias());
  647.             archive.getControlloTraffico_activePolicies().add(new ArchiveActivePolicy(
  648.                     policy,
  649.                     this.idCorrelazione));
  650.         }
  651.        
  652.         // aggiungo anche la policy configurata.
  653.         if(cascadeConfig.isCascadePolicyConfigurazione()) {
  654.             IdPolicy idPolicyConfig = new IdPolicy();
  655.             idPolicyConfig.setNome(idPolicy.getIdPolicy());
  656.             readControlloTraffico_configurationPolicy(archive, idPolicyConfig, cascadeConfig, provenienza);
  657.         }
  658.        
  659.         // aggiungo plugin
  660.         if(cascadeConfig.isCascadePluginConfigurazione()) {
  661.             if(policy!=null && policy.getFiltro()!=null && policy.getFiltro().isEnabled() &&
  662.                     policy.getFiltro().isInformazioneApplicativaEnabled() &&
  663.                     StringUtils.isNotEmpty(policy.getFiltro().getInformazioneApplicativaTipo())) {
  664.                 TipoFiltroApplicativo tipoFiltro = TipoFiltroApplicativo.toEnumConstant(policy.getFiltro().getInformazioneApplicativaTipo(), false);
  665.                 if(TipoFiltroApplicativo.PLUGIN_BASED.equals(tipoFiltro)) {
  666.                     try {
  667.                         readPlugin_classe(archive, TipoPlugin.RATE_LIMITING.getValue(), policy.getFiltro().getInformazioneApplicativaNome(), cascadeConfig, provenienza);
  668.                     }catch(DriverConfigurazioneNotFound notFound) {}
  669.                 }
  670.             }
  671.             if(policy!=null && policy.getGroupBy()!=null && policy.getGroupBy().isEnabled() &&
  672.                     policy.getGroupBy().isInformazioneApplicativaEnabled() &&
  673.                     StringUtils.isNotEmpty(policy.getGroupBy().getInformazioneApplicativaTipo())) {
  674.                 TipoFiltroApplicativo tipoFiltro = TipoFiltroApplicativo.toEnumConstant(policy.getGroupBy().getInformazioneApplicativaTipo(), false);
  675.                 if(TipoFiltroApplicativo.PLUGIN_BASED.equals(tipoFiltro)) {
  676.                     try {
  677.                         readPlugin_classe(archive, TipoPlugin.RATE_LIMITING.getValue(), policy.getGroupBy().getInformazioneApplicativaNome(), cascadeConfig, provenienza);
  678.                     }catch(DriverConfigurazioneNotFound notFound) {}
  679.                 }
  680.             }
  681.         }
  682.        
  683.     }
  684.    
  685.    
  686.    
  687.     private void readAllarmiConfigurazione(Archive archive, boolean policyGlobali, boolean policyFruizioniErogazioni, ArchiveType provenienza) throws Exception {
  688.        
  689.         if(!CostantiDB.isAllarmiEnabled()) {
  690.             return;
  691.         }
  692.        
  693.         List<IdAllarme> listAllarmi = null;
  694.         try {
  695.             if(policyGlobali && policyFruizioniErogazioni) {
  696.                 listAllarmi = this.archiveEngine.getAllIdAllarmi_all(null);
  697.             }
  698.             else if(policyGlobali) {
  699.                 listAllarmi = this.archiveEngine.getAllIdAllarmi_globali(null);
  700.             }
  701.             else if(policyFruizioniErogazioni) {
  702.                 listAllarmi = this.archiveEngine.getAllIdAllarmi_erogazioniFruizioni(null);
  703.             }
  704.         }catch(DriverConfigurazioneNotFound notFound) {}
  705.         if(listAllarmi!=null && !listAllarmi.isEmpty()) {
  706.             for (IdAllarme idAllarme : listAllarmi) {
  707.                 String keyAllarme = ArchiveAllarme.buildKey(idAllarme.getFiltroRuoloPorta(), idAllarme.getFiltroNomePorta(), idAllarme.getAlias());
  708.                 if(archive.getAllarmi().containsKey(keyAllarme)==false) {
  709.                     archive.getAllarmi().add(new ArchiveAllarme(
  710.                             this.archiveEngine.getAllarme(idAllarme.getFiltroRuoloPorta(), idAllarme.getFiltroNomePorta(), idAllarme.getAlias()),
  711.                             this.idCorrelazione));  
  712.                 }
  713.                                
  714.                 if(!policyGlobali) {
  715.                     // aggiungo le policy configurate solamente realmente utilizzate.
  716.                    
  717.                     // aggiungo anche il plugin configurato.
  718.                     try {
  719.                         ArchiveCascadeConfiguration cascadeConfig = new ArchiveCascadeConfiguration();
  720.                         cascadeConfig.setCascadePluginConfigurazione(true);
  721.                         readPlugin_classe(archive, TipoPlugin.ALLARME.getValue(), idAllarme.getTipo(), cascadeConfig, provenienza);
  722.                     }catch(DriverConfigurazioneNotFound notFound) {}
  723.                    
  724.                 }
  725.             }
  726.         }
  727.        
  728.     }
  729.    
  730.     private void readAllarmiPorta(Archive archive, boolean delegata, String nomePorta,  ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception {
  731.        
  732.         if(!CostantiDB.isAllarmiEnabled()) {
  733.             return;
  734.         }
  735.        
  736.         List<IdAllarme> listAllarmi = null;
  737.         try {
  738.             if(delegata) {
  739.                 listAllarmi = this.archiveEngine.getAllIdAllarmi_fruizione(nomePorta);
  740.             }
  741.             else {
  742.                 listAllarmi = this.archiveEngine.getAllIdAllarmi_erogazione(nomePorta);
  743.             }
  744.         }catch(DriverConfigurazioneNotFound notFound) {}
  745.         if(listAllarmi!=null && listAllarmi.size()>0) {
  746.             for (IdAllarme idAllarme : listAllarmi) {
  747.                
  748.                 String keyAllarme = ArchiveAllarme.buildKey(idAllarme.getFiltroRuoloPorta(), idAllarme.getFiltroNomePorta(), idAllarme.getAlias());
  749.                 if(archive.getAllarmi().containsKey(keyAllarme)==false) {
  750.                     archive.getAllarmi().add(new ArchiveAllarme(
  751.                             this.archiveEngine.getAllarme(idAllarme.getFiltroRuoloPorta(), idAllarme.getFiltroNomePorta(), idAllarme.getAlias()),
  752.                             this.idCorrelazione));
  753.                 }
  754.                
  755.                 // aggiungo anche il plugin configurato.
  756.                 if(cascadeConfig.isCascadePluginConfigurazione()) {
  757.                     try {
  758.                         readPlugin_classe(archive, TipoPlugin.ALLARME.getValue(), idAllarme.getTipo(), cascadeConfig, provenienza);
  759.                     }catch(DriverConfigurazioneNotFound notFound) {}
  760.                 }
  761.             }
  762.         }
  763.     }
  764.    
  765.     private void readAllarme(Archive archive, IdAllarme idAllarme, ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception {
  766.        
  767.         Allarme allarme = null;
  768.        
  769.         String key = ArchiveAllarme.buildKey(idAllarme.getFiltroRuoloPorta(),idAllarme.getFiltroNomePorta(),idAllarme.getAlias());
  770.         if(archive.getAllarmi().containsKey(key)){
  771.             // gia gestito
  772.         }
  773.         else{
  774.             allarme = this.archiveEngine.getAllarme(idAllarme.getFiltroRuoloPorta(),idAllarme.getFiltroNomePorta(),idAllarme.getAlias());
  775.             archive.getAllarmi().add(new ArchiveAllarme(allarme, this.idCorrelazione));
  776.         }
  777.        
  778.         // aggiungo anche il plugin configurato.
  779.         if(cascadeConfig.isCascadePluginConfigurazione()) {
  780.             try {
  781.                 readPlugin_classe(archive, TipoPlugin.ALLARME.getValue(), idAllarme.getTipo(), cascadeConfig, provenienza);
  782.             }catch(DriverConfigurazioneNotFound notFound) {}
  783.         }
  784.        
  785.     }
  786.    
  787.    
  788.     private void readTokenPolicyConfigurazione(Archive archive, ArchiveType provenienza) throws Exception {
  789.        
  790.         ArchiveCascadeConfiguration cascadeConfigPolicy = new ArchiveCascadeConfiguration();
  791.         cascadeConfigPolicy.setCascadePolicyConfigurazione(true);
  792.        
  793.         List<IDGenericProperties> listPolicies_validation = null;
  794.         try {
  795.             listPolicies_validation = this.archiveEngine.getAllIdGenericProperties_validation();
  796.         }catch(DriverConfigurazioneNotFound notFound) {}
  797.         if(listPolicies_validation!=null && listPolicies_validation.size()>0) {
  798.             for (IDGenericProperties idGP : listPolicies_validation) {
  799.                 readTokenPolicy_validation(archive,idGP.getNome(), cascadeConfigPolicy, provenienza);
  800.             }
  801.         }
  802.        
  803.         List<IDGenericProperties> listPolicies_retrieve = null;
  804.         try {
  805.             listPolicies_retrieve = this.archiveEngine.getAllIdGenericProperties_retrieve();
  806.         }catch(DriverConfigurazioneNotFound notFound) {}
  807.         if(listPolicies_retrieve!=null && listPolicies_retrieve.size()>0) {
  808.             for (IDGenericProperties idGP : listPolicies_retrieve) {
  809.                 readTokenPolicy_retrieve(archive,idGP.getNome(), cascadeConfigPolicy, provenienza);
  810.             }
  811.         }
  812.        
  813.     }
  814.    
  815.     private void readTokenPolicy(Archive archive,IDGenericProperties idGP, ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception {
  816.         if(CostantiConfigurazione.GENERIC_PROPERTIES_TOKEN_TIPOLOGIA_VALIDATION.equals(idGP.getTipologia())) {
  817.             readTokenPolicy_validation(archive, idGP.getNome(), cascadeConfig, provenienza);
  818.         }
  819.         else if(CostantiConfigurazione.GENERIC_PROPERTIES_TOKEN_TIPOLOGIA_RETRIEVE.equals(idGP.getTipologia())) {
  820.             readTokenPolicy_retrieve(archive, idGP.getNome(), cascadeConfig, provenienza);
  821.         }
  822.     }
  823.    
  824.     private void readTokenPolicy_validation(Archive archive, String nomePolicy, ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception {
  825.        
  826.         if(cascadeConfig.isCascadePolicyConfigurazione() || ArchiveType.CONFIGURAZIONE_TOKEN_POLICY.equals(provenienza)) {
  827.        
  828.             String key = ArchiveTokenPolicy.buildKey(CostantiConfigurazione.GENERIC_PROPERTIES_TOKEN_TIPOLOGIA_VALIDATION, nomePolicy);
  829.             if(archive.getToken_validation_policies().containsKey(key)){
  830.                 // gia gestito
  831.             }
  832.             else{
  833.                 GenericProperties policy = this.archiveEngine.getGenericProperties_validation(nomePolicy);
  834.                
  835.                 archive.getToken_validation_policies().add(new ArchiveTokenPolicy(policy, this.idCorrelazione));
  836.                
  837.                 // aggiungo plugin
  838.                 if(policy!=null && policy.sizePropertyList()>0) {
  839.                     for (int i = 0; i < policy.sizePropertyList(); i++) {
  840.                         Property p = policy.getProperty(i);
  841.                         if(CostantiConfigurazione.POLICY_DYNAMIC_DISCOVERY_CLAIMS_PARSER_TYPE.equals(p.getNome()) &&
  842.                                 CostantiConfigurazione.POLICY_DYNAMIC_DISCOVERY_CLAIMS_PARSER_TYPE_CUSTOM.equals(p.getValore())) {
  843.                             for (int j = 0; j < policy.sizePropertyList(); j++) {
  844.                                 Property pJ = policy.getProperty(j);
  845.                                 if(CostantiConfigurazione.POLICY_DYNAMIC_DISCOVERY_CLAIMS_PARSER_PLUGIN_TYPE.equals(pJ.getNome())) {
  846.                                     try {
  847.                                         ArchiveCascadeConfiguration cascadeConfigPlugin = new ArchiveCascadeConfiguration();
  848.                                         cascadeConfigPlugin.setCascadePluginConfigurazione(true);
  849.                                         readPlugin_classe(archive, TipoPlugin.TOKEN_DYNAMIC_DISCOVERY.getValue(), pJ.getValore(), cascadeConfigPlugin, provenienza);
  850.                                     }catch(DriverConfigurazioneNotFound notFound) {}        
  851.                                 }
  852.                             }
  853.                         }
  854.                         else if(CostantiConfigurazione.POLICY_VALIDAZIONE_CLAIMS_PARSER_TYPE.equals(p.getNome()) &&
  855.                                 CostantiConfigurazione.POLICY_VALIDAZIONE_CLAIMS_PARSER_TYPE_CUSTOM.equals(p.getValore())) {
  856.                             for (int j = 0; j < policy.sizePropertyList(); j++) {
  857.                                 Property pJ = policy.getProperty(j);
  858.                                 if(CostantiConfigurazione.POLICY_VALIDAZIONE_CLAIMS_PARSER_PLUGIN_TYPE.equals(pJ.getNome())) {
  859.                                     try {
  860.                                         ArchiveCascadeConfiguration cascadeConfigPlugin = new ArchiveCascadeConfiguration();
  861.                                         cascadeConfigPlugin.setCascadePluginConfigurazione(true);
  862.                                         readPlugin_classe(archive, TipoPlugin.TOKEN_VALIDAZIONE.getValue(), pJ.getValore(), cascadeConfigPlugin, provenienza);
  863.                                     }catch(DriverConfigurazioneNotFound notFound) {}        
  864.                                 }
  865.                             }
  866.                         }
  867.                         else if(CostantiConfigurazione.POLICY_INTROSPECTION_CLAIMS_PARSER_TYPE.equals(p.getNome()) &&
  868.                                 CostantiConfigurazione.POLICY_INTROSPECTION_CLAIMS_PARSER_TYPE_CUSTOM.equals(p.getValore())) {
  869.                             for (int j = 0; j < policy.sizePropertyList(); j++) {
  870.                                 Property pJ = policy.getProperty(j);
  871.                                 if(CostantiConfigurazione.POLICY_INTROSPECTION_CLAIMS_PARSER_PLUGIN_TYPE.equals(pJ.getNome())) {
  872.                                     try {
  873.                                         ArchiveCascadeConfiguration cascadeConfigPlugin = new ArchiveCascadeConfiguration();
  874.                                         cascadeConfigPlugin.setCascadePluginConfigurazione(true);
  875.                                         readPlugin_classe(archive, TipoPlugin.TOKEN_VALIDAZIONE.getValue(), pJ.getValore(), cascadeConfigPlugin, provenienza);
  876.                                     }catch(DriverConfigurazioneNotFound notFound) {}        
  877.                                 }
  878.                             }
  879.                         }
  880.                         else if(CostantiConfigurazione.POLICY_USER_INFO_CLAIMS_PARSER_TYPE.equals(p.getNome()) &&
  881.                                 CostantiConfigurazione.POLICY_USER_INFO_CLAIMS_PARSER_TYPE_CUSTOM.equals(p.getValore())) {
  882.                             for (int j = 0; j < policy.sizePropertyList(); j++) {
  883.                                 Property pJ = policy.getProperty(j);
  884.                                 if(CostantiConfigurazione.POLICY_USER_INFO_CLAIMS_PARSER_PLUGIN_TYPE.equals(pJ.getNome())) {
  885.                                     try {
  886.                                         ArchiveCascadeConfiguration cascadeConfigPlugin = new ArchiveCascadeConfiguration();
  887.                                         cascadeConfigPlugin.setCascadePluginConfigurazione(true);
  888.                                         readPlugin_classe(archive, TipoPlugin.TOKEN_VALIDAZIONE.getValue(), pJ.getValore(), cascadeConfigPlugin, provenienza);
  889.                                     }catch(DriverConfigurazioneNotFound notFound) {}        
  890.                                 }
  891.                             }
  892.                         }
  893.                     }
  894.                 }  

  895.             }
  896.            
  897.         }
  898.                
  899.     }
  900.    
  901.     private void readTokenPolicy_retrieve(Archive archive, String nomePolicy, ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception {
  902.        
  903.         if(cascadeConfig.isCascadePolicyConfigurazione() || ArchiveType.CONFIGURAZIONE_TOKEN_POLICY.equals(provenienza)) {
  904.        
  905.             String key = ArchiveTokenPolicy.buildKey(CostantiConfigurazione.GENERIC_PROPERTIES_TOKEN_TIPOLOGIA_RETRIEVE, nomePolicy);
  906.             if(archive.getToken_retrieve_policies().containsKey(key)){
  907.                 // gia gestito
  908.             }
  909.             else{
  910.                 GenericProperties policy = this.archiveEngine.getGenericProperties_retrieve(nomePolicy);
  911.                
  912.                 archive.getToken_retrieve_policies().add(new ArchiveTokenPolicy(policy, this.idCorrelazione));
  913.                
  914.                 // aggiungo plugin
  915.                 if(policy!=null && policy.sizePropertyList()>0) {
  916.                     for (int i = 0; i < policy.sizePropertyList(); i++) {
  917.                         Property p = policy.getProperty(i);
  918.                         if(CostantiConfigurazione.POLICY_RETRIEVE_TOKEN_PARSER_TYPE_CUSTOM.equals(p.getNome()) &&
  919.                                 CostantiConfigurazione.POLICY_RETRIEVE_TOKEN_PARSER_TYPE_CUSTOM_CYSTOM.equals(p.getValore())) {
  920.                             for (int j = 0; j < policy.sizePropertyList(); j++) {
  921.                                 Property pJ = policy.getProperty(j);
  922.                                 if(CostantiConfigurazione.POLICY_RETRIEVE_TOKEN_PARSER_PLUGIN_TYPE.equals(pJ.getNome())) {
  923.                                     try {
  924.                                         ArchiveCascadeConfiguration cascadeConfigPlugin = new ArchiveCascadeConfiguration();
  925.                                         cascadeConfigPlugin.setCascadePluginConfigurazione(true);
  926.                                         readPlugin_classe(archive, TipoPlugin.TOKEN_NEGOZIAZIONE.getValue(), pJ.getValore(), cascadeConfigPlugin, provenienza);
  927.                                     }catch(DriverConfigurazioneNotFound notFound) {}        
  928.                                 }
  929.                             }
  930.                         }
  931.                     }
  932.                 }
  933.             }
  934.            
  935.         }
  936.        
  937.     }
  938.    
  939.    
  940.     private void readAttributeAuthorityConfigurazione(Archive archive, ArchiveType provenienza) throws Exception {
  941.        
  942.         ArchiveCascadeConfiguration cascadeConfigPolicy = new ArchiveCascadeConfiguration();
  943.         cascadeConfigPolicy.setCascadePolicyConfigurazione(true);
  944.        
  945.         List<IDGenericProperties> listAttributeAuthorities = null;
  946.         try {
  947.             listAttributeAuthorities = this.archiveEngine.getAllIdGenericProperties_attributeAuthorities();
  948.         }catch(DriverConfigurazioneNotFound notFound) {}
  949.         if(listAttributeAuthorities!=null && listAttributeAuthorities.size()>0) {
  950.             for (IDGenericProperties idGP : listAttributeAuthorities) {
  951.                 readAttributeAuthority(archive,idGP.getNome(), cascadeConfigPolicy, provenienza);
  952.             }
  953.         }
  954.        
  955.     }
  956.    
  957.     private void readAttributeAuthority(Archive archive,IDGenericProperties idGP, ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception {
  958.         if(CostantiConfigurazione.GENERIC_PROPERTIES_ATTRIBUTE_AUTHORITY.equals(idGP.getTipologia())) {
  959.             readAttributeAuthority(archive, idGP.getNome(), cascadeConfig, provenienza);
  960.         }
  961.     }
  962.    
  963.     private void readAttributeAuthority(Archive archive, String nomePolicy, ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception {
  964.        
  965.         if(cascadeConfig.isCascadePolicyConfigurazione() || ArchiveType.CONFIGURAZIONE_ATTRIBUTE_AUTHORITY.equals(provenienza)) {
  966.        
  967.             String key = ArchiveAttributeAuthority.buildKey(CostantiConfigurazione.GENERIC_PROPERTIES_ATTRIBUTE_AUTHORITY, nomePolicy);
  968.             if(archive.getAttributeAuthorities().containsKey(key)){
  969.                 // gia gestito
  970.             }
  971.             else{
  972.                 GenericProperties policy = this.archiveEngine.getGenericProperties_attributeAuthority(nomePolicy);
  973.                
  974.                 archive.getAttributeAuthorities().add(new ArchiveAttributeAuthority(policy, this.idCorrelazione));
  975.                
  976.                 // aggiungo plugin
  977.                 if(policy!=null && policy.sizePropertyList()>0) {
  978.                     for (int i = 0; i < policy.sizePropertyList(); i++) {
  979.                         Property p = policy.getProperty(i);
  980.                         if(CostantiConfigurazione.AA_RESPONSE_TYPE.equals(p.getNome()) &&
  981.                                 CostantiConfigurazione.AA_RESPONSE_TYPE_VALUE_CUSTOM.equals(p.getValore())) {
  982.                             for (int j = 0; j < policy.sizePropertyList(); j++) {
  983.                                 Property pJ = policy.getProperty(j);
  984.                                 if(CostantiConfigurazione.AA_RESPONSE_PARSER_PLUGIN_TYPE.equals(pJ.getNome())) {
  985.                                     try {
  986.                                         // aggiungo anche il plugin configurato.
  987.                                         ArchiveCascadeConfiguration cascadeConfigPlugin = new ArchiveCascadeConfiguration();
  988.                                         cascadeConfigPlugin.setCascadePluginConfigurazione(true);
  989.                                         readPlugin_classe(archive, TipoPlugin.ATTRIBUTE_AUTHORITY.getValue(), pJ.getValore(), cascadeConfigPlugin, provenienza);
  990.                                     }catch(DriverConfigurazioneNotFound notFound) {}        
  991.                                 }
  992.                             }
  993.                         }
  994.                     }
  995.                 }
  996.             }
  997.            
  998.         }
  999.        
  1000.     }
  1001.    
  1002.     private void readPluginConfigurazione(Archive archive, ArchiveType provenienza) throws Exception {
  1003.        
  1004.         ArchiveCascadeConfiguration cascadeConfigPlugin = new ArchiveCascadeConfiguration();
  1005.         cascadeConfigPlugin.setCascadePluginConfigurazione(true);
  1006.        
  1007.         List<IdPlugin> listPluginClasse = null;
  1008.         try {
  1009.             listPluginClasse = this.archiveEngine.getAllIdPluginClasse();
  1010.         }catch(DriverConfigurazioneNotFound notFound) {}
  1011.         if(listPluginClasse!=null && listPluginClasse.size()>0) {
  1012.             for (IdPlugin idP : listPluginClasse) {
  1013.                 readPlugin_classe(archive,idP.getTipoPlugin(), idP.getTipo(), cascadeConfigPlugin, provenienza);
  1014.             }
  1015.         }
  1016.        
  1017.         List<String> listPluginArchivi = null;
  1018.         try {
  1019.             listPluginArchivi = this.archiveEngine.getAllIdPluginArchivio();
  1020.         }catch(DriverConfigurazioneNotFound notFound) {}
  1021.         if(listPluginArchivi!=null && listPluginArchivi.size()>0) {
  1022.             for (String idP : listPluginArchivi) {
  1023.                 readPlugin_archivio(archive,idP, cascadeConfigPlugin, provenienza);
  1024.             }
  1025.         }
  1026.        
  1027.        
  1028.     }
  1029.    
  1030.     private void readPlugin_classe(Archive archive, IdPlugin idPlugin, ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception {
  1031.         this.readPlugin_classe(archive, idPlugin.getTipoPlugin(), idPlugin.getTipo(), cascadeConfig, provenienza);
  1032.     }
  1033.     private void readPlugin_classe(Archive archive, String tipoPlugin, String tipo, ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception {
  1034.        
  1035.         if(cascadeConfig.isCascadePluginConfigurazione() || ArchiveType.CONFIGURAZIONE_PLUGIN_CLASSE.equals(provenienza)) {
  1036.        
  1037.             String key = ArchivePluginClasse.buildKey(tipoPlugin, tipo);
  1038.             if(archive.getPlugin_classi().containsKey(key)){
  1039.                 // gia gestito
  1040.             }
  1041.             else{
  1042.                 archive.getPlugin_classi().add(new ArchivePluginClasse(this.archiveEngine.getPluginClasse(tipoPlugin, tipo), this.idCorrelazione));
  1043.             }
  1044.            
  1045.         }
  1046.        
  1047.     }
  1048.    
  1049.     private void readPlugin_archivio(Archive archive, String nome, ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception {
  1050.        
  1051.         if(cascadeConfig.isCascadePluginConfigurazione() || ArchiveType.CONFIGURAZIONE_PLUGIN_ARCHVIO.equals(provenienza)) {
  1052.        
  1053.             String key = ArchivePluginArchivio.buildKey(nome);
  1054.             if(archive.getPlugin_archivi().containsKey(key)){
  1055.                 // gia gestito
  1056.             }
  1057.             else{
  1058.                 archive.getPlugin_archivi().add(new ArchivePluginArchivio(this.archiveEngine.getPluginArchivio(nome), this.idCorrelazione));
  1059.             }
  1060.            
  1061.         }
  1062.        
  1063.     }
  1064.    

  1065.     private void readPdd(Archive archive, String nomePdd, ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception{
  1066.         this.readPdd(archive, nomePdd, cascadeConfig, true, provenienza);
  1067.     }
  1068.     private void readPdd(Archive archive, String nomePdd, ArchiveCascadeConfiguration cascadeConfig, boolean cascadeAvanti, ArchiveType provenienza) throws Exception{
  1069.        
  1070.         String key = ArchivePdd.buildKey(nomePdd);
  1071.         if(archive.getPdd().containsKey(key)){
  1072.             // gia gestito
  1073.         }
  1074.         else{
  1075.             try{
  1076.                 if(cascadeConfig.isCascadePdd() || ArchiveType.PDD.equals(provenienza)){
  1077.                    
  1078.                     // add
  1079.                     org.openspcoop2.core.registry.PortaDominio pdd = this.archiveEngine.getPortaDominio(nomePdd);
  1080.                     ArchivePdd archivePdd = new ArchivePdd(pdd, this.idCorrelazione);
  1081.                     archive.getPdd().add(archivePdd);
  1082.                    
  1083.                     // *** dipendenze: oggetti necessari per la creazione dell'oggetto sopra aggiunto ***
  1084.                    
  1085.                     // non vi sono oggetti che possiedono come figlio la pdd
  1086.                    
  1087.                 }
  1088.             }catch(Exception e){
  1089.                 throw new ProtocolException("(PdD "+nomePdd+") "+e.getMessage(),e);
  1090.             }
  1091.         }
  1092.        
  1093.        
  1094.         // *** cascade in avanti ***
  1095.        
  1096.         if(cascadeAvanti){
  1097.        
  1098.             // soggetti
  1099.                
  1100.             FiltroRicercaSoggetti filtroSoggetti = new FiltroRicercaSoggetti();
  1101.             filtroSoggetti.setNomePdd(nomePdd);
  1102.             try{
  1103.                 List<IDSoggetto> idsSoggetti = this.archiveEngine.getAllIdSoggettiRegistro(filtroSoggetti);
  1104.                 if(idsSoggetti!=null && idsSoggetti.size()>0){
  1105.                     for (IDSoggetto idSoggetto : idsSoggetti) {
  1106.                         this.readSoggetto(archive, idSoggetto, cascadeConfig, ArchiveType.PDD);
  1107.                     }
  1108.                 }
  1109.             }catch(DriverRegistroServiziNotFound notFound){}
  1110.                
  1111.         }
  1112.        
  1113.        
  1114.     }
  1115.    
  1116.    
  1117.    
  1118.     private void readGruppo(Archive archive, IDGruppo idGruppo, ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception{
  1119.         this.readGruppo(archive, idGruppo, cascadeConfig, true, provenienza);
  1120.     }
  1121.     private void readGruppo(Archive archive, IDGruppo idGruppo, ArchiveCascadeConfiguration cascadeConfig, boolean cascadeAvanti, ArchiveType provenienza) throws Exception{
  1122.        
  1123.         String key = ArchiveGruppo.buildKey(idGruppo.getNome());
  1124.         if(archive.getGruppi().containsKey(key)){
  1125.             // gia gestito
  1126.         }
  1127.         else{
  1128.             try{
  1129.                 if(cascadeConfig.isCascadeGruppi() || ArchiveType.GRUPPO.equals(provenienza)){
  1130.                    
  1131.                     // add
  1132.                     org.openspcoop2.core.registry.Gruppo gruppo = this.archiveEngine.getGruppo(idGruppo);
  1133.                     ArchiveGruppo archiveGruppo = new ArchiveGruppo(gruppo, this.idCorrelazione);
  1134.                     archive.getGruppi().add(archiveGruppo);
  1135.                    
  1136.                     // *** dipendenze: oggetti necessari per la creazione dell'oggetto sopra aggiunto ***
  1137.                    
  1138.                     // non vi sono oggetti che possiedono come figlio il gruppo
  1139.                    
  1140.                 }
  1141.             }catch(Exception e){
  1142.                 throw new ProtocolException("(Gruppo "+idGruppo.getNome()+") "+e.getMessage(),e);
  1143.             }
  1144.         }
  1145.        
  1146.        
  1147.         // *** cascade in avanti ***
  1148.        
  1149.         if(cascadeAvanti){
  1150.        
  1151.             // accordi servizio parte comune
  1152.             FiltroRicercaAccordi filtroAccordiServizioParteComune = new FiltroRicercaAccordi();
  1153.             filtroAccordiServizioParteComune.setIdGruppo(idGruppo);
  1154.             filtroAccordiServizioParteComune.setServizioComposto(false);
  1155.             try{
  1156.                 List<IDAccordo> idsAccordi = this.archiveEngine.getAllIdAccordiServizioParteComune(filtroAccordiServizioParteComune);
  1157.                 if(idsAccordi!=null && idsAccordi.size()>0){
  1158.                     for (IDAccordo idAccordo : idsAccordi) {
  1159.                         this.readAccordoServizioParteComune(archive, idAccordo, cascadeConfig, ArchiveType.GRUPPO);
  1160.                     }
  1161.                 }
  1162.             }catch(DriverRegistroServiziNotFound notFound){}    
  1163.            
  1164.             // accordi servizio composto
  1165.             FiltroRicercaAccordi filtroAccordiServizioComposto = new FiltroRicercaAccordi();
  1166.             filtroAccordiServizioComposto.setIdGruppo(idGruppo);
  1167.             filtroAccordiServizioComposto.setServizioComposto(true);
  1168.             try{
  1169.                 List<IDAccordo> idsAccordi = this.archiveEngine.getAllIdAccordiServizioParteComune(filtroAccordiServizioComposto);
  1170.                 if(idsAccordi!=null && idsAccordi.size()>0){
  1171.                     for (IDAccordo idAccordo : idsAccordi) {
  1172.                         this.readAccordoServizioComposto(archive, idAccordo, cascadeConfig, ArchiveType.GRUPPO);
  1173.                     }
  1174.                 }
  1175.             }catch(DriverRegistroServiziNotFound notFound){}    
  1176.            
  1177.             if(cascadeConfig.isCascadePolicyConfigurazione()) {
  1178.            
  1179.                 // rate limiting
  1180.                 List<IdActivePolicy> listControlloTraffico_activePolicies = null;
  1181.                 try {
  1182.                     listControlloTraffico_activePolicies = this.archiveEngine.getAllIdControlloTraffico_activePolicies_all(idGruppo.getNome());
  1183.                 }catch(DriverConfigurazioneNotFound notFound) {}
  1184.                 if(listControlloTraffico_activePolicies!=null && listControlloTraffico_activePolicies.size()>0) {
  1185.                     for (IdActivePolicy idPolicy : listControlloTraffico_activePolicies) {
  1186.                         this.readControlloTraffico_activePolicy(archive, idPolicy, cascadeConfig, provenienza);            
  1187.                     }
  1188.                 }
  1189.                
  1190.                 // allarmi
  1191.                 List<IdAllarme> listAllarmi = null;
  1192.                 try {
  1193.                     listAllarmi = this.archiveEngine.getAllIdAllarmi_all(idGruppo.getNome());
  1194.                 }catch(DriverConfigurazioneNotFound notFound) {}
  1195.                 if(listAllarmi!=null && listAllarmi.size()>0) {
  1196.                     for (IdAllarme idAllarme : listAllarmi) {
  1197.                         this.readAllarme(archive, idAllarme, cascadeConfig, provenienza);              
  1198.                     }
  1199.                 }
  1200.                
  1201.             }
  1202.            
  1203.         }
  1204.        
  1205.        
  1206.     }
  1207.    
  1208.    
  1209.    
  1210.     private void readRuolo(Archive archive, IDRuolo idRuolo, ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception{
  1211.         this.readRuolo(archive, idRuolo, cascadeConfig, true, provenienza);
  1212.     }
  1213.     private void readRuolo(Archive archive, IDRuolo idRuolo, ArchiveCascadeConfiguration cascadeConfig, boolean cascadeAvanti, ArchiveType provenienza) throws Exception{
  1214.        
  1215.         String key = ArchiveRuolo.buildKey(idRuolo.getNome());
  1216.         if(archive.getRuoli().containsKey(key)){
  1217.             // gia gestito
  1218.         }
  1219.         else{
  1220.             try{
  1221.                 if(cascadeConfig.isCascadeRuoli() || ArchiveType.RUOLO.equals(provenienza)){
  1222.                    
  1223.                     // add
  1224.                     org.openspcoop2.core.registry.Ruolo ruolo = this.archiveEngine.getRuolo(idRuolo);
  1225.                     ArchiveRuolo archiveRuolo = new ArchiveRuolo(ruolo, this.idCorrelazione);
  1226.                     archive.getRuoli().add(archiveRuolo);
  1227.                    
  1228.                     // *** dipendenze: oggetti necessari per la creazione dell'oggetto sopra aggiunto ***
  1229.                    
  1230.                     // non vi sono oggetti che possiedono come figlio il ruolo
  1231.                    
  1232.                 }
  1233.             }catch(Exception e){
  1234.                 throw new ProtocolException("(Ruolo "+idRuolo.getNome()+") "+e.getMessage(),e);
  1235.             }
  1236.         }
  1237.        
  1238.        
  1239.         // *** cascade in avanti ***
  1240.        
  1241.         if(cascadeAvanti){
  1242.        
  1243.             // soggetti
  1244.                
  1245.             FiltroRicercaSoggetti filtroSoggetti = new FiltroRicercaSoggetti();
  1246.             filtroSoggetti.setIdRuolo(idRuolo);
  1247.             try{
  1248.                 List<IDSoggetto> idsSoggetti = this.archiveEngine.getAllIdSoggettiRegistro(filtroSoggetti);
  1249.                 if(idsSoggetti!=null && idsSoggetti.size()>0){
  1250.                     for (IDSoggetto idSoggetto : idsSoggetti) {
  1251.                         this.readSoggetto(archive, idSoggetto, cascadeConfig, ArchiveType.RUOLO);
  1252.                     }
  1253.                 }
  1254.             }catch(DriverRegistroServiziNotFound notFound){}
  1255.            
  1256.            
  1257.             // porteDelegate
  1258.            
  1259.             List<IDPortaDelegata> idsPD = new ArrayList<IDPortaDelegata>();
  1260.            
  1261.             FiltroRicercaPorteDelegate filtroPorteDelegate = new FiltroRicercaPorteDelegate();
  1262.             filtroPorteDelegate.setIdRuolo(idRuolo);
  1263.             try{
  1264.                 List<IDPortaDelegata> _idsPD = this.archiveEngine.getAllIdPorteDelegate(filtroPorteDelegate);
  1265.                 if(_idsPD!=null && _idsPD.size()>0){
  1266.                     idsPD.addAll(_idsPD);
  1267.                 }
  1268.             }catch(DriverConfigurazioneNotFound notFound){}
  1269.            
  1270.             filtroPorteDelegate = new FiltroRicercaPorteDelegate();
  1271.             filtroPorteDelegate.setIdRuoloToken(idRuolo);
  1272.             try{
  1273.                 List<IDPortaDelegata> _idsPD = this.archiveEngine.getAllIdPorteDelegate(filtroPorteDelegate);
  1274.                 if(_idsPD!=null && _idsPD.size()>0){
  1275.                     for (IDPortaDelegata idPortaDelegataCheck : _idsPD) {
  1276.                         if(!idsPD.contains(idPortaDelegataCheck)) {
  1277.                             idsPD.add(idPortaDelegataCheck);
  1278.                         }
  1279.                     }
  1280.                 }
  1281.             }catch(DriverConfigurazioneNotFound notFound){}
  1282.            
  1283.             if(idsPD!=null && idsPD.size()>0){
  1284.                 for (IDPortaDelegata idPD : idsPD) {
  1285.                     this.readPortaDelegata(archive, idPD, cascadeConfig, ArchiveType.RUOLO);
  1286.                 }
  1287.             }
  1288.            
  1289.            
  1290.             // porteApplicative
  1291.            
  1292.             List<IDPortaApplicativa> idsPA = new ArrayList<IDPortaApplicativa>();
  1293.            
  1294.             FiltroRicercaPorteApplicative filtroPorteApplicative = new FiltroRicercaPorteApplicative();
  1295.             filtroPorteApplicative.setIdRuolo(idRuolo);
  1296.             try{
  1297.                 List<IDPortaApplicativa> _idsPA = this.archiveEngine.getAllIdPorteApplicative(filtroPorteApplicative);
  1298.                 if(_idsPA!=null && !_idsPA.isEmpty()) {
  1299.                     idsPA.addAll(_idsPA);
  1300.                 }
  1301.             }catch(DriverConfigurazioneNotFound notFound){}
  1302.            
  1303.             filtroPorteApplicative = new FiltroRicercaPorteApplicative();
  1304.             filtroPorteApplicative.setIdRuoloToken(idRuolo);
  1305.             try{
  1306.                 List<IDPortaApplicativa> _idsPA = this.archiveEngine.getAllIdPorteApplicative(filtroPorteApplicative);
  1307.                 if(_idsPA!=null && !_idsPA.isEmpty()) {
  1308.                     for (IDPortaApplicativa idPortaApplicativaCheck : _idsPA) {
  1309.                         if(!idsPA.contains(idPortaApplicativaCheck)) {
  1310.                             idsPA.add(idPortaApplicativaCheck);
  1311.                         }
  1312.                     }
  1313.                 }
  1314.             }catch(DriverConfigurazioneNotFound notFound){}
  1315.            
  1316.             if(idsPA!=null && idsPA.size()>0){
  1317.                 for (IDPortaApplicativa idPA : idsPA) {
  1318.                     this.readPortaApplicativa(archive, idPA, cascadeConfig, ArchiveType.RUOLO);
  1319.                 }
  1320.             }
  1321.            
  1322.             // serviziApplicativi
  1323.            
  1324.             FiltroRicercaServiziApplicativi filtroServiziApplicativi = new FiltroRicercaServiziApplicativi();
  1325.             filtroServiziApplicativi.setIdRuolo(idRuolo);
  1326.             try{
  1327.                 List<IDServizioApplicativo> idsSA = this.archiveEngine.getAllIdServiziApplicativi(filtroServiziApplicativi);
  1328.                 if(idsSA!=null && idsSA.size()>0){
  1329.                     for (IDServizioApplicativo idSA : idsSA) {
  1330.                         this.readServizioApplicativo(archive, idSA, cascadeConfig, ArchiveType.RUOLO);
  1331.                     }
  1332.                 }
  1333.             }catch(DriverConfigurazioneNotFound notFound){}
  1334.         }
  1335.        
  1336.        
  1337.     }
  1338.    
  1339.    
  1340.     private void readScope(Archive archive, IDScope idScope, ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception{
  1341.         this.readScope(archive, idScope, cascadeConfig, true, provenienza);
  1342.     }
  1343.     private void readScope(Archive archive, IDScope idScope, ArchiveCascadeConfiguration cascadeConfig, boolean cascadeAvanti, ArchiveType provenienza) throws Exception{
  1344.        
  1345.         String key = ArchiveScope.buildKey(idScope.getNome());
  1346.         if(archive.getScope().containsKey(key)){
  1347.             // gia gestito
  1348.         }
  1349.         else{
  1350.             try{
  1351.                 if(cascadeConfig.isCascadeScope() || ArchiveType.SCOPE.equals(provenienza)){
  1352.                    
  1353.                     // add
  1354.                     org.openspcoop2.core.registry.Scope scope = this.archiveEngine.getScope(idScope);
  1355.                     ArchiveScope archiveScope = new ArchiveScope(scope, this.idCorrelazione);
  1356.                     archive.getScope().add(archiveScope);
  1357.                    
  1358.                     // *** dipendenze: oggetti necessari per la creazione dell'oggetto sopra aggiunto ***
  1359.                    
  1360.                     // non vi sono oggetti che possiedono come figlio il scope
  1361.                    
  1362.                 }
  1363.             }catch(Exception e){
  1364.                 throw new ProtocolException("(Scope "+idScope.getNome()+") "+e.getMessage(),e);
  1365.             }
  1366.         }
  1367.        
  1368.        
  1369.         // *** cascade in avanti ***
  1370.        
  1371.         if(cascadeAvanti){
  1372.        

  1373.             // porteDelegate
  1374.            
  1375.             FiltroRicercaPorteDelegate filtroPorteDelegate = new FiltroRicercaPorteDelegate();
  1376.             filtroPorteDelegate.setIdScope(idScope);
  1377.             try{
  1378.                 List<IDPortaDelegata> idsPD = this.archiveEngine.getAllIdPorteDelegate(filtroPorteDelegate);
  1379.                 if(idsPD!=null && idsPD.size()>0){
  1380.                     for (IDPortaDelegata idPD : idsPD) {
  1381.                         this.readPortaDelegata(archive, idPD, cascadeConfig, ArchiveType.SCOPE);
  1382.                     }
  1383.                 }
  1384.             }catch(DriverConfigurazioneNotFound notFound){}
  1385.            
  1386.            
  1387.             // porteApplicative
  1388.            
  1389.             FiltroRicercaPorteApplicative filtroPorteApplicative = new FiltroRicercaPorteApplicative();
  1390.             filtroPorteApplicative.setIdScope(idScope);
  1391.             try{
  1392.                 List<IDPortaApplicativa> idsPA = this.archiveEngine.getAllIdPorteApplicative(filtroPorteApplicative);
  1393.                 if(idsPA!=null && idsPA.size()>0){
  1394.                     for (IDPortaApplicativa idPA : idsPA) {
  1395.                         this.readPortaApplicativa(archive, idPA, cascadeConfig, ArchiveType.SCOPE);
  1396.                     }
  1397.                 }
  1398.             }catch(DriverConfigurazioneNotFound notFound){}
  1399.            

  1400.            
  1401.         }
  1402.        
  1403.        
  1404.     }
  1405.    
  1406.    
  1407.    
  1408.     private void readSoggetto(Archive archive, IDSoggetto idSoggetto, ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception{
  1409.         this.readSoggetto(archive, idSoggetto, cascadeConfig, true, provenienza);
  1410.     }
  1411.     private void readSoggetto(Archive archive, IDSoggetto idSoggetto, ArchiveCascadeConfiguration cascadeConfig, boolean cascadeAvanti, ArchiveType provenienza) throws Exception{
  1412.        
  1413.         String key = ArchiveSoggetto.buildKey(idSoggetto.getTipo(), idSoggetto.getNome());
  1414.         if(archive.getSoggetti().containsKey(key)){
  1415.             // gia gestito
  1416.         }
  1417.         else{
  1418.             try{
  1419.                 if(cascadeConfig.isCascadeSoggetti() || ArchiveType.SOGGETTO.equals(provenienza)){
  1420.                    
  1421.                     // add
  1422.                     org.openspcoop2.core.registry.Soggetto soggettoRegistro = this.archiveEngine.getSoggettoRegistro(idSoggetto);
  1423.                     org.openspcoop2.core.config.Soggetto soggettoConfigurazione = this.archiveEngine.getSoggettoConfigurazione(idSoggetto);
  1424.                     ArchiveSoggetto archiveSoggetto = new ArchiveSoggetto(soggettoConfigurazione, soggettoRegistro, this.idCorrelazione);
  1425.                     archive.getSoggetti().add(archiveSoggetto);
  1426.                    
  1427.                     // *** dipendenze: oggetti necessari per la creazione dell'oggetto sopra aggiunto ***
  1428.                    
  1429.                     // porteDominio
  1430.                     FiltroRicerca filtroPdd = new FiltroRicerca();
  1431.                     filtroPdd.setNome(soggettoRegistro.getPortaDominio());
  1432.                     try{
  1433.                         List<String> idsPdD = this.archiveEngine.getAllIdPorteDominio(filtroPdd);
  1434.                         if(idsPdD!=null && idsPdD.size()>0){
  1435.                             for (String idPdd : idsPdD) {
  1436.                                 this.readPdd(archive, idPdd, cascadeConfig, false, ArchiveType.SOGGETTO); // per evitare loop
  1437.                             }
  1438.                         }
  1439.                     }catch(DriverRegistroServiziNotFound notFound){}
  1440.                    
  1441.                     // ruoli
  1442.                     if(soggettoRegistro.getRuoli()!=null && soggettoRegistro.getRuoli().sizeRuoloList()>0){
  1443.                         for (int i = 0; i < soggettoRegistro.getRuoli().sizeRuoloList(); i++) {
  1444.                             RuoloSoggetto ruolo = soggettoRegistro.getRuoli().getRuolo(i);
  1445.                             FiltroRicercaRuoli filtroRuolo = new FiltroRicercaRuoli();
  1446.                             filtroRuolo.setNome(ruolo.getNome());
  1447.                             try{
  1448.                                 List<IDRuolo> idsRuoli = this.archiveEngine.getAllIdRuoli(filtroRuolo);
  1449.                                 if(idsRuoli!=null && idsRuoli.size()>0){
  1450.                                     for (IDRuolo idRuolo : idsRuoli) {
  1451.                                         this.readRuolo(archive, idRuolo, cascadeConfig, false, ArchiveType.SOGGETTO); // per evitare loop
  1452.                                     }
  1453.                                 }
  1454.                             }catch(DriverRegistroServiziNotFound notFound){}    
  1455.                         }
  1456.                     }
  1457.                 }
  1458.             }catch(Exception e){
  1459.                 throw new ProtocolException("(Soggetto "+idSoggetto+") "+e.getMessage(),e);
  1460.             }
  1461.         }
  1462.        
  1463.        
  1464.         // *** cascade in avanti ***
  1465.        
  1466.         if(cascadeAvanti){
  1467.        
  1468.             // serviziApplicativi      
  1469.             FiltroRicercaServiziApplicativi filtroServiziApplicativi = new FiltroRicercaServiziApplicativi();
  1470.             filtroServiziApplicativi.setTipoSoggetto(idSoggetto.getTipo());
  1471.             filtroServiziApplicativi.setNomeSoggetto(idSoggetto.getNome());
  1472.             try{
  1473.                 List<IDServizioApplicativo> idsSA = this.archiveEngine.getAllIdServiziApplicativi(filtroServiziApplicativi);
  1474.                 if(idsSA!=null && idsSA.size()>0){
  1475.                     for (IDServizioApplicativo idServizioApplicativo : idsSA) {
  1476.                         this.readServizioApplicativo(archive, idServizioApplicativo, cascadeConfig, ArchiveType.SOGGETTO);
  1477.                     }
  1478.                 }
  1479.             }catch(DriverConfigurazioneNotFound notFound){}
  1480.                
  1481.             // accordi cooperazione
  1482.             FiltroRicercaAccordi filtroAccordiCooperazione = new FiltroRicercaAccordi();
  1483.             filtroAccordiCooperazione.setTipoSoggettoReferente(idSoggetto.getTipo());
  1484.             filtroAccordiCooperazione.setNomeSoggettoReferente(idSoggetto.getNome());
  1485.             try{
  1486.                 List<IDAccordoCooperazione> idsAC = this.archiveEngine.getAllIdAccordiCooperazione(filtroAccordiCooperazione);
  1487.                 if(idsAC!=null && idsAC.size()>0){
  1488.                     for (IDAccordoCooperazione idAccordoCooperazione : idsAC) {
  1489.                         this.readAccordoCooperazione(archive, idAccordoCooperazione, cascadeConfig, ArchiveType.SOGGETTO);
  1490.                     }
  1491.                 }
  1492.             }catch(DriverRegistroServiziNotFound notFound){}
  1493.            
  1494.             // accordi servizio parte comune
  1495.             FiltroRicercaAccordi filtroAccordiServizioParteComune = new FiltroRicercaAccordi();
  1496.             filtroAccordiServizioParteComune.setTipoSoggettoReferente(idSoggetto.getTipo());
  1497.             filtroAccordiServizioParteComune.setNomeSoggettoReferente(idSoggetto.getNome());
  1498.             filtroAccordiServizioParteComune.setServizioComposto(false);
  1499.             try{
  1500.                 List<IDAccordo> idsAccordi = this.archiveEngine.getAllIdAccordiServizioParteComune(filtroAccordiServizioParteComune);
  1501.                 if(idsAccordi!=null && idsAccordi.size()>0){
  1502.                     for (IDAccordo idAccordo : idsAccordi) {
  1503.                         this.readAccordoServizioParteComune(archive, idAccordo, cascadeConfig, ArchiveType.SOGGETTO);
  1504.                     }
  1505.                 }
  1506.             }catch(DriverRegistroServiziNotFound notFound){}    
  1507.            
  1508.             // accordi servizio composto
  1509.             FiltroRicercaAccordi filtroAccordiServizioComposto = new FiltroRicercaAccordi();
  1510.             filtroAccordiServizioComposto.setTipoSoggettoReferente(idSoggetto.getTipo());
  1511.             filtroAccordiServizioComposto.setNomeSoggettoReferente(idSoggetto.getNome());
  1512.             filtroAccordiServizioComposto.setServizioComposto(true);
  1513.             try{
  1514.                 List<IDAccordo> idsAccordi = this.archiveEngine.getAllIdAccordiServizioParteComune(filtroAccordiServizioComposto);
  1515.                 if(idsAccordi!=null && idsAccordi.size()>0){
  1516.                     for (IDAccordo idAccordo : idsAccordi) {
  1517.                         this.readAccordoServizioComposto(archive, idAccordo, cascadeConfig, ArchiveType.SOGGETTO);
  1518.                     }
  1519.                 }
  1520.             }catch(DriverRegistroServiziNotFound notFound){}    
  1521.            
  1522.             // accordi servizio parte specifica
  1523.             FiltroRicercaServizi filtroAccordiServizioParteSpecifica = new FiltroRicercaServizi();
  1524.             filtroAccordiServizioParteSpecifica.setTipoSoggettoErogatore(idSoggetto.getTipo());
  1525.             filtroAccordiServizioParteSpecifica.setNomeSoggettoErogatore(idSoggetto.getNome());
  1526.             try{
  1527.                 List<IDServizio> idsAccordi = this.archiveEngine.getAllIdAccordiServizioParteSpecifica(filtroAccordiServizioParteSpecifica);
  1528.                 if(idsAccordi!=null && idsAccordi.size()>0){
  1529.                     for (IDServizio idAccordo : idsAccordi) {
  1530.                         this.readAccordoServizioParteSpecifica(archive, idAccordo, cascadeConfig, ArchiveType.SOGGETTO);
  1531.                     }
  1532.                 }
  1533.             }catch(DriverRegistroServiziNotFound notFound){}    
  1534.            
  1535.             // porteDelegate
  1536.             FiltroRicercaPorteDelegate filtroPorteDelegate = new FiltroRicercaPorteDelegate();
  1537.             filtroPorteDelegate.setTipoSoggetto(idSoggetto.getTipo());
  1538.             filtroPorteDelegate.setNomeSoggetto(idSoggetto.getNome());
  1539.             try{
  1540.                 List<IDPortaDelegata> idsPD = this.archiveEngine.getAllIdPorteDelegate(filtroPorteDelegate);
  1541.                 if(idsPD!=null && idsPD.size()>0){
  1542.                     for (IDPortaDelegata idPortaDelegata : idsPD) {
  1543.                         this.readPortaDelegata(archive, idPortaDelegata, cascadeConfig, ArchiveType.SOGGETTO);
  1544.                     }
  1545.                 }
  1546.             }catch(DriverConfigurazioneNotFound notFound){}
  1547.            
  1548.             // porteApplicative
  1549.             FiltroRicercaPorteApplicative filtroPorteApplicative = new FiltroRicercaPorteApplicative();
  1550.             filtroPorteApplicative.setTipoSoggetto(idSoggetto.getTipo());
  1551.             filtroPorteApplicative.setNomeSoggetto(idSoggetto.getNome());
  1552.             try{
  1553.                 List<IDPortaApplicativa> idsPA = this.archiveEngine.getAllIdPorteApplicative(filtroPorteApplicative);
  1554.                 if(idsPA!=null && idsPA.size()>0){
  1555.                     for (IDPortaApplicativa idPortaApplicativa : idsPA) {
  1556.                         this.readPortaApplicativa(archive, idPortaApplicativa, cascadeConfig, ArchiveType.SOGGETTO);
  1557.                     }
  1558.                 }
  1559.             }catch(DriverConfigurazioneNotFound notFound){}
  1560.            
  1561.         }
  1562.        
  1563.            
  1564.     }
  1565.    
  1566.     private void readServizioApplicativo(Archive archive, IDServizioApplicativo idServizioApplicativo,
  1567.             ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception{
  1568.         this.readServizioApplicativo(archive, idServizioApplicativo, cascadeConfig, true, provenienza);
  1569.     }
  1570.     private void readServizioApplicativo(Archive archive, IDServizioApplicativo idServizioApplicativo,
  1571.             ArchiveCascadeConfiguration cascadeConfig, boolean cascadeAvanti, ArchiveType provenienza) throws Exception{
  1572.        
  1573.         String key =  ArchiveServizioApplicativo.buildKey(idServizioApplicativo.getIdSoggettoProprietario().getTipo(),
  1574.                 idServizioApplicativo.getIdSoggettoProprietario().getNome(),
  1575.                 idServizioApplicativo.getNome());
  1576.         if(archive.getServiziApplicativi().containsKey(key)){
  1577.             // gia gestito
  1578.         }
  1579.         else{
  1580.             try{
  1581.                 // Fanno eccezione i servizi applicativi per i quali esiste piu' di un padre. In questo caso si esamina il padre:
  1582.                 // - nel caso di padre=soggetto/sa si vede esclusivamente il cascade dei servizi applicativi
  1583.                 // - nel caso di padre=porta delegata si controlla sia il cascade dei servizi applicativi che il cascade della porta delegata
  1584.                 // - nel caso di padre=porta applicativa si controlla sia il cascade dei servizi applicativi che il cascade della porta applicativa
  1585.                 // - nel caso di padre=fruitore si controlla sia il cascade dei servizi applicativi che il cascade delle fruizioni
  1586.                 boolean enabled = cascadeConfig.isCascadeServiziApplicativi();
  1587.                 switch (provenienza) {
  1588.                 case SOGGETTO:
  1589.                     break;
  1590.                 case SERVIZIO_APPLICATIVO:
  1591.                     enabled = enabled || ArchiveType.SERVIZIO_APPLICATIVO.equals(provenienza);
  1592.                     break;
  1593.                 case PORTA_DELEGATA:
  1594.                     enabled = enabled && cascadeConfig.isCascadePorteDelegate();
  1595.                     break;
  1596.                 case PORTA_APPLICATIVA:
  1597.                     enabled = enabled && cascadeConfig.isCascadePorteApplicative();
  1598.                     break;
  1599.                 case FRUITORE:
  1600.                     enabled = enabled && cascadeConfig.isCascadeFruizioni();
  1601.                     break;
  1602.                 default:
  1603.                     break;
  1604.                 }
  1605.                
  1606.                 if(enabled){
  1607.                    
  1608.                     // add
  1609.                     org.openspcoop2.core.config.ServizioApplicativo sa = this.archiveEngine.getServizioApplicativo(idServizioApplicativo);
  1610.                     if(sa==null) {
  1611.                         throw new Exception("Servizio Applicativo '"+idServizioApplicativo+"' non esistente");
  1612.                     }
  1613.                     if(sa.getTipoSoggettoProprietario()==null){
  1614.                         sa.setTipoSoggettoProprietario(idServizioApplicativo.getIdSoggettoProprietario().getTipo());
  1615.                     }
  1616.                     if(sa.getNomeSoggettoProprietario()==null){
  1617.                         sa.setNomeSoggettoProprietario(idServizioApplicativo.getIdSoggettoProprietario().getNome());
  1618.                     }
  1619.                     ArchiveServizioApplicativo archiveSa = new ArchiveServizioApplicativo(sa, this.idCorrelazione);
  1620.                     archive.getServiziApplicativi().add(archiveSa);
  1621.                    
  1622.                     // *** dipendenze: oggetti necessari per la creazione dell'oggetto sopra aggiunto ***
  1623.                    
  1624.                     // soggetto proprietario
  1625.                     this.readSoggetto(archive, idServizioApplicativo.getIdSoggettoProprietario(), cascadeConfig, false, ArchiveType.SERVIZIO_APPLICATIVO); // per evitare loop
  1626.                    
  1627.                     // ruoli
  1628.                     if(sa.getInvocazionePorta()!=null && sa.getInvocazionePorta().getRuoli()!=null &&
  1629.                             sa.getInvocazionePorta().getRuoli().sizeRuoloList()>0){
  1630.                         for (int i = 0; i < sa.getInvocazionePorta().getRuoli().sizeRuoloList(); i++) {
  1631.                             Ruolo ruolo = sa.getInvocazionePorta().getRuoli().getRuolo(i);
  1632.                             FiltroRicercaRuoli filtroRuolo = new FiltroRicercaRuoli();
  1633.                             filtroRuolo.setNome(ruolo.getNome());
  1634.                             try{
  1635.                                 List<IDRuolo> idsRuoli = this.archiveEngine.getAllIdRuoli(filtroRuolo);
  1636.                                 if(idsRuoli!=null && idsRuoli.size()>0){
  1637.                                     for (IDRuolo idRuolo : idsRuoli) {
  1638.                                         this.readRuolo(archive, idRuolo, cascadeConfig, false, ArchiveType.SERVIZIO_APPLICATIVO); // per evitare loop
  1639.                                     }
  1640.                                 }
  1641.                             }catch(DriverRegistroServiziNotFound notFound){}    
  1642.                         }
  1643.                     }
  1644.                    
  1645.                     // token policy di negoziazione
  1646.                     if(cascadeConfig.isCascadePolicyConfigurazione()) {
  1647.                         if(sa!=null && sa.getInvocazioneServizio()!=null) {
  1648.                             if(sa.getInvocazioneServizio().getConnettore()!=null &&
  1649.                                     sa.getInvocazioneServizio().getConnettore().getProperties()!=null && sa.getInvocazioneServizio().getConnettore().getProperties().containsKey(CostantiConnettori.CONNETTORE_TOKEN_POLICY)) {
  1650.                                 this.readTokenPolicy_retrieve(archive, sa.getInvocazioneServizio().getConnettore().getProperties().get(CostantiConnettori.CONNETTORE_TOKEN_POLICY),
  1651.                                         cascadeConfig, provenienza);
  1652.                             }
  1653.                         }
  1654.                         if(sa!=null && sa.getRispostaAsincrona()!=null) {
  1655.                             if(sa.getRispostaAsincrona().getConnettore()!=null &&
  1656.                                     sa.getRispostaAsincrona().getConnettore().getProperties()!=null && sa.getRispostaAsincrona().getConnettore().getProperties().containsKey(CostantiConnettori.CONNETTORE_TOKEN_POLICY)) {
  1657.                                 this.readTokenPolicy_retrieve(archive, sa.getRispostaAsincrona().getConnettore().getProperties().get(CostantiConnettori.CONNETTORE_TOKEN_POLICY),
  1658.                                         cascadeConfig, provenienza);
  1659.                             }
  1660.                         }
  1661.                     }
  1662.                    
  1663.                     // aggiungo eventuale plugin configurato.
  1664.                     if(cascadeConfig.isCascadePluginConfigurazione()) {
  1665.                         if(sa!=null && sa.getInvocazioneServizio()!=null) {
  1666.                             if(sa.getInvocazioneServizio().getConnettore()!=null &&
  1667.                                     sa.getInvocazioneServizio().getConnettore().getCustom()!=null &&
  1668.                                     sa.getInvocazioneServizio().getConnettore().getCustom() &&
  1669.                                     sa.getInvocazioneServizio().getConnettore().getTipo()!=null) {
  1670.                                 TipiConnettore tipo = TipiConnettore.toEnumFromName(sa.getInvocazioneServizio().getConnettore().getTipo());
  1671.                                 if(tipo==null) {
  1672.                                     try {
  1673.                                         readPlugin_classe(archive, TipoPlugin.CONNETTORE.getValue(), sa.getInvocazioneServizio().getConnettore().getTipo(), cascadeConfig, provenienza);
  1674.                                     }catch(DriverConfigurazioneNotFound notFound) {}
  1675.                                 }
  1676.                             }
  1677.                         }
  1678.                         if(sa!=null && sa.getRispostaAsincrona()!=null) {
  1679.                             if(sa.getRispostaAsincrona().getConnettore()!=null  &&
  1680.                                     sa.getRispostaAsincrona().getConnettore().getCustom()!=null &&
  1681.                                     sa.getRispostaAsincrona().getConnettore().getCustom() &&
  1682.                                     sa.getRispostaAsincrona().getConnettore().getTipo()!=null) {
  1683.                                 TipiConnettore tipo = TipiConnettore.toEnumFromName(sa.getRispostaAsincrona().getConnettore().getTipo());
  1684.                                 if(tipo==null) {
  1685.                                     try {
  1686.                                         readPlugin_classe(archive, TipoPlugin.CONNETTORE.getValue(), sa.getRispostaAsincrona().getConnettore().getTipo(), cascadeConfig, provenienza);
  1687.                                     }catch(DriverConfigurazioneNotFound notFound) {}
  1688.                                 }
  1689.                             }
  1690.                         }

  1691.                     }
  1692.                 }
  1693.             }catch(Exception e){
  1694.                 throw new ProtocolException("(ServizioApplicativo "+idServizioApplicativo+") "+e.getMessage(),e);
  1695.             }
  1696.         }
  1697.        
  1698.        
  1699.         // *** cascade in avanti ***
  1700.        
  1701.         if(cascadeAvanti){
  1702.        
  1703.             // non vi sono oggetti con padre un servizio applicativo
  1704.            
  1705.         }
  1706.        
  1707.     }
  1708.    
  1709.     private void readAccordoCooperazione(Archive archive, IDAccordoCooperazione idAccordoCooperazione,
  1710.             ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception{
  1711.         this.readAccordoCooperazione(archive, idAccordoCooperazione, cascadeConfig, true, provenienza);
  1712.     }
  1713.     private void readAccordoCooperazione(Archive archive, IDAccordoCooperazione idAccordoCooperazione,
  1714.             ArchiveCascadeConfiguration cascadeConfig, boolean cascadeAvanti, ArchiveType provenienza) throws Exception{
  1715.        
  1716.         String tipoSoggetto = null;
  1717.         String nomeSoggetto = null;
  1718.         if(idAccordoCooperazione.getSoggettoReferente()!=null){
  1719.             tipoSoggetto = idAccordoCooperazione.getSoggettoReferente().getTipo();
  1720.             nomeSoggetto = idAccordoCooperazione.getSoggettoReferente().getNome();
  1721.         }
  1722.        
  1723.         String key =  ArchiveAccordoCooperazione.buildKey(tipoSoggetto,nomeSoggetto,
  1724.                 idAccordoCooperazione.getNome(),idAccordoCooperazione.getVersione());
  1725.         if(archive.getAccordiCooperazione().containsKey(key)){
  1726.             // gia gestito
  1727.         }
  1728.         else{
  1729.             try{
  1730.                
  1731.                 if(cascadeConfig.isCascadeAccordoCooperazione() || ArchiveType.ACCORDO_COOPERAZIONE.equals(provenienza)){
  1732.                
  1733.                     // add
  1734.                     org.openspcoop2.core.registry.AccordoCooperazione ac = this.archiveEngine.getAccordoCooperazione(idAccordoCooperazione,true);
  1735.                     ArchiveAccordoCooperazione archiveAc = new ArchiveAccordoCooperazione(ac, this.idCorrelazione);
  1736.                     archive.getAccordiCooperazione().add(archiveAc);
  1737.                    
  1738.                     // *** dipendenze: oggetti necessari per la creazione dell'oggetto sopra aggiunto ***
  1739.                    
  1740.                     // soggetto referente
  1741.                     this.readSoggetto(archive, idAccordoCooperazione.getSoggettoReferente(), cascadeConfig, false, ArchiveType.ACCORDO_COOPERAZIONE); // per evitare loop
  1742.                    
  1743.                     // soggetti partecipanti
  1744.                     if( ac.getElencoPartecipanti()!=null &&  ac.getElencoPartecipanti().sizeSoggettoPartecipanteList()>0){
  1745.                         for (IdSoggetto partecipante : ac.getElencoPartecipanti().getSoggettoPartecipanteList()) {
  1746.                             IDSoggetto idPartecipante = new IDSoggetto(partecipante.getTipo(), partecipante.getNome());
  1747.                             this.readSoggetto(archive, idPartecipante, cascadeConfig, false, ArchiveType.ACCORDO_COOPERAZIONE); // per evitare loop
  1748.                             // tutti gli accordi esati o fruiti dai soggetti partecipanti saranno gestiti dagli accordi di servizio composti tramite i servizi componenti
  1749.                         }
  1750.                     }
  1751.                    
  1752.                 }
  1753.                    
  1754.             }catch(Exception e){
  1755.                 throw new ProtocolException("(AccordoCooperazione "+IDAccordoCooperazioneFactory.getInstance().getUriFromIDAccordo(idAccordoCooperazione)+") "+e.getMessage(),e);
  1756.             }
  1757.         }
  1758.    
  1759.        
  1760.         // *** cascade in avanti ***
  1761.        
  1762.         if(cascadeAvanti){
  1763.        
  1764.             // accordi di servizio composti
  1765.             FiltroRicercaAccordi filtroRicercaAccordi = new FiltroRicercaAccordi();
  1766.             filtroRicercaAccordi.setIdAccordoCooperazione(idAccordoCooperazione);
  1767.             try{
  1768.                 List<IDAccordo> idsAS = this.archiveEngine.getAllIdAccordiServizioParteComune(filtroRicercaAccordi);
  1769.                 if(idsAS!=null && idsAS.size()>0){
  1770.                     for (IDAccordo idAccordo : idsAS) {
  1771.                         this.readAccordoServizioComposto(archive, idAccordo, cascadeConfig, ArchiveType.ACCORDO_COOPERAZIONE);
  1772.                     }
  1773.                 }
  1774.             }catch(DriverRegistroServiziNotFound notFound){}
  1775.            
  1776.         }
  1777.        
  1778.     }
  1779.    
  1780.     private void readAccordoServizioParteComune(Archive archive, IDAccordo idAccordoServizio,
  1781.             ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception{
  1782.         this.readAccordoServizioParteComune(archive, idAccordoServizio, cascadeConfig, true, provenienza);
  1783.     }
  1784.     private void readAccordoServizioParteComune(Archive archive, IDAccordo idAccordoServizio,
  1785.             ArchiveCascadeConfiguration cascadeConfig, boolean cascadeAvanti, ArchiveType provenienza) throws Exception{
  1786.        
  1787.         String tipoSoggetto = null;
  1788.         String nomeSoggetto = null;
  1789.         if(idAccordoServizio.getSoggettoReferente()!=null){
  1790.             tipoSoggetto = idAccordoServizio.getSoggettoReferente().getTipo();
  1791.             nomeSoggetto = idAccordoServizio.getSoggettoReferente().getNome();
  1792.         }
  1793.         String key =  ArchiveAccordoServizioParteComune.buildKey(tipoSoggetto,nomeSoggetto,
  1794.                 idAccordoServizio.getNome(),idAccordoServizio.getVersione());
  1795.         if(archive.getAccordiServizioParteComune().containsKey(key)){
  1796.             // gia gestito
  1797.         }
  1798.         else{
  1799.             try{
  1800.                
  1801.                 if(cascadeConfig.isCascadeAccordoServizioParteComune() || ArchiveType.ACCORDO_SERVIZIO_PARTE_COMUNE.equals(provenienza)){
  1802.                
  1803.                     // add
  1804.                     org.openspcoop2.core.registry.AccordoServizioParteComune as = this.archiveEngine.getAccordoServizioParteComune(idAccordoServizio,true,true);
  1805.                     ArchiveAccordoServizioParteComune archiveAs = new ArchiveAccordoServizioParteComune(as, this.idCorrelazione);
  1806.                     archive.getAccordiServizioParteComune().add(archiveAs);
  1807.                    
  1808.                     // *** dipendenze: oggetti necessari per la creazione dell'oggetto sopra aggiunto ***
  1809.                    
  1810.                     this.readSoggetto(archive, idAccordoServizio.getSoggettoReferente(), cascadeConfig, false, ArchiveType.ACCORDO_SERVIZIO_PARTE_COMUNE); // per evitare loop
  1811.                    
  1812.                     if(as.getGruppi()!=null && as.getGruppi().sizeGruppoList()>0) {
  1813.                         for (GruppoAccordo gruppo : as.getGruppi().getGruppoList()) {
  1814.                             IDGruppo idGruppo = new IDGruppo(gruppo.getNome());
  1815.                             this.readGruppo(archive, idGruppo, cascadeConfig, false,
  1816.                                     ArchiveType.GRUPPO); // voglio che sia aggiunto sempre e comunque il tag (si tratta di un caso eccezionale, essendo il tag un elemento che non contiene aspetti di configurazione)
  1817.                                     //ArchiveType.ACCORDO_SERVIZIO_PARTE_COMUNE); // per evitare loop
  1818.                         }
  1819.                     }
  1820.                    
  1821.                 }
  1822.                
  1823.             }catch(Exception e){
  1824.                 throw new ProtocolException("(AccordoServizioParteComune "+IDAccordoFactory.getInstance().getUriFromIDAccordo(idAccordoServizio)+") "+e.getMessage(),e);
  1825.             }
  1826.         }
  1827.    
  1828.        
  1829.         // *** cascade in avanti ***
  1830.        
  1831.         if(cascadeAvanti){
  1832.        
  1833.             // accordi di servizio parte specifica
  1834.             FiltroRicercaServizi filtroRicercaAccordi = new FiltroRicercaServizi();
  1835.             filtroRicercaAccordi.setIdAccordoServizioParteComune(idAccordoServizio);
  1836.             try{
  1837.                 List<IDServizio> idsAS = this.archiveEngine.getAllIdAccordiServizioParteSpecifica(filtroRicercaAccordi);
  1838.                 if(idsAS!=null && idsAS.size()>0){
  1839.                     for (IDServizio idAccordo : idsAS) {
  1840.                         this.readAccordoServizioParteSpecifica(archive, idAccordo, cascadeConfig, ArchiveType.ACCORDO_SERVIZIO_PARTE_COMUNE);
  1841.                     }
  1842.                 }
  1843.             }catch(DriverRegistroServiziNotFound notFound){}
  1844.            
  1845.         }
  1846.        
  1847.     }
  1848.    
  1849.     private void readAccordoServizioComposto(Archive archive, IDAccordo idAccordoServizio,
  1850.             ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception{
  1851.         this.readAccordoServizioComposto(archive, idAccordoServizio, cascadeConfig, true, provenienza);
  1852.     }
  1853.     private void readAccordoServizioComposto(Archive archive, IDAccordo idAccordoServizio,
  1854.             ArchiveCascadeConfiguration cascadeConfig, boolean cascadeAvanti, ArchiveType provenienza) throws Exception{
  1855.        
  1856.         String tipoSoggetto = null;
  1857.         String nomeSoggetto = null;
  1858.         if(idAccordoServizio.getSoggettoReferente()!=null){
  1859.             tipoSoggetto = idAccordoServizio.getSoggettoReferente().getTipo();
  1860.             nomeSoggetto = idAccordoServizio.getSoggettoReferente().getNome();
  1861.         }
  1862.         String key =  ArchiveAccordoServizioComposto.buildKey(tipoSoggetto,nomeSoggetto,
  1863.                 idAccordoServizio.getNome(),idAccordoServizio.getVersione());
  1864.         org.openspcoop2.core.registry.AccordoServizioParteComune as = null;
  1865.         if(archive.getAccordiServizioComposto().containsKey(key)){
  1866.             // gia gestito
  1867.             as = archive.getAccordiServizioComposto().get(key).getAccordoServizioParteComune();
  1868.         }
  1869.         else{
  1870.             try{
  1871.                 if(cascadeConfig.isCascadeAccordoServizioComposto() || ArchiveType.ACCORDO_SERVIZIO_COMPOSTO.equals(provenienza)){
  1872.                
  1873.                     // add
  1874.                     as = this.archiveEngine.getAccordoServizioParteComune(idAccordoServizio,true,true);
  1875.                     ArchiveAccordoServizioComposto archiveAs = new ArchiveAccordoServizioComposto(as, this.idCorrelazione);
  1876.                     archive.getAccordiServizioComposto().add(archiveAs);
  1877.                
  1878.                     // *** dipendenze: oggetti necessari per la creazione dell'oggetto sopra aggiunto ***
  1879.                    
  1880.                     this.readSoggetto(archive, idAccordoServizio.getSoggettoReferente(), cascadeConfig, false, ArchiveType.ACCORDO_SERVIZIO_COMPOSTO); // per evitare loop
  1881.                    
  1882.                 }
  1883.                 else{
  1884.                     as = this.archiveEngine.getAccordoServizioParteComune(idAccordoServizio,false,true);
  1885.                 }  
  1886.             }catch(Exception e){
  1887.                 throw new ProtocolException("(AccordoServizioComposto "+IDAccordoFactory.getInstance().getUriFromIDAccordo(idAccordoServizio)+") "+e.getMessage(),e);
  1888.             }
  1889.         }
  1890.    
  1891.        
  1892.         // *** cascade in avanti ***
  1893.        
  1894.         if(cascadeAvanti){
  1895.        
  1896.             // accordi di servizio parte specifica
  1897.             FiltroRicercaServizi filtroRicercaAccordi = new FiltroRicercaServizi();
  1898.             filtroRicercaAccordi.setIdAccordoServizioParteComune(idAccordoServizio);
  1899.             try{
  1900.                 List<IDServizio> idsAS = this.archiveEngine.getAllIdAccordiServizioParteSpecifica(filtroRicercaAccordi);
  1901.                 if(idsAS!=null && idsAS.size()>0){
  1902.                     for (IDServizio idAccordo : idsAS) {
  1903.                         this.readAccordoServizioParteSpecifica(archive, idAccordo, cascadeConfig, ArchiveType.ACCORDO_SERVIZIO_COMPOSTO);
  1904.                     }
  1905.                 }
  1906.             }catch(DriverRegistroServiziNotFound notFound){}

  1907.             // servizi componenti
  1908.             for (AccordoServizioParteComuneServizioCompostoServizioComponente servizioComponente : as.getServizioComposto().getServizioComponenteList()) {
  1909.                 IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(servizioComponente.getTipo(),servizioComponente.getNome(),
  1910.                         servizioComponente.getTipoSoggetto(),servizioComponente.getNomeSoggetto(),
  1911.                         servizioComponente.getVersione());
  1912.                 this.readAccordoServizioParteSpecifica(archive, idServizio, cascadeConfig, ArchiveType.ACCORDO_SERVIZIO_COMPOSTO);
  1913.             }
  1914.            
  1915.         }
  1916.        

  1917.     }

  1918.     private void readAccordoServizioParteSpecifica(Archive archive, IDServizio idAccordoServizio,
  1919.             ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception{
  1920.         this.readAccordoServizioParteSpecifica(archive, idAccordoServizio, cascadeConfig, true, provenienza);
  1921.     }
  1922.     private void readAccordoServizioParteSpecifica(Archive archive, IDServizio idAccordoServizio,
  1923.             ArchiveCascadeConfiguration cascadeConfig, boolean cascadeAvanti, ArchiveType provenienza) throws Exception{
  1924.        
  1925.         String tipoSoggetto = null;
  1926.         String nomeSoggetto = null;
  1927.         if(idAccordoServizio.getSoggettoErogatore()!=null){
  1928.             tipoSoggetto = idAccordoServizio.getSoggettoErogatore().getTipo();
  1929.             nomeSoggetto = idAccordoServizio.getSoggettoErogatore().getNome();
  1930.         }
  1931.         String key =  ArchiveAccordoServizioParteSpecifica.buildKey(tipoSoggetto,nomeSoggetto,
  1932.                 idAccordoServizio.getTipo(),idAccordoServizio.getNome(),idAccordoServizio.getVersione());
  1933.         List<Fruitore> fruitoriList = null;
  1934.         org.openspcoop2.core.registry.AccordoServizioParteSpecifica  as = null;
  1935.         if(archive.getAccordiServizioParteSpecifica().containsKey(key)){
  1936.             // gia gestito
  1937.             as = archive.getAccordiServizioParteSpecifica().get(key).getAccordoServizioParteSpecifica();
  1938.         }
  1939.         else{
  1940.             try{
  1941.                 if(cascadeConfig.isCascadeAccordoServizioParteSpecifica()
  1942.                         || ArchiveType.ACCORDO_SERVIZIO_PARTE_SPECIFICA.equals(provenienza)
  1943.                         || ArchiveType.EROGAZIONE.equals(provenienza)
  1944.                         || ArchiveType.FRUIZIONE.equals(provenienza)){
  1945.                     fruitoriList = new ArrayList<Fruitore>();
  1946.                
  1947.                     // add
  1948.                     as = this.archiveEngine.getAccordoServizioParteSpecifica(idAccordoServizio,true);
  1949.                     if(as==null) {
  1950.                         throw new Exception("Accordo di servizio '"+idAccordoServizio+"' non esistente");
  1951.                     }
  1952.                     if(as.getTipoSoggettoErogatore()==null){
  1953.                         as.setTipoSoggettoErogatore(tipoSoggetto);
  1954.                     }
  1955.                     if(as.getNomeSoggettoErogatore()==null){
  1956.                         as.setNomeSoggettoErogatore(nomeSoggetto);
  1957.                     }
  1958.                     ArchiveAccordoServizioParteSpecifica archiveAs = new ArchiveAccordoServizioParteSpecifica(as, this.idCorrelazione);
  1959.                     while(as.sizeFruitoreList()>0){
  1960.                         fruitoriList.add(as.removeFruitore(0));
  1961.                     }
  1962.                     archive.getAccordiServizioParteSpecifica().add(archiveAs);
  1963.                    
  1964.                    
  1965.                     // porteApplicative associate
  1966.                     if(!ArchiveType.FRUIZIONE.equals(provenienza)) {
  1967.                         List<IDPortaApplicativa> listIDPA = this.archiveEngine.getIDPorteApplicativeAssociateErogazione(idAccordoServizio);
  1968.                         if(listIDPA!=null && listIDPA.size()>0){
  1969.                             if(archiveAs.getMappingPorteApplicativeAssociate()==null) {
  1970.                                 archiveAs.setMappingPorteApplicativeAssociate(new ArrayList<>());
  1971.                             }
  1972.                             for (IDPortaApplicativa idPortaApplicativa : listIDPA) {
  1973.                                 archiveAs.getMappingPorteApplicativeAssociate().add(this.archiveEngine.getMappingErogazionePortaApplicativa(idAccordoServizio, idPortaApplicativa));
  1974.                             }
  1975.                         }
  1976.                     }
  1977.                    
  1978.                    
  1979.                     // *** dipendenze: oggetti necessari per la creazione dell'oggetto sopra aggiunto ***
  1980.                    
  1981.                     // soggetto proprietario
  1982.                     this.readSoggetto(archive, idAccordoServizio.getSoggettoErogatore(), cascadeConfig, false, ArchiveType.ACCORDO_SERVIZIO_PARTE_SPECIFICA); // per evitare loop
  1983.                
  1984.                     // accordoServizioParteComune
  1985.                     IDAccordo idAccordoServizioParteComune = IDAccordoFactory.getInstance().getIDAccordoFromUri(as.getAccordoServizioParteComune());
  1986.                     AccordoServizioParteComune aspc = this.archiveEngine.getAccordoServizioParteComune(idAccordoServizioParteComune);
  1987.                     if(aspc.getServizioComposto()==null){
  1988.                         this.readAccordoServizioParteComune(archive, idAccordoServizioParteComune, cascadeConfig, false, ArchiveType.ACCORDO_SERVIZIO_PARTE_SPECIFICA); // per evitare loop
  1989.                     }
  1990.                     else{
  1991.                         this.readAccordoServizioComposto(archive, idAccordoServizioParteComune, cascadeConfig, false, ArchiveType.ACCORDO_SERVIZIO_PARTE_SPECIFICA); // per evitare loop
  1992.                     }
  1993.                    
  1994.                     // token policy di negoziazione (aggiunte solamente se abilitato il cascade di configurazione)
  1995.                     if(cascadeConfig.isCascadePolicyConfigurazione()) {
  1996.                         if(as!=null && as.getConfigurazioneServizio()!=null) {
  1997.                             if(as.getConfigurazioneServizio().getConnettore()!=null &&
  1998.                                     as.getConfigurazioneServizio().getConnettore().getProperties()!=null && as.getConfigurazioneServizio().getConnettore().getProperties().containsKey(CostantiConnettori.CONNETTORE_TOKEN_POLICY)) {
  1999.                                 this.readTokenPolicy_retrieve(archive, as.getConfigurazioneServizio().getConnettore().getProperties().get(CostantiConnettori.CONNETTORE_TOKEN_POLICY),
  2000.                                         cascadeConfig, provenienza);
  2001.                             }
  2002.                             if(as.getConfigurazioneServizio().sizeConfigurazioneAzioneList()>0) {
  2003.                                 for (ConfigurazioneServizioAzione confAzione : as.getConfigurazioneServizio().getConfigurazioneAzioneList()) {
  2004.                                     if(confAzione.getConnettore()!=null &&
  2005.                                             confAzione.getConnettore().getProperties()!=null && confAzione.getConnettore().getProperties().containsKey(CostantiConnettori.CONNETTORE_TOKEN_POLICY)) {
  2006.                                         this.readTokenPolicy_retrieve(archive, confAzione.getConnettore().getProperties().get(CostantiConnettori.CONNETTORE_TOKEN_POLICY),
  2007.                                                 cascadeConfig, provenienza);
  2008.                                     }
  2009.                                 }
  2010.                             }
  2011.                         }
  2012.                     }
  2013.                    
  2014.                     // aggiungo eventuale plugin configurato.
  2015.                     if(cascadeConfig.isCascadePluginConfigurazione()) {
  2016.                         if(as!=null && as.getConfigurazioneServizio()!=null) {
  2017.                             if(as.getConfigurazioneServizio().getConnettore()!=null &&
  2018.                                     as.getConfigurazioneServizio().getConnettore().getCustom()!=null &&
  2019.                                     as.getConfigurazioneServizio().getConnettore().getCustom() &&
  2020.                                     as.getConfigurazioneServizio().getConnettore().getTipo()!=null) {
  2021.                                 TipiConnettore tipo = TipiConnettore.toEnumFromName(as.getConfigurazioneServizio().getConnettore().getTipo());
  2022.                                 if(tipo==null) {
  2023.                                     try {
  2024.                                         readPlugin_classe(archive, TipoPlugin.CONNETTORE.getValue(), as.getConfigurazioneServizio().getConnettore().getTipo(), cascadeConfig, provenienza);
  2025.                                     }catch(DriverConfigurazioneNotFound notFound) {}
  2026.                                 }
  2027.                             }
  2028.                             if(as.getConfigurazioneServizio().sizeConfigurazioneAzioneList()>0) {
  2029.                                 for (ConfigurazioneServizioAzione confAzione : as.getConfigurazioneServizio().getConfigurazioneAzioneList()) {
  2030.                                     if(confAzione.getConnettore()!=null &&
  2031.                                             confAzione.getConnettore().getCustom()!=null &&
  2032.                                             confAzione.getConnettore().getCustom() &&
  2033.                                             confAzione.getConnettore().getTipo()!=null) {
  2034.                                         TipiConnettore tipo = TipiConnettore.toEnumFromName(confAzione.getConnettore().getTipo());
  2035.                                         if(tipo==null) {
  2036.                                             try {
  2037.                                                 readPlugin_classe(archive, TipoPlugin.CONNETTORE.getValue(), confAzione.getConnettore().getTipo(), cascadeConfig, provenienza);
  2038.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2039.                                         }
  2040.                                     }
  2041.                                 }
  2042.                             }
  2043.                         }
  2044.                     }
  2045.                 }
  2046.                    
  2047.             }catch(Exception e){
  2048.                 throw new ProtocolException("(AccordoServizioParteSpecifica "+IDServizioFactory.getInstance().getUriFromIDServizio(idAccordoServizio)+") "+e.getMessage(),e);
  2049.             }
  2050.         }
  2051.        
  2052.        
  2053.         // *** cascade in avanti ***
  2054.        
  2055.         if(cascadeAvanti){
  2056.        
  2057.             // fruitori
  2058.             if(fruitoriList==null){
  2059.                 // devo rileggere l'accordo. Quello salvato non contiene i fruitori
  2060.                 fruitoriList = new ArrayList<Fruitore>();
  2061.                 as = this.archiveEngine.getAccordoServizioParteSpecifica(idAccordoServizio,true);
  2062.                 while(as.sizeFruitoreList()>0){
  2063.                     fruitoriList.add(as.removeFruitore(0));
  2064.                 }
  2065.             }
  2066.             for (Fruitore fruitore : fruitoriList) {
  2067.                 IDSoggetto idFruitore = new IDSoggetto(fruitore.getTipo(), fruitore.getNome());
  2068.                 this.readFruitore(archive, idAccordoServizio, idFruitore, fruitore, cascadeConfig, ArchiveType.ACCORDO_SERVIZIO_PARTE_SPECIFICA);
  2069.             }
  2070.            
  2071.             // porteDelegate
  2072.             FiltroRicercaPorteDelegate filtroRicercaPorteDelegate = new FiltroRicercaPorteDelegate();
  2073.             filtroRicercaPorteDelegate.setTipoSoggettoErogatore(idAccordoServizio.getSoggettoErogatore().getTipo());
  2074.             filtroRicercaPorteDelegate.setNomeSoggettoErogatore(idAccordoServizio.getSoggettoErogatore().getNome());
  2075.             filtroRicercaPorteDelegate.setTipoServizio(as.getTipo());
  2076.             filtroRicercaPorteDelegate.setNomeServizio(as.getNome());
  2077.             filtroRicercaPorteDelegate.setVersioneServizio(as.getVersione());
  2078.             try{
  2079.                 List<IDPortaDelegata> idsPD = this.archiveEngine.getAllIdPorteDelegate(filtroRicercaPorteDelegate);
  2080.                 if(idsPD!=null && idsPD.size()>0){
  2081.                     for (IDPortaDelegata idPortaDelegata : idsPD) {
  2082.                         this.readPortaDelegata(archive, idPortaDelegata, cascadeConfig, ArchiveType.ACCORDO_SERVIZIO_PARTE_SPECIFICA);
  2083.                     }
  2084.                 }
  2085.             }catch(DriverConfigurazioneNotFound notFound){}
  2086.            
  2087.             // porteApplicative associate
  2088.             List<IDPortaApplicativa> listIDPA_associate = this.archiveEngine.getIDPorteApplicativeAssociateErogazione(idAccordoServizio);
  2089.             if(listIDPA_associate!=null && listIDPA_associate.size()>0){
  2090.                 for (IDPortaApplicativa idPA_associata : listIDPA_associate) {
  2091.                     this.readPortaApplicativa(archive, idPA_associata, cascadeConfig, ArchiveType.ACCORDO_SERVIZIO_PARTE_SPECIFICA);
  2092.                 }
  2093.             }
  2094.            
  2095.             // porteApplicative "normali"
  2096.             FiltroRicercaPorteApplicative filtroRicercaPorteApplicative = new FiltroRicercaPorteApplicative();
  2097.             filtroRicercaPorteApplicative.setTipoSoggetto(idAccordoServizio.getSoggettoErogatore().getTipo());
  2098.             filtroRicercaPorteApplicative.setNomeSoggetto(idAccordoServizio.getSoggettoErogatore().getNome());
  2099.             filtroRicercaPorteApplicative.setTipoServizio(as.getTipo());
  2100.             filtroRicercaPorteApplicative.setNomeServizio(as.getNome());
  2101.             filtroRicercaPorteApplicative.setVersioneServizio(as.getVersione());
  2102.             try{
  2103.                 List<IDPortaApplicativa> idsPA = this.archiveEngine.getAllIdPorteApplicative(filtroRicercaPorteApplicative);
  2104.                 if(idsPA!=null && idsPA.size()>0){
  2105.                     for (IDPortaApplicativa idPortaApplicativa : idsPA) {
  2106.                         if(listIDPA_associate!=null && listIDPA_associate.size()>0){
  2107.                             if(listIDPA_associate.contains(idPortaApplicativa)){
  2108.                                 continue;
  2109.                             }
  2110.                         }
  2111.                         this.readPortaApplicativa(archive, idPortaApplicativa, cascadeConfig, ArchiveType.ACCORDO_SERVIZIO_PARTE_SPECIFICA);
  2112.                     }
  2113.                 }
  2114.             }catch(DriverConfigurazioneNotFound notFound){}
  2115.                
  2116.             // porteApplicative "virtuali"
  2117.             filtroRicercaPorteApplicative = new FiltroRicercaPorteApplicative();
  2118.             filtroRicercaPorteApplicative.setTipoSoggettoVirtuale(idAccordoServizio.getSoggettoErogatore().getTipo());
  2119.             filtroRicercaPorteApplicative.setNomeSoggettoVirtuale(idAccordoServizio.getSoggettoErogatore().getNome());
  2120.             filtroRicercaPorteApplicative.setTipoServizio(as.getTipo());
  2121.             filtroRicercaPorteApplicative.setNomeServizio(as.getNome());
  2122.             filtroRicercaPorteApplicative.setVersioneServizio(as.getVersione());
  2123.             try{
  2124.                 List<IDPortaApplicativa> idsPA = this.archiveEngine.getAllIdPorteApplicative(filtroRicercaPorteApplicative);
  2125.                 if(idsPA!=null && idsPA.size()>0){
  2126.                     for (IDPortaApplicativa idPortaApplicativa : idsPA) {
  2127.                         this.readPortaApplicativa(archive, idPortaApplicativa, cascadeConfig, ArchiveType.ACCORDO_SERVIZIO_PARTE_SPECIFICA);
  2128.                     }
  2129.                 }
  2130.             }catch(DriverConfigurazioneNotFound notFound){}
  2131.                        
  2132.         }
  2133.        
  2134.     }
  2135.    
  2136.    
  2137.     private void readFruitore(Archive archive, IDServizio idAccordoServizio, IDSoggetto idFruitore, Fruitore fruitore,
  2138.             ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception{
  2139.         this.readFruitore(archive, idAccordoServizio, idFruitore, fruitore, cascadeConfig, true, provenienza);
  2140.     }
  2141.     private void readFruitore(Archive archive, IDServizio idAccordoServizio, IDSoggetto idFruitore, Fruitore fruitore,
  2142.             ArchiveCascadeConfiguration cascadeConfig, boolean cascadeAvanti, ArchiveType provenienza) throws Exception{
  2143.        
  2144.         String tipoSoggetto = null;
  2145.         String nomeSoggetto = null;
  2146.         if(idAccordoServizio.getSoggettoErogatore()!=null){
  2147.             tipoSoggetto = idAccordoServizio.getSoggettoErogatore().getTipo();
  2148.             nomeSoggetto = idAccordoServizio.getSoggettoErogatore().getNome();
  2149.         }
  2150.         String key =  ArchiveFruitore.buildKey(idFruitore.getTipo(),idFruitore.getNome(),
  2151.                 tipoSoggetto,nomeSoggetto,
  2152.                 idAccordoServizio.getTipo(),idAccordoServizio.getNome(),idAccordoServizio.getVersione());
  2153.         if(archive.getAccordiFruitori().containsKey(key)){
  2154.             // gia gestito
  2155.         }
  2156.         else{
  2157.             try{
  2158.                 if(cascadeConfig.isCascadeFruizioni() || ArchiveType.FRUITORE.equals(provenienza)){
  2159.                
  2160.                     // add
  2161.                     if(fruitore==null){
  2162.                         org.openspcoop2.core.registry.AccordoServizioParteSpecifica as = this.archiveEngine.getAccordoServizioParteSpecifica(idAccordoServizio,true);
  2163.                         for (Fruitore fruitoreCheck : as.getFruitoreList()) {
  2164.                             if(fruitoreCheck.getTipo().equals(idFruitore.getTipo()) &&
  2165.                                     fruitoreCheck.getNome().equals(idFruitore.getNome())){
  2166.                                 fruitore = fruitoreCheck;
  2167.                                 break;
  2168.                             }
  2169.                         }
  2170.                     }
  2171.                    
  2172.                     ArchiveFruitore archiveFruitore = new ArchiveFruitore(idAccordoServizio, fruitore, this.idCorrelazione);
  2173.                     archive.getAccordiFruitori().add(archiveFruitore);
  2174.                    
  2175.                     // porteDelegate associate
  2176.                     List<IDPortaDelegata> listIDPD = this.archiveEngine.getIDPorteDelegateAssociateFruizione(idAccordoServizio, idFruitore);
  2177.                     if(listIDPD!=null && listIDPD.size()>0){
  2178.                         if(archiveFruitore.getMappingPorteDelegateAssociate()==null) {
  2179.                             archiveFruitore.setMappingPorteDelegateAssociate(new ArrayList<>());
  2180.                         }
  2181.                         for (IDPortaDelegata idPortaDelegata : listIDPD) {
  2182.                             archiveFruitore.getMappingPorteDelegateAssociate().add( this.archiveEngine.getMappingFruizionePortaDelegata(idAccordoServizio, idFruitore, idPortaDelegata));
  2183.                         }
  2184.                     }
  2185.                    
  2186.                     // *** dipendenze: oggetti necessari per la creazione dell'oggetto sopra aggiunto ***
  2187.                    
  2188.                     // soggetto
  2189.                     this.readSoggetto(archive, idFruitore, cascadeConfig, false, ArchiveType.FRUITORE); // per evitare loop
  2190.                    
  2191.                     // accordoServizioParteSpecifica
  2192.                     this.readAccordoServizioParteSpecifica(archive, idAccordoServizio, cascadeConfig, false, ArchiveType.FRUITORE); // per evitare loop
  2193.                    
  2194.                     // token policy di negoziazione
  2195.                     if(cascadeConfig.isCascadePolicyConfigurazione()) {
  2196.                         if(fruitore!=null) {
  2197.                             if(fruitore.getConnettore()!=null &&
  2198.                                     fruitore.getConnettore().getProperties()!=null && fruitore.getConnettore().getProperties().containsKey(CostantiConnettori.CONNETTORE_TOKEN_POLICY)) {
  2199.                                 this.readTokenPolicy_retrieve(archive, fruitore.getConnettore().getProperties().get(CostantiConnettori.CONNETTORE_TOKEN_POLICY),
  2200.                                         cascadeConfig, provenienza);
  2201.                             }
  2202.                             if(fruitore.sizeConfigurazioneAzioneList()>0) {
  2203.                                 for (ConfigurazioneServizioAzione confAzione : fruitore.getConfigurazioneAzioneList()) {
  2204.                                     if(confAzione.getConnettore()!=null &&
  2205.                                             confAzione.getConnettore().getProperties()!=null && confAzione.getConnettore().getProperties().containsKey(CostantiConnettori.CONNETTORE_TOKEN_POLICY)) {
  2206.                                         this.readTokenPolicy_retrieve(archive, confAzione.getConnettore().getProperties().get(CostantiConnettori.CONNETTORE_TOKEN_POLICY),
  2207.                                                 cascadeConfig, provenienza);
  2208.                                     }
  2209.                                 }
  2210.                             }
  2211.                         }
  2212.                     }
  2213.                    
  2214.                     // aggiungo eventuale plugin configurato.
  2215.                     if(cascadeConfig.isCascadePluginConfigurazione()) {
  2216.                         if(fruitore!=null) {
  2217.                             if(fruitore.getConnettore()!=null &&
  2218.                                     fruitore.getConnettore().getCustom()!=null &&
  2219.                                     fruitore.getConnettore().getCustom() &&
  2220.                                     fruitore.getConnettore().getTipo()!=null) {
  2221.                                 TipiConnettore tipo = TipiConnettore.toEnumFromName(fruitore.getConnettore().getTipo());
  2222.                                 if(tipo==null) {
  2223.                                     try {
  2224.                                         readPlugin_classe(archive, TipoPlugin.CONNETTORE.getValue(), fruitore.getConnettore().getTipo(), cascadeConfig, provenienza);
  2225.                                     }catch(DriverConfigurazioneNotFound notFound) {}
  2226.                                 }
  2227.                             }
  2228.                             if(fruitore.sizeConfigurazioneAzioneList()>0) {
  2229.                                 for (ConfigurazioneServizioAzione confAzione : fruitore.getConfigurazioneAzioneList()) {
  2230.                                     if(confAzione.getConnettore()!=null &&
  2231.                                             confAzione.getConnettore().getCustom()!=null &&
  2232.                                             confAzione.getConnettore().getCustom() &&
  2233.                                             confAzione.getConnettore().getTipo()!=null) {
  2234.                                         TipiConnettore tipo = TipiConnettore.toEnumFromName(confAzione.getConnettore().getTipo());
  2235.                                         if(tipo==null) {
  2236.                                             try {
  2237.                                                 readPlugin_classe(archive, TipoPlugin.CONNETTORE.getValue(), confAzione.getConnettore().getTipo(), cascadeConfig, provenienza);
  2238.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2239.                                         }
  2240.                                     }
  2241.                                 }
  2242.                             }
  2243.                         }
  2244.                     }
  2245.                    
  2246.                 }
  2247.                    
  2248.             }catch(Exception e){
  2249.                 throw new ProtocolException("(Fruitore "+idFruitore+" dell'accordo "+IDServizioFactory.getInstance().getUriFromIDServizio(idAccordoServizio)+") "+e.getMessage(),e);
  2250.             }
  2251.         }
  2252.        
  2253.        
  2254.         // *** cascade in avanti ***
  2255.        
  2256.         if(cascadeAvanti){
  2257.        
  2258.             // porteDelegate associate
  2259.             List<IDPortaDelegata> listIDPD = this.archiveEngine.getIDPorteDelegateAssociateFruizione(idAccordoServizio, idFruitore);
  2260.             if(listIDPD!=null && listIDPD.size()>0){
  2261.                 for (IDPortaDelegata idPortaDelegata_associata : listIDPD) {
  2262.                     this.readPortaDelegata(archive, idPortaDelegata_associata, cascadeConfig, ArchiveType.FRUITORE);    
  2263.                 }
  2264.             }
  2265.            
  2266.         }
  2267.        
  2268.     }
  2269.    
  2270.     private PortaDelegata readPortaDelegata(Archive archive, IDPortaDelegata idPortaDelegata,
  2271.             ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception{
  2272.         return this.readPortaDelegata(archive, idPortaDelegata, cascadeConfig, true, provenienza);
  2273.     }
  2274.     private PortaDelegata readPortaDelegata(Archive archive, IDPortaDelegata idPortaDelegata,
  2275.             ArchiveCascadeConfiguration cascadeConfig, boolean cascadeAvanti, ArchiveType provenienza) throws Exception{
  2276.    
  2277.         IDSoggetto idSoggettoFruitore = idPortaDelegata.getIdentificativiFruizione().getSoggettoFruitore();
  2278.        
  2279.         String key =  ArchivePortaDelegata.buildKey(idSoggettoFruitore.getTipo(),
  2280.                 idSoggettoFruitore.getNome(),
  2281.                 idPortaDelegata.getNome());
  2282.         org.openspcoop2.core.config.PortaDelegata pd = null;
  2283.         if(archive.getPorteDelegate().containsKey(key)){
  2284.             // gia gestito
  2285.             pd = archive.getPorteDelegate().get(key).getPortaDelegata();
  2286.         }
  2287.         else{
  2288.             try{
  2289.                 pd = this.archiveEngine.getPortaDelegata(idPortaDelegata);
  2290.                
  2291.                 if(cascadeConfig.isCascadePorteDelegate() || ArchiveType.PORTA_DELEGATA.equals(provenienza)){
  2292.                
  2293.                     if(pd==null) {
  2294.                         throw new Exception("Porta delegata '"+idPortaDelegata+"' non esistente");
  2295.                     }
  2296.                    
  2297.                     // add
  2298.                     if(pd.getTipoSoggettoProprietario()==null){
  2299.                         pd.setTipoSoggettoProprietario(idSoggettoFruitore.getTipo());
  2300.                     }
  2301.                     if(pd.getNomeSoggettoProprietario()==null){
  2302.                         pd.setNomeSoggettoProprietario(idSoggettoFruitore.getNome());
  2303.                     }
  2304.                     ArchivePortaDelegata archivePd = new ArchivePortaDelegata(pd, this.idCorrelazione);
  2305.                     archive.getPorteDelegate().add(archivePd);
  2306.                    
  2307.                     // add rateLimiting
  2308.                     readControlloTrafficoPolicyPorta(archive, true, pd.getNome(), cascadeConfig, provenienza);
  2309.                    
  2310.                     // add allarmi
  2311.                     readAllarmiPorta(archive, true, pd.getNome(), cascadeConfig, provenienza);
  2312.                    
  2313.                    
  2314.                     // *** dipendenze: oggetti necessari per la creazione dell'oggetto sopra aggiunto ***
  2315.                    
  2316.                     // soggetto proprietario
  2317.                     this.readSoggetto(archive, idSoggettoFruitore, cascadeConfig, false, ArchiveType.PORTA_DELEGATA); // per evitare loop
  2318.                    
  2319.                     // eventuale servizio riferito
  2320.                     if(pd.getSoggettoErogatore()!=null &&
  2321.                             pd.getSoggettoErogatore().getTipo()!=null && !"".equals(pd.getSoggettoErogatore().getTipo()) &&
  2322.                             pd.getSoggettoErogatore().getNome()!=null && !"".equals(pd.getSoggettoErogatore().getNome()) &&
  2323.                             pd.getServizio()!=null &&
  2324.                             pd.getServizio().getTipo()!=null && !"".equals(pd.getServizio().getTipo()) &&
  2325.                             pd.getServizio().getNome()!=null && !"".equals(pd.getServizio().getNome()) &&
  2326.                             pd.getServizio().getVersione()!=null
  2327.                             ){
  2328.                        
  2329.                         IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(pd.getServizio().getTipo(), pd.getServizio().getNome(),
  2330.                                 pd.getSoggettoErogatore().getTipo(), pd.getSoggettoErogatore().getNome(),
  2331.                                 pd.getServizio().getVersione());
  2332.                         this.readAccordoServizioParteSpecifica(archive, idServizio, cascadeConfig, false, ArchiveType.PORTA_DELEGATA); // per evitare loop
  2333.                     }
  2334.                    
  2335.                     // ruoli
  2336.                     if(pd!=null && pd.getRuoli()!=null &&
  2337.                             pd.getRuoli().sizeRuoloList()>0){
  2338.                         for (int i = 0; i < pd.getRuoli().sizeRuoloList(); i++) {
  2339.                             Ruolo ruolo = pd.getRuoli().getRuolo(i);
  2340.                             FiltroRicercaRuoli filtroRuolo = new FiltroRicercaRuoli();
  2341.                             filtroRuolo.setNome(ruolo.getNome());
  2342.                             try{
  2343.                                 List<IDRuolo> idsRuoli = this.archiveEngine.getAllIdRuoli(filtroRuolo);
  2344.                                 if(idsRuoli!=null && idsRuoli.size()>0){
  2345.                                     for (IDRuolo idRuolo : idsRuoli) {
  2346.                                         this.readRuolo(archive, idRuolo, cascadeConfig, false, ArchiveType.PORTA_DELEGATA); // per evitare loop
  2347.                                     }
  2348.                                 }
  2349.                             }catch(DriverRegistroServiziNotFound notFound){}    
  2350.                         }
  2351.                     }
  2352.                    
  2353.                     // serviziApplicativi autorizzati
  2354.                     if(pd.getAutorizzazioneToken()!=null && pd.getAutorizzazioneToken().getServiziApplicativi()!=null &&  
  2355.                             pd.getAutorizzazioneToken().getServiziApplicativi().sizeServizioApplicativoList()>0){
  2356.                         for (PortaDelegataServizioApplicativo sa: pd.getAutorizzazioneToken().getServiziApplicativi().getServizioApplicativoList()) {
  2357.                             IDServizioApplicativo idSA = new IDServizioApplicativo();
  2358.                             idSA.setIdSoggettoProprietario(idSoggettoFruitore);
  2359.                             idSA.setNome(sa.getNome());
  2360.                             this.readServizioApplicativo(archive, idSA, cascadeConfig, ArchiveType.PORTA_DELEGATA);
  2361.                         }
  2362.                     }
  2363.                    
  2364.                     // ruoli token
  2365.                     if(pd!=null && pd.getAutorizzazioneToken()!=null && pd.getAutorizzazioneToken().getRuoli()!=null &&
  2366.                             pd.getAutorizzazioneToken().getRuoli().sizeRuoloList()>0){
  2367.                         for (int i = 0; i < pd.getAutorizzazioneToken().getRuoli().sizeRuoloList(); i++) {
  2368.                             Ruolo ruolo = pd.getAutorizzazioneToken().getRuoli().getRuolo(i);
  2369.                             FiltroRicercaRuoli filtroRuolo = new FiltroRicercaRuoli();
  2370.                             filtroRuolo.setNome(ruolo.getNome());
  2371.                             try{
  2372.                                 List<IDRuolo> idsRuoli = this.archiveEngine.getAllIdRuoli(filtroRuolo);
  2373.                                 if(idsRuoli!=null && idsRuoli.size()>0){
  2374.                                     for (IDRuolo idRuolo : idsRuoli) {
  2375.                                         this.readRuolo(archive, idRuolo, cascadeConfig, false, ArchiveType.PORTA_DELEGATA); // per evitare loop
  2376.                                     }
  2377.                                 }
  2378.                             }catch(DriverRegistroServiziNotFound notFound){}    
  2379.                         }
  2380.                     }
  2381.                    
  2382.                     // scope
  2383.                     if(pd!=null && pd.getScope()!=null &&
  2384.                             pd.getScope().sizeScopeList()>0){
  2385.                         for (int i = 0; i < pd.getScope().sizeScopeList(); i++) {
  2386.                             Scope scope = pd.getScope().getScope(i);
  2387.                             FiltroRicercaScope filtroScope = new FiltroRicercaScope();
  2388.                             filtroScope.setNome(scope.getNome());
  2389.                             try{
  2390.                                 List<IDScope> idsScope = this.archiveEngine.getAllIdScope(filtroScope);
  2391.                                 if(idsScope!=null && idsScope.size()>0){
  2392.                                     for (IDScope idScope : idsScope) {
  2393.                                         this.readScope(archive, idScope, cascadeConfig, false, ArchiveType.PORTA_DELEGATA); // per evitare loop
  2394.                                     }
  2395.                                 }
  2396.                             }catch(DriverRegistroServiziNotFound notFound){}    
  2397.                         }
  2398.                     }
  2399.                    
  2400.                     // token policy di validazione
  2401.                     if(cascadeConfig.isCascadePolicyConfigurazione()) {
  2402.                         if(pd!=null && pd.getGestioneToken()!=null && pd.getGestioneToken().getPolicy()!=null && !"".equals(pd.getGestioneToken().getPolicy())) {
  2403.                             this.readTokenPolicy_validation(archive, pd.getGestioneToken().getPolicy(), cascadeConfig, provenienza);
  2404.                         }
  2405.                     }
  2406.                    
  2407.                     // attribute authority
  2408.                     if(cascadeConfig.isCascadePolicyConfigurazione()) {
  2409.                         if(pd!=null && pd.sizeAttributeAuthorityList()>0) {
  2410.                             for (AttributeAuthority aa : pd.getAttributeAuthorityList()) {
  2411.                                 String nomeAA = aa.getNome();
  2412.                                 if(nomeAA!=null && !"".equals(nomeAA)) {
  2413.                                     this.readAttributeAuthority(archive, nomeAA, cascadeConfig, provenienza);
  2414.                                 }
  2415.                             }
  2416.                         }
  2417.                     }
  2418.                    
  2419.                     // trasformazioni
  2420.                     if(pd!=null && pd.getTrasformazioni()!=null &&
  2421.                             pd.getTrasformazioni().sizeRegolaList()>0) {
  2422.                         for (int i = 0; i < pd.getTrasformazioni().sizeRegolaList(); i++) {
  2423.                             TrasformazioneRegola regola = pd.getTrasformazioni().getRegola(i);
  2424.                             if(regola.getApplicabilita()!=null) {
  2425.                                
  2426.                                 if(regola.getApplicabilita().sizeServizioApplicativoList()>0) {
  2427.                                     for (int j = 0; j < regola.getApplicabilita().sizeServizioApplicativoList(); j++) {
  2428.                                         TrasformazioneRegolaApplicabilitaServizioApplicativo trSa = regola.getApplicabilita().getServizioApplicativo(j);
  2429.                                         if(trSa.getTipoSoggettoProprietario()!=null && trSa.getNomeSoggettoProprietario()!=null && trSa.getNome()!=null) {
  2430.                                             IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
  2431.                                             idServizioApplicativo.setNome(trSa.getNome());
  2432.                                             idServizioApplicativo.setIdSoggettoProprietario(new IDSoggetto(trSa.getTipoSoggettoProprietario(), trSa.getNomeSoggettoProprietario()));
  2433.                                             this.readServizioApplicativo(archive, idServizioApplicativo, cascadeConfig, false, ArchiveType.PORTA_DELEGATA); // per evitare loop
  2434.                                         }
  2435.                                     }
  2436.                                 }  
  2437.                                
  2438.                                 if(regola.getApplicabilita().sizeSoggettoList()>0) {
  2439.                                     for (int j = 0; j < regola.getApplicabilita().sizeSoggettoList(); j++) {
  2440.                                         TrasformazioneRegolaApplicabilitaSoggetto trSoggetto = regola.getApplicabilita().getSoggetto(j);
  2441.                                         if(trSoggetto.getTipo()!=null && trSoggetto.getNome()!=null) {
  2442.                                             IDSoggetto idSoggetto = new IDSoggetto(trSoggetto.getTipo(), trSoggetto.getNome());
  2443.                                             this.readSoggetto(archive, idSoggetto, cascadeConfig, false, ArchiveType.PORTA_DELEGATA); // per evitare loop
  2444.                                         }
  2445.                                     }
  2446.                                 }
  2447.                             }
  2448.                         }
  2449.                     }
  2450.                    
  2451.                     // aggiungo eventuale plugin configurato.
  2452.                     if(cascadeConfig.isCascadePluginConfigurazione()) {
  2453.                        
  2454.                         if(pd!=null && StringUtils.isNotEmpty(pd.getAutenticazione())) {
  2455.                             TipoAutenticazione tipo = TipoAutenticazione.toEnumConstant(pd.getAutenticazione(), false);
  2456.                             if(tipo==null) {
  2457.                                 try {
  2458.                                     readPlugin_classe(archive, TipoPlugin.AUTENTICAZIONE.getValue(), pd.getAutenticazione(), cascadeConfig, provenienza);
  2459.                                 }catch(DriverConfigurazioneNotFound notFound) {}
  2460.                             }
  2461.                         }
  2462.                         if(pd!=null && StringUtils.isNotEmpty(pd.getAutorizzazione())) {
  2463.                             TipoAutorizzazione tipo = TipoAutorizzazione.toEnumConstant(pd.getAutorizzazione(), false);
  2464.                             if(tipo==null) {
  2465.                                 try {
  2466.                                     readPlugin_classe(archive, TipoPlugin.AUTORIZZAZIONE.getValue(), pd.getAutorizzazione(), cascadeConfig, provenienza);
  2467.                                 }catch(DriverConfigurazioneNotFound notFound) {}
  2468.                             }
  2469.                         }
  2470.                         if(pd!=null && StringUtils.isNotEmpty(pd.getAutorizzazioneContenuto())) {
  2471.                             if(!CostantiConfigurazione.AUTORIZZAZIONE_CONTENUTO_BUILT_IN.equals(pd.getAutorizzazioneContenuto())) {
  2472.                                 try {
  2473.                                     readPlugin_classe(archive, TipoPlugin.AUTORIZZAZIONE_CONTENUTI.getValue(), pd.getAutorizzazioneContenuto(), cascadeConfig, provenienza);
  2474.                                 }catch(DriverConfigurazioneNotFound notFound) {}
  2475.                             }
  2476.                         }
  2477.                         if(pd!=null && pd.getIntegrazione()!=null && StringUtils.isNotEmpty(pd.getIntegrazione())) {
  2478.                             String[]tipi = pd.getIntegrazione().trim().split(",");
  2479.                             if(tipi!=null && tipi.length>0) {
  2480.                                 for (String t : tipi) {
  2481.                                     if(this.archiveEngine.existsPluginClasse(TipoPlugin.INTEGRAZIONE.getValue(), t)){
  2482.                                         try {
  2483.                                             readPlugin_classe(archive, TipoPlugin.INTEGRAZIONE.getValue(), t, cascadeConfig, provenienza);
  2484.                                         }catch(DriverConfigurazioneNotFound notFound) {}
  2485.                                     }
  2486.                                 }
  2487.                             }
  2488.                         }
  2489.                         if(pd!=null && pd.getConfigurazioneHandler()!=null) {
  2490.                             if(pd.getConfigurazioneHandler().getRequest()!=null) {
  2491.                                 if(pd.getConfigurazioneHandler().getRequest().sizePreInList()>0) {
  2492.                                     for (ConfigurazioneHandler ch : pd.getConfigurazioneHandler().getRequest().getPreInList()) {
  2493.                                         if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2494.                                             try {
  2495.                                                 readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2496.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2497.                                         }
  2498.                                     }
  2499.                                 }
  2500.                                 if(pd.getConfigurazioneHandler().getRequest().sizeInList()>0) {
  2501.                                     for (ConfigurazioneHandler ch : pd.getConfigurazioneHandler().getRequest().getInList()) {
  2502.                                         if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2503.                                             try {
  2504.                                                 readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2505.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2506.                                         }
  2507.                                     }
  2508.                                 }
  2509.                                 if(pd.getConfigurazioneHandler().getRequest().sizeInProtocolInfoList()>0) {
  2510.                                     for (ConfigurazioneHandler ch : pd.getConfigurazioneHandler().getRequest().getInProtocolInfoList()) {
  2511.                                         if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2512.                                             try {
  2513.                                                 readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2514.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2515.                                         }
  2516.                                     }
  2517.                                 }
  2518.                                 if(pd.getConfigurazioneHandler().getRequest().sizeOutList()>0) {
  2519.                                     for (ConfigurazioneHandler ch : pd.getConfigurazioneHandler().getRequest().getOutList()) {
  2520.                                         if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2521.                                             try {
  2522.                                                 readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2523.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2524.                                         }
  2525.                                     }
  2526.                                 }
  2527.                                 if(pd.getConfigurazioneHandler().getRequest().sizePostOutList()>0) {
  2528.                                     for (ConfigurazioneHandler ch : pd.getConfigurazioneHandler().getRequest().getPostOutList()) {
  2529.                                         if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2530.                                             try {
  2531.                                                 readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2532.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2533.                                         }
  2534.                                     }
  2535.                                 }
  2536.                             }
  2537.                             if(pd.getConfigurazioneHandler().getResponse()!=null) {
  2538.                                 if(pd.getConfigurazioneHandler().getResponse().sizePreInList()>0) {
  2539.                                     for (ConfigurazioneHandler ch : pd.getConfigurazioneHandler().getResponse().getPreInList()) {
  2540.                                         if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2541.                                             try {
  2542.                                                 readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2543.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2544.                                         }
  2545.                                     }
  2546.                                 }
  2547.                                 if(pd.getConfigurazioneHandler().getResponse().sizeInList()>0) {
  2548.                                     for (ConfigurazioneHandler ch : pd.getConfigurazioneHandler().getResponse().getInList()) {
  2549.                                         if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2550.                                             try {
  2551.                                                 readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2552.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2553.                                         }
  2554.                                     }
  2555.                                 }
  2556. //                              if(pd.getConfigurazioneHandler().getResponse().sizeInProtocolInfoList()>0) {
  2557. //                                  for (ConfigurazioneHandler ch : pd.getConfigurazioneHandler().getResponse().getInProtocolInfoList()) {
  2558. //                                      if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2559. //                                          try {
  2560. //                                              readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2561. //                                          }catch(DriverConfigurazioneNotFound notFound) {}
  2562. //                                      }
  2563. //                                  }
  2564. //                              }
  2565.                                 if(pd.getConfigurazioneHandler().getResponse().sizeOutList()>0) {
  2566.                                     for (ConfigurazioneHandler ch : pd.getConfigurazioneHandler().getResponse().getOutList()) {
  2567.                                         if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2568.                                             try {
  2569.                                                 readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2570.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2571.                                         }
  2572.                                     }
  2573.                                 }
  2574.                                 if(pd.getConfigurazioneHandler().getResponse().sizePostOutList()>0) {
  2575.                                     for (ConfigurazioneHandler ch : pd.getConfigurazioneHandler().getResponse().getPostOutList()) {
  2576.                                         if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2577.                                             try {
  2578.                                                 readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2579.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2580.                                         }
  2581.                                     }
  2582.                                 }
  2583.                             }
  2584.                         }
  2585.                    
  2586.                     }
  2587.                 }
  2588.                    
  2589.             }catch(Exception e){
  2590.                 throw new ProtocolException("(PortaDelegata "+idPortaDelegata+") "+e.getMessage(),e);
  2591.             }
  2592.         }
  2593.        
  2594.        
  2595.         // *** cascade in avanti ***
  2596.        
  2597.         if(cascadeAvanti){
  2598.        
  2599.             // serviziApplicativi
  2600.             if(pd.sizeServizioApplicativoList()>0){
  2601.                 for (PortaDelegataServizioApplicativo sa: pd.getServizioApplicativoList()) {
  2602.                     IDServizioApplicativo idSA = new IDServizioApplicativo();
  2603.                     idSA.setIdSoggettoProprietario(idSoggettoFruitore);
  2604.                     idSA.setNome(sa.getNome());
  2605.                     this.readServizioApplicativo(archive, idSA, cascadeConfig, ArchiveType.PORTA_DELEGATA);
  2606.                 }
  2607.             }
  2608.                        
  2609.         }
  2610.                
  2611.         return pd;
  2612.     }
  2613.    
  2614.    
  2615.     private PortaApplicativa readPortaApplicativa(Archive archive, IDPortaApplicativa idPortaApplicativa,
  2616.             ArchiveCascadeConfiguration cascadeConfig, ArchiveType provenienza) throws Exception{
  2617.         return this.readPortaApplicativa(archive, idPortaApplicativa, cascadeConfig, true, provenienza);
  2618.     }
  2619.     private PortaApplicativa readPortaApplicativa(Archive archive, IDPortaApplicativa idPortaApplicativa,
  2620.             ArchiveCascadeConfiguration cascadeConfig, boolean cascadeAvanti, ArchiveType provenienza) throws Exception{
  2621.    
  2622.         IDSoggetto idSoggettoErogatore = idPortaApplicativa.getIdentificativiErogazione().getIdServizio().getSoggettoErogatore();
  2623.        
  2624.         String key =  ArchivePortaApplicativa.buildKey(idSoggettoErogatore.getTipo(),
  2625.                 idSoggettoErogatore.getNome(),
  2626.                 idPortaApplicativa.getNome());
  2627.         org.openspcoop2.core.config.PortaApplicativa pa = null;
  2628.         if(archive.getPorteApplicative().containsKey(key)){
  2629.             // gia gestito
  2630.             pa = archive.getPorteApplicative().get(key).getPortaApplicativa();
  2631.         }
  2632.         else{
  2633.             try{
  2634.                
  2635.                 pa = this.archiveEngine.getPortaApplicativa(idPortaApplicativa);
  2636.                
  2637.                 if(cascadeConfig.isCascadePorteApplicative() || ArchiveType.PORTA_APPLICATIVA.equals(provenienza)){
  2638.                
  2639.                     if(pa==null) {
  2640.                         throw new Exception("Porta applicativa '"+idPortaApplicativa+"' non esistente");
  2641.                     }
  2642.                    
  2643.                     // add
  2644.                     if(pa.getTipoSoggettoProprietario()==null){
  2645.                         pa.setTipoSoggettoProprietario(idSoggettoErogatore.getTipo());
  2646.                     }
  2647.                     if(pa.getNomeSoggettoProprietario()==null){
  2648.                         pa.setNomeSoggettoProprietario(idSoggettoErogatore.getNome());
  2649.                     }
  2650.                     ArchivePortaApplicativa archivePa = new ArchivePortaApplicativa(pa, this.idCorrelazione);
  2651.                     archive.getPorteApplicative().add(archivePa);
  2652.                    
  2653.                     // add rateLimiting
  2654.                     readControlloTrafficoPolicyPorta(archive, false, pa.getNome(), cascadeConfig, provenienza);
  2655.                    
  2656.                     // add allarmi
  2657.                     readAllarmiPorta(archive, false, pa.getNome(), cascadeConfig, provenienza);
  2658.                    
  2659.                
  2660.                     // *** dipendenze: oggetti necessari per la creazione dell'oggetto sopra aggiunto ***
  2661.                    
  2662.                     // proprietario
  2663.                     this.readSoggetto(archive, idSoggettoErogatore, cascadeConfig, false, ArchiveType.PORTA_APPLICATIVA); // per evitare loop
  2664.                        
  2665.                     // virtuale
  2666.                     if(pa.getSoggettoVirtuale()!=null &&
  2667.                             pa.getSoggettoVirtuale().getTipo()!=null && !"".equals(pa.getSoggettoVirtuale().getTipo()) &&
  2668.                             pa.getSoggettoVirtuale().getNome()!=null && !"".equals(pa.getSoggettoVirtuale().getNome()) ){
  2669.                         IDSoggetto idSoggetto = new IDSoggetto(pa.getSoggettoVirtuale().getTipo(),pa.getSoggettoVirtuale().getNome());
  2670.                         this.readSoggetto(archive, idSoggetto, cascadeConfig, false, ArchiveType.PORTA_APPLICATIVA); // per evitare loop
  2671.                     }
  2672.                                        
  2673.                     // eventuale servizio riferito
  2674.                     if(pa.getServizio()!=null &&
  2675.                             pa.getServizio().getTipo()!=null && !"".equals(pa.getServizio().getTipo()) &&
  2676.                             pa.getServizio().getNome()!=null && !"".equals(pa.getServizio().getNome()) &&
  2677.                             pa.getServizio().getVersione()!=null
  2678.                             ){
  2679.                         if(pa.getSoggettoVirtuale()!=null &&
  2680.                                 pa.getSoggettoVirtuale().getTipo()!=null && !"".equals(pa.getSoggettoVirtuale().getTipo()) &&
  2681.                                 pa.getSoggettoVirtuale().getNome()!=null && !"".equals(pa.getSoggettoVirtuale().getNome()) ){
  2682.                            
  2683.                             IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(pa.getServizio().getTipo(), pa.getServizio().getNome(),
  2684.                                     pa.getSoggettoVirtuale().getTipo(), pa.getSoggettoVirtuale().getNome(),
  2685.                                     pa.getServizio().getVersione());
  2686.                             this.readAccordoServizioParteSpecifica(archive, idServizio, cascadeConfig, false, ArchiveType.PORTA_APPLICATIVA); // per evitare loop
  2687.                            
  2688.                         }
  2689.                         else {
  2690.                            
  2691.                             IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(pa.getServizio().getTipo(), pa.getServizio().getNome(),
  2692.                                     idSoggettoErogatore,
  2693.                                     pa.getServizio().getVersione());
  2694.                             this.readAccordoServizioParteSpecifica(archive, idServizio, cascadeConfig, false, ArchiveType.PORTA_APPLICATIVA); // per evitare loop
  2695.                            
  2696.                         }
  2697.                     }
  2698.                    
  2699.                     // ruoli
  2700.                     if(pa!=null && pa.getRuoli()!=null &&
  2701.                             pa.getRuoli().sizeRuoloList()>0){
  2702.                         for (int i = 0; i < pa.getRuoli().sizeRuoloList(); i++) {
  2703.                             Ruolo ruolo = pa.getRuoli().getRuolo(i);
  2704.                             FiltroRicercaRuoli filtroRuolo = new FiltroRicercaRuoli();
  2705.                             filtroRuolo.setNome(ruolo.getNome());
  2706.                             try{
  2707.                                 List<IDRuolo> idsRuoli = this.archiveEngine.getAllIdRuoli(filtroRuolo);
  2708.                                 if(idsRuoli!=null && idsRuoli.size()>0){
  2709.                                     for (IDRuolo idRuolo : idsRuoli) {
  2710.                                         this.readRuolo(archive, idRuolo, cascadeConfig, false, ArchiveType.PORTA_APPLICATIVA); // per evitare loop
  2711.                                     }
  2712.                                 }
  2713.                             }catch(DriverRegistroServiziNotFound notFound){}    
  2714.                         }
  2715.                     }
  2716.                    
  2717.                     // serviziApplicativi autorizzati token
  2718.                     if(pa!=null && pa.getAutorizzazioneToken()!=null && pa.getAutorizzazioneToken().getServiziApplicativi()!=null &&
  2719.                             pa.getAutorizzazioneToken().getServiziApplicativi().sizeServizioApplicativoList()>0) {
  2720.                         for (int i = 0; i < pa.getAutorizzazioneToken().getServiziApplicativi().sizeServizioApplicativoList(); i++) {
  2721.                             PortaApplicativaAutorizzazioneServizioApplicativo paSa = pa.getAutorizzazioneToken().getServiziApplicativi().getServizioApplicativo(i);
  2722.                             if(paSa.getTipoSoggettoProprietario()!=null && paSa.getNomeSoggettoProprietario()!=null && paSa.getNome()!=null) {
  2723.                                 IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
  2724.                                 idServizioApplicativo.setNome(paSa.getNome());
  2725.                                 idServizioApplicativo.setIdSoggettoProprietario(new IDSoggetto(paSa.getTipoSoggettoProprietario(), paSa.getNomeSoggettoProprietario()));
  2726.                                 this.readServizioApplicativo(archive, idServizioApplicativo, cascadeConfig, false, ArchiveType.PORTA_APPLICATIVA); // per evitare loop
  2727.                             }
  2728.                         }
  2729.                     }
  2730.                    
  2731.                     // ruoli token
  2732.                     if(pa!=null && pa.getAutorizzazioneToken()!=null && pa.getAutorizzazioneToken().getRuoli()!=null &&
  2733.                             pa.getAutorizzazioneToken().getRuoli().sizeRuoloList()>0){
  2734.                         for (int i = 0; i < pa.getAutorizzazioneToken().getRuoli().sizeRuoloList(); i++) {
  2735.                             Ruolo ruolo = pa.getAutorizzazioneToken().getRuoli().getRuolo(i);
  2736.                             FiltroRicercaRuoli filtroRuolo = new FiltroRicercaRuoli();
  2737.                             filtroRuolo.setNome(ruolo.getNome());
  2738.                             try{
  2739.                                 List<IDRuolo> idsRuoli = this.archiveEngine.getAllIdRuoli(filtroRuolo);
  2740.                                 if(idsRuoli!=null && idsRuoli.size()>0){
  2741.                                     for (IDRuolo idRuolo : idsRuoli) {
  2742.                                         this.readRuolo(archive, idRuolo, cascadeConfig, false, ArchiveType.PORTA_APPLICATIVA); // per evitare loop
  2743.                                     }
  2744.                                 }
  2745.                             }catch(DriverRegistroServiziNotFound notFound){}    
  2746.                         }
  2747.                     }
  2748.                    
  2749.                     // scope
  2750.                     if(pa!=null && pa.getScope()!=null &&
  2751.                             pa.getScope().sizeScopeList()>0){
  2752.                         for (int i = 0; i < pa.getScope().sizeScopeList(); i++) {
  2753.                             Scope scope = pa.getScope().getScope(i);
  2754.                             FiltroRicercaScope filtroScope = new FiltroRicercaScope();
  2755.                             filtroScope.setNome(scope.getNome());
  2756.                             try{
  2757.                                 List<IDScope> idsScope = this.archiveEngine.getAllIdScope(filtroScope);
  2758.                                 if(idsScope!=null && idsScope.size()>0){
  2759.                                     for (IDScope idScope : idsScope) {
  2760.                                         this.readScope(archive, idScope, cascadeConfig, false, ArchiveType.PORTA_APPLICATIVA); // per evitare loop
  2761.                                     }
  2762.                                 }
  2763.                             }catch(DriverRegistroServiziNotFound notFound){}    
  2764.                         }
  2765.                     }
  2766.                    
  2767.                     // token policy di validazione
  2768.                     if(cascadeConfig.isCascadePolicyConfigurazione()) {
  2769.                         if(pa!=null && pa.getGestioneToken()!=null && pa.getGestioneToken().getPolicy()!=null && !"".equals(pa.getGestioneToken().getPolicy())) {
  2770.                             this.readTokenPolicy_validation(archive, pa.getGestioneToken().getPolicy(), cascadeConfig, provenienza);
  2771.                         }
  2772.                     }
  2773.                    
  2774.                     // attribute authority
  2775.                     if(cascadeConfig.isCascadePolicyConfigurazione()) {
  2776.                         if(pa!=null && pa.sizeAttributeAuthorityList()>0) {
  2777.                             for (AttributeAuthority aa : pa.getAttributeAuthorityList()) {
  2778.                                 String nomeAA = aa.getNome();
  2779.                                 if(nomeAA!=null && !"".equals(nomeAA)) {
  2780.                                     this.readAttributeAuthority(archive, nomeAA, cascadeConfig, provenienza);
  2781.                                 }
  2782.                             }
  2783.                         }
  2784.                     }
  2785.                                        
  2786.                     // serviziApplicativi autorizzati
  2787.                     if(pa!=null && pa.getServiziApplicativiAutorizzati()!=null &&
  2788.                             pa.getServiziApplicativiAutorizzati().sizeServizioApplicativoList()>0) {
  2789.                         for (int i = 0; i < pa.getServiziApplicativiAutorizzati().sizeServizioApplicativoList(); i++) {
  2790.                             PortaApplicativaAutorizzazioneServizioApplicativo paSa = pa.getServiziApplicativiAutorizzati().getServizioApplicativo(i);
  2791.                             if(paSa.getTipoSoggettoProprietario()!=null && paSa.getNomeSoggettoProprietario()!=null && paSa.getNome()!=null) {
  2792.                                 IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
  2793.                                 idServizioApplicativo.setNome(paSa.getNome());
  2794.                                 idServizioApplicativo.setIdSoggettoProprietario(new IDSoggetto(paSa.getTipoSoggettoProprietario(), paSa.getNomeSoggettoProprietario()));
  2795.                                 this.readServizioApplicativo(archive, idServizioApplicativo, cascadeConfig, false, ArchiveType.PORTA_APPLICATIVA); // per evitare loop
  2796.                             }
  2797.                         }
  2798.                     }
  2799.                    
  2800.                     // soggetti autorizzati
  2801.                     if(pa!=null && pa.getSoggetti()!=null &&
  2802.                             pa.getSoggetti().sizeSoggettoList()>0) {
  2803.                         for (int i = 0; i < pa.getSoggetti().sizeSoggettoList(); i++) {
  2804.                             PortaApplicativaAutorizzazioneSoggetto paSoggetto = pa.getSoggetti().getSoggetto(i);
  2805.                             if(paSoggetto.getTipo()!=null && paSoggetto.getNome()!=null) {
  2806.                                 IDSoggetto idSoggetto = new IDSoggetto(paSoggetto.getTipo(), paSoggetto.getNome());
  2807.                                 this.readSoggetto(archive, idSoggetto, cascadeConfig, false, ArchiveType.PORTA_APPLICATIVA); // per evitare loop
  2808.                             }
  2809.                         }
  2810.                     }
  2811.                    
  2812.                     // trasformazioni
  2813.                     if(pa!=null && pa.getTrasformazioni()!=null &&
  2814.                             pa.getTrasformazioni().sizeRegolaList()>0) {
  2815.                         for (int i = 0; i < pa.getTrasformazioni().sizeRegolaList(); i++) {
  2816.                             TrasformazioneRegola regola = pa.getTrasformazioni().getRegola(i);
  2817.                             if(regola.getApplicabilita()!=null) {
  2818.                                
  2819.                                 if(regola.getApplicabilita().sizeServizioApplicativoList()>0) {
  2820.                                     for (int j = 0; j < regola.getApplicabilita().sizeServizioApplicativoList(); j++) {
  2821.                                         TrasformazioneRegolaApplicabilitaServizioApplicativo trSa = regola.getApplicabilita().getServizioApplicativo(j);
  2822.                                         if(trSa.getTipoSoggettoProprietario()!=null && trSa.getNomeSoggettoProprietario()!=null && trSa.getNome()!=null) {
  2823.                                             IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
  2824.                                             idServizioApplicativo.setNome(trSa.getNome());
  2825.                                             idServizioApplicativo.setIdSoggettoProprietario(new IDSoggetto(trSa.getTipoSoggettoProprietario(), trSa.getNomeSoggettoProprietario()));
  2826.                                             this.readServizioApplicativo(archive, idServizioApplicativo, cascadeConfig, false, ArchiveType.PORTA_APPLICATIVA); // per evitare loop
  2827.                                         }
  2828.                                     }
  2829.                                 }  
  2830.                                
  2831.                                 if(regola.getApplicabilita().sizeSoggettoList()>0) {
  2832.                                     for (int j = 0; j < regola.getApplicabilita().sizeSoggettoList(); j++) {
  2833.                                         TrasformazioneRegolaApplicabilitaSoggetto trSoggetto = regola.getApplicabilita().getSoggetto(j);
  2834.                                         if(trSoggetto.getTipo()!=null && trSoggetto.getNome()!=null) {
  2835.                                             IDSoggetto idSoggetto = new IDSoggetto(trSoggetto.getTipo(), trSoggetto.getNome());
  2836.                                             this.readSoggetto(archive, idSoggetto, cascadeConfig, false, ArchiveType.PORTA_APPLICATIVA); // per evitare loop
  2837.                                         }
  2838.                                     }
  2839.                                 }
  2840.                             }
  2841.                         }
  2842.                     }
  2843.                    
  2844.                     // aggiungo eventuale plugin configurato.
  2845.                     if(cascadeConfig.isCascadePluginConfigurazione()) {
  2846.                        
  2847.                         if(pa!=null && StringUtils.isNotEmpty(pa.getAutenticazione())) {
  2848.                             TipoAutenticazione tipo = TipoAutenticazione.toEnumConstant(pa.getAutenticazione(), false);
  2849.                             if(tipo==null) {
  2850.                                 try {
  2851.                                     readPlugin_classe(archive, TipoPlugin.AUTENTICAZIONE.getValue(), pa.getAutenticazione(), cascadeConfig, provenienza);
  2852.                                 }catch(DriverConfigurazioneNotFound notFound) {}
  2853.                             }
  2854.                         }
  2855.                         if(pa!=null && StringUtils.isNotEmpty(pa.getAutorizzazione())) {
  2856.                             TipoAutorizzazione tipo = TipoAutorizzazione.toEnumConstant(pa.getAutorizzazione(), false);
  2857.                             if(tipo==null) {
  2858.                                 try {
  2859.                                     readPlugin_classe(archive, TipoPlugin.AUTORIZZAZIONE.getValue(), pa.getAutorizzazione(), cascadeConfig, provenienza);
  2860.                                 }catch(DriverConfigurazioneNotFound notFound) {}
  2861.                             }
  2862.                         }
  2863.                         if(pa!=null && StringUtils.isNotEmpty(pa.getAutorizzazioneContenuto())) {
  2864.                             if(!CostantiConfigurazione.AUTORIZZAZIONE_CONTENUTO_BUILT_IN.equals(pa.getAutorizzazioneContenuto())) {
  2865.                                 try {
  2866.                                     readPlugin_classe(archive, TipoPlugin.AUTORIZZAZIONE_CONTENUTI.getValue(), pa.getAutorizzazioneContenuto(), cascadeConfig, provenienza);
  2867.                                 }catch(DriverConfigurazioneNotFound notFound) {}
  2868.                             }
  2869.                         }
  2870.                         if(pa!=null && pa.getBehaviour()!=null && pa.getBehaviour().getNome()!=null) {
  2871.                             TipoBehaviour behaviourType = TipoBehaviour.toEnumConstant(pa.getBehaviour().getNome());
  2872.                             if(TipoBehaviour.CUSTOM.equals(behaviourType)){
  2873.                                 try {
  2874.                                     readPlugin_classe(archive, TipoPlugin.BEHAVIOUR.getValue(), pa.getBehaviour().getNome(), cascadeConfig, provenienza);
  2875.                                 }catch(DriverConfigurazioneNotFound notFound) {}
  2876.                             }
  2877.                         }
  2878.                         if(pa!=null && pa.getIntegrazione()!=null && StringUtils.isNotEmpty(pa.getIntegrazione())) {
  2879.                             String[]tipi = pa.getIntegrazione().trim().split(",");
  2880.                             if(tipi!=null && tipi.length>0) {
  2881.                                 for (String t : tipi) {
  2882.                                     if(this.archiveEngine.existsPluginClasse(TipoPlugin.INTEGRAZIONE.getValue(), t)){
  2883.                                         try {
  2884.                                             readPlugin_classe(archive, TipoPlugin.INTEGRAZIONE.getValue(), t, cascadeConfig, provenienza);
  2885.                                         }catch(DriverConfigurazioneNotFound notFound) {}
  2886.                                     }
  2887.                                 }
  2888.                             }
  2889.                         }
  2890.                         if(pa!=null && pa.getConfigurazioneHandler()!=null) {
  2891.                             if(pa.getConfigurazioneHandler().getRequest()!=null) {
  2892.                                 if(pa.getConfigurazioneHandler().getRequest().sizePreInList()>0) {
  2893.                                     for (ConfigurazioneHandler ch : pa.getConfigurazioneHandler().getRequest().getPreInList()) {
  2894.                                         if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2895.                                             try {
  2896.                                                 readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2897.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2898.                                         }
  2899.                                     }
  2900.                                 }
  2901.                                 if(pa.getConfigurazioneHandler().getRequest().sizeInList()>0) {
  2902.                                     for (ConfigurazioneHandler ch : pa.getConfigurazioneHandler().getRequest().getInList()) {
  2903.                                         if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2904.                                             try {
  2905.                                                 readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2906.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2907.                                         }
  2908.                                     }
  2909.                                 }
  2910.                                 if(pa.getConfigurazioneHandler().getRequest().sizeInProtocolInfoList()>0) {
  2911.                                     for (ConfigurazioneHandler ch : pa.getConfigurazioneHandler().getRequest().getInProtocolInfoList()) {
  2912.                                         if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2913.                                             try {
  2914.                                                 readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2915.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2916.                                         }
  2917.                                     }
  2918.                                 }
  2919.                                 if(pa.getConfigurazioneHandler().getRequest().sizeOutList()>0) {
  2920.                                     for (ConfigurazioneHandler ch : pa.getConfigurazioneHandler().getRequest().getOutList()) {
  2921.                                         if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2922.                                             try {
  2923.                                                 readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2924.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2925.                                         }
  2926.                                     }
  2927.                                 }
  2928.                                 if(pa.getConfigurazioneHandler().getRequest().sizePostOutList()>0) {
  2929.                                     for (ConfigurazioneHandler ch : pa.getConfigurazioneHandler().getRequest().getPostOutList()) {
  2930.                                         if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2931.                                             try {
  2932.                                                 readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2933.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2934.                                         }
  2935.                                     }
  2936.                                 }
  2937.                             }
  2938.                             if(pa.getConfigurazioneHandler().getResponse()!=null) {
  2939.                                 if(pa.getConfigurazioneHandler().getResponse().sizePreInList()>0) {
  2940.                                     for (ConfigurazioneHandler ch : pa.getConfigurazioneHandler().getResponse().getPreInList()) {
  2941.                                         if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2942.                                             try {
  2943.                                                 readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2944.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2945.                                         }
  2946.                                     }
  2947.                                 }
  2948.                                 if(pa.getConfigurazioneHandler().getResponse().sizeInList()>0) {
  2949.                                     for (ConfigurazioneHandler ch : pa.getConfigurazioneHandler().getResponse().getInList()) {
  2950.                                         if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2951.                                             try {
  2952.                                                 readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2953.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2954.                                         }
  2955.                                     }
  2956.                                 }
  2957. //                              if(pa.getConfigurazioneHandler().getResponse().sizeInProtocolInfoList()>0) {
  2958. //                                  for (ConfigurazioneHandler ch : pa.getConfigurazioneHandler().getResponse().getInProtocolInfoList()) {
  2959. //                                      if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2960. //                                          try {
  2961. //                                              readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2962. //                                          }catch(DriverConfigurazioneNotFound notFound) {}
  2963. //                                      }
  2964. //                                  }
  2965. //                              }
  2966.                                 if(pa.getConfigurazioneHandler().getResponse().sizeOutList()>0) {
  2967.                                     for (ConfigurazioneHandler ch : pa.getConfigurazioneHandler().getResponse().getOutList()) {
  2968.                                         if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2969.                                             try {
  2970.                                                 readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2971.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2972.                                         }
  2973.                                     }
  2974.                                 }
  2975.                                 if(pa.getConfigurazioneHandler().getResponse().sizePostOutList()>0) {
  2976.                                     for (ConfigurazioneHandler ch : pa.getConfigurazioneHandler().getResponse().getPostOutList()) {
  2977.                                         if(this.archiveEngine.existsPluginClasse(TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo())){
  2978.                                             try {
  2979.                                                 readPlugin_classe(archive, TipoPlugin.MESSAGE_HANDLER.getValue(), ch.getTipo(), cascadeConfig, provenienza);
  2980.                                             }catch(DriverConfigurazioneNotFound notFound) {}
  2981.                                         }
  2982.                                     }
  2983.                                 }
  2984.                             }
  2985.                         }
  2986.                    
  2987.                     }

  2988.                 }
  2989.             }catch(Exception e){
  2990.                 throw new ProtocolException("(PortaApplicativa "+idPortaApplicativa+") "+e.getMessage(),e);
  2991.             }
  2992.         }
  2993.        
  2994.        
  2995.         // *** cascade in avanti ***
  2996.        
  2997.         if(cascadeAvanti){
  2998.        
  2999.             // serviziApplicativi
  3000.             if(pa.sizeServizioApplicativoList()>0){
  3001.                 for (PortaApplicativaServizioApplicativo sa: pa.getServizioApplicativoList()) {
  3002.                     IDServizioApplicativo idSA = new IDServizioApplicativo();
  3003.                     idSA.setIdSoggettoProprietario(idSoggettoErogatore);
  3004.                     idSA.setNome(sa.getNome());
  3005.                     this.readServizioApplicativo(archive, idSA, cascadeConfig, ArchiveType.PORTA_APPLICATIVA);
  3006.                 }
  3007.             }
  3008.             if(pa.getServizioApplicativoDefault()!=null && !"".equals(pa.getServizioApplicativoDefault())) {
  3009.                 IDServizioApplicativo idSA = new IDServizioApplicativo();
  3010.                 idSA.setIdSoggettoProprietario(idSoggettoErogatore);
  3011.                 idSA.setNome(pa.getServizioApplicativoDefault());
  3012.                 this.readServizioApplicativo(archive, idSA, cascadeConfig, ArchiveType.PORTA_APPLICATIVA);
  3013.             }
  3014.            
  3015.         }
  3016.        
  3017.         return pa;
  3018.     }
  3019.    
  3020.    
  3021.     private void readErogazione(Archive archive, IDServizio idServizio, ArchiveCascadeConfiguration cascadeConfig) throws Exception{
  3022.    
  3023.         this.readAccordoServizioParteSpecifica(archive, idServizio, cascadeConfig, ArchiveType.EROGAZIONE);
  3024.        
  3025.         // porteApplicative associate
  3026.         List<IDPortaApplicativa> listIDPA = this.archiveEngine.getIDPorteApplicativeAssociateErogazione(idServizio);
  3027.         if(listIDPA!=null && listIDPA.size()>0){
  3028.             for (IDPortaApplicativa idPortaApplicativa : listIDPA) {
  3029.                 PortaApplicativa pa = this.readPortaApplicativa(archive, idPortaApplicativa, cascadeConfig, ArchiveType.PORTA_APPLICATIVA);
  3030.                 if(pa!=null && pa.sizeServizioApplicativoList()>0) {
  3031.                     for (PortaApplicativaServizioApplicativo pasa : pa.getServizioApplicativoList()) {
  3032.                         IDServizioApplicativo idSA = new IDServizioApplicativo();
  3033.                         idSA.setNome(pasa.getNome());
  3034.                         idSA.setIdSoggettoProprietario(new IDSoggetto(pa.getTipoSoggettoProprietario(), pa.getNomeSoggettoProprietario()));
  3035.                         ServizioApplicativo sa = this.archiveEngine.getServizioApplicativo(idSA);
  3036.                         if(!CostantiConfigurazione.SERVER.equals(sa.getTipo()) && !CostantiConfigurazione.CLIENT_OR_SERVER.equals(sa.getTipo())) {
  3037.                             // i server verranno inclusi solamente se viene scelto di includere tutti gli elementi riferiti
  3038.                             this.readServizioApplicativo(archive, idSA, cascadeConfig, ArchiveType.SERVIZIO_APPLICATIVO);
  3039.                         }
  3040.                     }
  3041.                 }
  3042.                 if(pa!=null && pa.getServizioApplicativoDefault()!=null && !"".equals(pa.getServizioApplicativoDefault())) {
  3043.                     IDServizioApplicativo idSA = new IDServizioApplicativo();
  3044.                     idSA.setNome(pa.getServizioApplicativoDefault());
  3045.                     idSA.setIdSoggettoProprietario(new IDSoggetto(pa.getTipoSoggettoProprietario(), pa.getNomeSoggettoProprietario()));
  3046.                     ServizioApplicativo sa = this.archiveEngine.getServizioApplicativo(idSA);
  3047.                     if(!CostantiConfigurazione.SERVER.equals(sa.getTipo()) && !CostantiConfigurazione.CLIENT_OR_SERVER.equals(sa.getTipo())) {
  3048.                         // i server verranno inclusi solamente se viene scelto di includere tutti gli elementi riferiti
  3049.                         this.readServizioApplicativo(archive, idSA, cascadeConfig, ArchiveType.SERVIZIO_APPLICATIVO);
  3050.                     }
  3051.                 }
  3052.             }
  3053.         }
  3054.        
  3055.     }
  3056.    
  3057.     private void readFruizione(Archive archive, IDFruizione idFruizione, ArchiveCascadeConfiguration cascadeConfig) throws Exception{
  3058.        
  3059.         this.readAccordoServizioParteSpecifica(archive, idFruizione.getIdServizio(), cascadeConfig, ArchiveType.FRUIZIONE);
  3060.        
  3061.         this.readFruitore(archive, idFruizione.getIdServizio(), idFruizione.getIdFruitore(), null, cascadeConfig, ArchiveType.FRUITORE);
  3062.        
  3063.         // porteDelegate associate
  3064.         List<IDPortaDelegata> listIDPD = this.archiveEngine.getIDPorteDelegateAssociateFruizione(idFruizione.getIdServizio(), idFruizione.getIdFruitore());
  3065.         if(listIDPD!=null && listIDPD.size()>0){
  3066.             for (IDPortaDelegata idPortaDelegata : listIDPD) {
  3067.                 this.readPortaDelegata(archive, idPortaDelegata, cascadeConfig, ArchiveType.PORTA_DELEGATA);
  3068.             }
  3069.         }
  3070.        
  3071.     }
  3072. }