ImporterArchiveUtils.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.util.ArrayList;
  22. import java.util.Collections;
  23. import java.util.Enumeration;
  24. import java.util.HashMap;
  25. import java.util.List;
  26. import java.util.Map;

  27. import org.apache.commons.lang.StringUtils;
  28. import org.openspcoop2.core.allarmi.Allarme;
  29. import org.openspcoop2.core.allarmi.AllarmeParametro;
  30. import org.openspcoop2.core.allarmi.constants.RuoloPorta;
  31. import org.openspcoop2.core.allarmi.utils.AllarmiDriverUtils;
  32. import org.openspcoop2.core.config.Configurazione;
  33. import org.openspcoop2.core.config.ConfigurazioneUrlInvocazione;
  34. import org.openspcoop2.core.config.ConfigurazioneUrlInvocazioneRegola;
  35. import org.openspcoop2.core.config.Credenziali;
  36. import org.openspcoop2.core.config.GenericProperties;
  37. import org.openspcoop2.core.config.PortaApplicativa;
  38. import org.openspcoop2.core.config.PortaDelegata;
  39. import org.openspcoop2.core.config.Property;
  40. import org.openspcoop2.core.config.RegistroPlugin;
  41. import org.openspcoop2.core.config.ServizioApplicativo;
  42. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  43. import org.openspcoop2.core.config.constants.TipoAutenticazione;
  44. import org.openspcoop2.core.config.constants.TipoAutorizzazione;
  45. import org.openspcoop2.core.config.constants.TipoBehaviour;
  46. import org.openspcoop2.core.constants.CostantiConnettori;
  47. import org.openspcoop2.core.constants.CostantiDB;
  48. import org.openspcoop2.core.constants.CostantiLabel;
  49. import org.openspcoop2.core.constants.TipiConnettore;
  50. import org.openspcoop2.core.controllo_traffico.AttivazionePolicy;
  51. import org.openspcoop2.core.controllo_traffico.ConfigurazionePolicy;
  52. import org.openspcoop2.core.controllo_traffico.IdActivePolicy;
  53. import org.openspcoop2.core.controllo_traffico.constants.RuoloPolicy;
  54. import org.openspcoop2.core.controllo_traffico.constants.TipoFiltroApplicativo;
  55. import org.openspcoop2.core.controllo_traffico.utils.ControlloTrafficoDriverUtils;
  56. import org.openspcoop2.core.id.IDAccordo;
  57. import org.openspcoop2.core.id.IDAccordoCooperazione;
  58. import org.openspcoop2.core.id.IDGruppo;
  59. import org.openspcoop2.core.id.IDPortaApplicativa;
  60. import org.openspcoop2.core.id.IDPortaDelegata;
  61. import org.openspcoop2.core.id.IDRuolo;
  62. import org.openspcoop2.core.id.IDScope;
  63. import org.openspcoop2.core.id.IDServizio;
  64. import org.openspcoop2.core.id.IDServizioApplicativo;
  65. import org.openspcoop2.core.id.IDSoggetto;
  66. import org.openspcoop2.core.mapping.MappingErogazionePortaApplicativa;
  67. import org.openspcoop2.core.mapping.MappingFruizionePortaDelegata;
  68. import org.openspcoop2.core.plugins.IdPlugin;
  69. import org.openspcoop2.core.plugins.Plugin;
  70. import org.openspcoop2.core.plugins.constants.TipoPlugin;
  71. import org.openspcoop2.core.registry.AccordoCooperazione;
  72. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  73. import org.openspcoop2.core.registry.AccordoServizioParteComuneServizioCompostoServizioComponente;
  74. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  75. import org.openspcoop2.core.registry.ConfigurazioneServizioAzione;
  76. import org.openspcoop2.core.registry.CredenzialiSoggetto;
  77. import org.openspcoop2.core.registry.Fruitore;
  78. import org.openspcoop2.core.registry.Operation;
  79. import org.openspcoop2.core.registry.PortType;
  80. import org.openspcoop2.core.registry.ProtocolProperty;
  81. import org.openspcoop2.core.registry.Resource;
  82. import org.openspcoop2.core.registry.Soggetto;
  83. import org.openspcoop2.core.registry.constants.PddTipologia;
  84. import org.openspcoop2.core.registry.constants.ProprietariDocumento;
  85. import org.openspcoop2.core.registry.constants.RuoliDocumento;
  86. import org.openspcoop2.core.registry.constants.StatiAccordo;
  87. import org.openspcoop2.core.registry.constants.TipologiaServizio;
  88. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  89. import org.openspcoop2.core.registry.driver.FiltroRicerca;
  90. import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
  91. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  92. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  93. import org.openspcoop2.core.registry.driver.ValidazioneStatoPackageException;
  94. import org.openspcoop2.core.registry.wsdl.RegistroOpenSPCoopUtilities;
  95. import org.openspcoop2.message.OpenSPCoop2MessageFactory;
  96. import org.openspcoop2.message.constants.ServiceBinding;
  97. import org.openspcoop2.message.xml.MessageXMLUtils;
  98. import org.openspcoop2.protocol.engine.ConfigurazioneFiltroServiziApplicativi;
  99. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  100. import org.openspcoop2.protocol.engine.constants.Costanti;
  101. import org.openspcoop2.protocol.manifest.constants.InterfaceType;
  102. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  103. import org.openspcoop2.protocol.sdk.ProtocolException;
  104. import org.openspcoop2.protocol.sdk.archive.AbstractArchiveGenericProperties;
  105. import org.openspcoop2.protocol.sdk.archive.Archive;
  106. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoCooperazione;
  107. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioComposto;
  108. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioParteComune;
  109. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioParteSpecifica;
  110. import org.openspcoop2.protocol.sdk.archive.ArchiveActivePolicy;
  111. import org.openspcoop2.protocol.sdk.archive.ArchiveAllarme;
  112. import org.openspcoop2.protocol.sdk.archive.ArchiveAttributeAuthority;
  113. import org.openspcoop2.protocol.sdk.archive.ArchiveConfigurationPolicy;
  114. import org.openspcoop2.protocol.sdk.archive.ArchiveEsitoImport;
  115. import org.openspcoop2.protocol.sdk.archive.ArchiveEsitoImportDetail;
  116. import org.openspcoop2.protocol.sdk.archive.ArchiveEsitoImportDetailConfigurazione;
  117. import org.openspcoop2.protocol.sdk.archive.ArchiveFruitore;
  118. import org.openspcoop2.protocol.sdk.archive.ArchiveGruppo;
  119. import org.openspcoop2.protocol.sdk.archive.ArchiveMappingErogazione;
  120. import org.openspcoop2.protocol.sdk.archive.ArchiveMappingFruizione;
  121. import org.openspcoop2.protocol.sdk.archive.ArchivePdd;
  122. import org.openspcoop2.protocol.sdk.archive.ArchivePluginArchivio;
  123. import org.openspcoop2.protocol.sdk.archive.ArchivePluginClasse;
  124. import org.openspcoop2.protocol.sdk.archive.ArchivePortaApplicativa;
  125. import org.openspcoop2.protocol.sdk.archive.ArchivePortaDelegata;
  126. import org.openspcoop2.protocol.sdk.archive.ArchiveRuolo;
  127. import org.openspcoop2.protocol.sdk.archive.ArchiveScope;
  128. import org.openspcoop2.protocol.sdk.archive.ArchiveServizioApplicativo;
  129. import org.openspcoop2.protocol.sdk.archive.ArchiveSoggetto;
  130. import org.openspcoop2.protocol.sdk.archive.ArchiveSortedMap;
  131. import org.openspcoop2.protocol.sdk.archive.ArchiveTokenPolicy;
  132. import org.openspcoop2.protocol.sdk.archive.ArchiveUrlInvocazioneRegola;
  133. import org.openspcoop2.protocol.sdk.archive.IPositionArchiveObject;
  134. import org.openspcoop2.protocol.sdk.config.ITraduttore;
  135. import org.openspcoop2.protocol.sdk.constants.ArchiveStatoImport;
  136. import org.openspcoop2.protocol.sdk.registry.RegistryException;
  137. import org.openspcoop2.security.keystore.MerlinProvider;
  138. import org.openspcoop2.utils.SortedMap;
  139. import org.openspcoop2.utils.UtilsException;
  140. import org.openspcoop2.utils.date.DateManager;
  141. import org.openspcoop2.utils.wsdl.DefinitionWrapper;
  142. import org.slf4j.Logger;

  143. /**
  144.  *  ImporterArchiveUtils
  145.  *
  146.  * @author Poli Andrea (apoli@link.it)
  147.  * @author $Author$
  148.  * @version $Rev$, $Date$
  149.  */
  150. public class ImporterArchiveUtils {

  151.     private AbstractArchiveEngine importerEngine;
  152.     private Logger log;
  153.     private String userLogin;
  154.     private boolean gestioneWorkflowStatiAccordi;
  155.     private boolean updateAbilitato;
  156.     private boolean importPolicyConfigurazione;
  157.     private boolean importPluginConfigurazione;
  158.     private boolean checkExistsPluginConfigurazione;
  159.     private boolean importConfigurazione;
  160.     private String nomePddOperativa;
  161.     private String tipoPddDefault;
  162.     private ProtocolFactoryManager protocolFactoryManager;
  163.     private IDAccordoCooperazioneFactory idAccordoCooperazioneFactory;
  164.     private IDAccordoFactory idAccordoFactory;
  165.    
  166.     public ImporterArchiveUtils(AbstractArchiveEngine importerEngine,Logger log,
  167.             String userLogin,String nomePddOperativa, String tipoPddDefault,
  168.             boolean gestioneWorkflowStatiAccordi,
  169.             boolean updateAbilitato,
  170.             boolean importPolicyConfigurazione,
  171.             boolean importPluginConfigurazione, boolean checkExistsPluginConfigurazione,
  172.             boolean importConfigurazione) throws Exception{
  173.         this.importerEngine = importerEngine;
  174.         this.log = log;
  175.         this.userLogin = userLogin;
  176.         this.gestioneWorkflowStatiAccordi = gestioneWorkflowStatiAccordi;
  177.         this.updateAbilitato = updateAbilitato;
  178.         this.importPolicyConfigurazione = importPolicyConfigurazione;
  179.         this.importPluginConfigurazione = importPluginConfigurazione;
  180.         this.checkExistsPluginConfigurazione = checkExistsPluginConfigurazione;
  181.         this.importConfigurazione = importConfigurazione;
  182.         if(nomePddOperativa!=null){
  183.             this.nomePddOperativa = nomePddOperativa;
  184.         }
  185.         else{
  186.             FiltroRicerca filtroRicerca = new FiltroRicerca();
  187.             filtroRicerca.setTipo(PddTipologia.OPERATIVO.toString());
  188.             List<String> pdd = this.importerEngine.getAllIdPorteDominio(filtroRicerca);
  189.             if(pdd.size()<=0){
  190.                 throw new Exception("Pdd operative non trovate nel registro");
  191.             }
  192.             if(pdd.size()>1){
  193.                 throw new Exception("Riscontrate piu' di una porta di dominio operativa");
  194.             }
  195.             this.nomePddOperativa = pdd.get(0);
  196.         }
  197.         this.tipoPddDefault = tipoPddDefault;
  198.         if(this.tipoPddDefault==null){
  199.             this.tipoPddDefault = PddTipologia.ESTERNO.toString();
  200.         }
  201.         this.protocolFactoryManager = ProtocolFactoryManager.getInstance();
  202.         this.idAccordoCooperazioneFactory = IDAccordoCooperazioneFactory.getInstance();
  203.         this.idAccordoFactory = IDAccordoFactory.getInstance();
  204.     }
  205.    
  206.    

  207.    
  208.    
  209.     public ArchiveEsitoImport importArchive(Archive archive, String userLogin,
  210.             boolean utilizzoAzioniDiretteInAccordoAbilitato,
  211.             boolean isAbilitatoControlloUnicitaImplementazioneAccordoPerSoggetto,
  212.             boolean isAbilitatoControlloUnicitaImplementazionePortTypePerSoggetto,
  213.             boolean isSoggettiApplicativiCredenzialiBasicPermitSameCredentials,
  214.             boolean isSoggettiApplicativiCredenzialiSslPermitSameCredentials,
  215.             boolean isSoggettiApplicativiCredenzialiPrincipalPermitSameCredentials) throws Exception,ImportInformationMissingException{
  216.         try{
  217.            
  218.             ArchiveEsitoImport esito = new ArchiveEsitoImport();
  219.            
  220.             // Soggetto Default
  221.             Map<String, IDSoggetto> mapIdSoggettoDefault = new HashMap<>();
  222.             Map<String, org.openspcoop2.core.registry.Soggetto> mapSoggettoDefault = new HashMap<>();
  223.             Map<String, Boolean> mapAPIconReferente = new HashMap<>();
  224.             if(this.protocolFactoryManager==null) {
  225.                 throw new Exception("ProtocolFactoryManager not initialized");
  226.             }
  227.             Enumeration<String> pEnum = this.protocolFactoryManager.getProtocolFactories().keys();
  228.             if(pEnum!=null) {
  229.                 while (pEnum.hasMoreElements()) {
  230.                     String protocollo = (String) pEnum.nextElement();
  231.                     IDSoggetto soggettoDefaultProtocollo = this.importerEngine.getSoggettoDefault( protocollo );
  232.                     if(soggettoDefaultProtocollo==null) {
  233.                         throw new Exception("IDSoggetto di default non trovato per il protocollo '"+protocollo+"'");
  234.                     }
  235.                     mapIdSoggettoDefault.put(protocollo, soggettoDefaultProtocollo);
  236.                    
  237.                     org.openspcoop2.core.registry.Soggetto soggettoDefault = null;
  238.                     try {
  239.                         soggettoDefault = this.importerEngine.getSoggettoRegistro(soggettoDefaultProtocollo);
  240.                         if(soggettoDefault!=null) {
  241.                             mapSoggettoDefault.put(protocollo, soggettoDefault);
  242.                         }
  243.                     }catch( DriverRegistroServiziNotFound notFound) {
  244.                         // ignore
  245.                     }
  246.                     if(soggettoDefault==null) {
  247.                         throw new Exception("Soggetto di default non trovato per il protocollo '"+protocollo+"'");
  248.                     }
  249.                    
  250.                     IProtocolFactory<?> pf = this.protocolFactoryManager.getProtocolFactoryByName(protocollo);
  251.                     boolean supportoReferente = false;
  252.                     if(pf!=null) {
  253.                         supportoReferente = pf.createProtocolConfiguration().isSupportoSoggettoReferenteAccordiParteComune();
  254.                     }
  255.                     mapAPIconReferente.put(protocollo, supportoReferente);
  256.                 }
  257.             }
  258.            
  259.            
  260.            
  261.            
  262.             // Pdd
  263.             for (int i = 0; i < archive.getPdd().size(); i++) {
  264.                 ArchivePdd archivePdd = archive.getPdd().get(i);
  265.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archivePdd);
  266.                 try{
  267.                     this.importPdd(archivePdd, detail);
  268.                 }catch(Exception e){
  269.                     detail.setState(ArchiveStatoImport.ERROR);
  270.                     detail.setException(e);
  271.                 }
  272.                 esito.getPdd().add(detail);
  273.             }
  274.            
  275.            
  276.             // Plugin (Archivi)
  277.             // NOTA: devo riordinare per posizione, poi anche se la posizione verrà ricalcolata, verrà mantenuto l'ordine
  278.             SortedMap<List<ArchivePluginArchivio>> map_plugin_archivi = reorderByPosition(archive.getPlugin_archivi());
  279.             if(!map_plugin_archivi.isEmpty()) {
  280.                 for (String position : map_plugin_archivi.keys()) {
  281.                     List<ArchivePluginArchivio> archivePluginList = map_plugin_archivi.get(position);
  282.                     if(!archivePluginList.isEmpty()) {
  283.                         for (ArchivePluginArchivio archivePluginArchivio : archivePluginList) {
  284.                             ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archivePluginArchivio);
  285.                             try{
  286.                                 this.importPluginArchivio(archivePluginArchivio, detail);
  287.                             }catch(Exception e){
  288.                                 detail.setState(ArchiveStatoImport.ERROR);
  289.                                 detail.setException(e);
  290.                             }
  291.                             esito.getPlugin_archivi().add(detail);
  292.                         }
  293.                     }
  294.                 }
  295.             }
  296.            
  297.             // Plugin (Classi)
  298.             for (int i = 0; i < archive.getPlugin_classi().size(); i++) {
  299.                 ArchivePluginClasse archivePluginClasse = archive.getPlugin_classi().get(i);
  300.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archivePluginClasse);
  301.                 try{
  302.                     this.importPluginClasse(archivePluginClasse, detail);
  303.                 }catch(Exception e){
  304.                     detail.setState(ArchiveStatoImport.ERROR);
  305.                     detail.setException(e);
  306.                 }
  307.                 esito.getPlugin_classi().add(detail);
  308.             }
  309.            
  310.            
  311.             // Token Policy (Validation)
  312.             for (int i = 0; i < archive.getToken_validation_policies().size(); i++) {
  313.                 ArchiveTokenPolicy archiveTokenPolicy = archive.getToken_validation_policies().get(i);
  314.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveTokenPolicy);
  315.                 try{
  316.                     this.importTokenPolicy(archiveTokenPolicy, detail);
  317.                 }catch(Exception e){
  318.                     detail.setState(ArchiveStatoImport.ERROR);
  319.                     detail.setException(e);
  320.                 }
  321.                 esito.getToken_validation_policies().add(detail);
  322.             }
  323.            
  324.             // Token Policy (Retrieve)
  325.             for (int i = 0; i < archive.getToken_retrieve_policies().size(); i++) {
  326.                 ArchiveTokenPolicy archiveTokenPolicy = archive.getToken_retrieve_policies().get(i);
  327.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveTokenPolicy);
  328.                 try{
  329.                     this.importTokenPolicy(archiveTokenPolicy, detail);
  330.                 }catch(Exception e){
  331.                     detail.setState(ArchiveStatoImport.ERROR);
  332.                     detail.setException(e);
  333.                 }
  334.                 esito.getToken_retrieve_policies().add(detail);
  335.             }
  336.            
  337.             // Attribute Authority (Retrieve)
  338.             for (int i = 0; i < archive.getAttributeAuthorities().size(); i++) {
  339.                 ArchiveAttributeAuthority archiveAttributeAuthority = archive.getAttributeAuthorities().get(i);
  340.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveAttributeAuthority);
  341.                 try{
  342.                     this.importAttributeAuthority(archiveAttributeAuthority, detail);
  343.                 }catch(Exception e){
  344.                     detail.setState(ArchiveStatoImport.ERROR);
  345.                     detail.setException(e);
  346.                 }
  347.                 esito.getAttributeAuthorities().add(detail);
  348.             }
  349.            
  350.            
  351.             // Gruppi
  352.             for (int i = 0; i < archive.getGruppi().size(); i++) {
  353.                 ArchiveGruppo archiveGruppo = archive.getGruppi().get(i);
  354.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveGruppo);
  355.                 try{
  356.                     this.importGruppo(archiveGruppo, detail);
  357.                 }catch(Exception e){
  358.                     detail.setState(ArchiveStatoImport.ERROR);
  359.                     detail.setException(e);
  360.                 }
  361.                 esito.getGruppi().add(detail);
  362.             }
  363.            
  364.            
  365.             // Ruoli
  366.             for (int i = 0; i < archive.getRuoli().size(); i++) {
  367.                 ArchiveRuolo archiveRuolo = archive.getRuoli().get(i);
  368.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveRuolo);
  369.                 try{
  370.                     this.importRuolo(archiveRuolo, detail);
  371.                 }catch(Exception e){
  372.                     detail.setState(ArchiveStatoImport.ERROR);
  373.                     detail.setException(e);
  374.                 }
  375.                 esito.getRuoli().add(detail);
  376.             }
  377.            
  378.            
  379.             // Scope
  380.             for (int i = 0; i < archive.getScope().size(); i++) {
  381.                 ArchiveScope archiveScope = archive.getScope().get(i);
  382.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveScope);
  383.                 try{
  384.                     this.importScope(archiveScope, detail);
  385.                 }catch(Exception e){
  386.                     detail.setState(ArchiveStatoImport.ERROR);
  387.                     detail.setException(e);
  388.                 }
  389.                 esito.getScope().add(detail);
  390.             }
  391.            
  392.            
  393.             // Soggetti
  394.             for (int i = 0; i < archive.getSoggetti().size(); i++) {
  395.                 ArchiveSoggetto archiveSoggetto = archive.getSoggetti().get(i);
  396.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveSoggetto);
  397.                 try{
  398.                     this.importSoggetto(archiveSoggetto, detail,
  399.                             isSoggettiApplicativiCredenzialiBasicPermitSameCredentials,
  400.                             isSoggettiApplicativiCredenzialiSslPermitSameCredentials,
  401.                             isSoggettiApplicativiCredenzialiPrincipalPermitSameCredentials,
  402.                             mapIdSoggettoDefault, mapSoggettoDefault);
  403.                 }catch(Exception e){
  404.                     detail.setState(ArchiveStatoImport.ERROR);
  405.                     detail.setException(e);
  406.                 }
  407.                 esito.getSoggetti().add(detail);
  408.             }
  409.            

  410.             // Servizi Applicativi
  411.             for (int i = 0; i < archive.getServiziApplicativi().size(); i++) {
  412.                 ArchiveServizioApplicativo archiveServizioApplicativo = archive.getServiziApplicativi().get(i);
  413.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveServizioApplicativo);
  414.                 try{
  415.                     archiveServizioApplicativo.update();
  416.                     this.importServizioApplicativo(archiveServizioApplicativo, detail,
  417.                             isSoggettiApplicativiCredenzialiBasicPermitSameCredentials,
  418.                             isSoggettiApplicativiCredenzialiSslPermitSameCredentials,
  419.                             isSoggettiApplicativiCredenzialiPrincipalPermitSameCredentials);
  420.                 }catch(Exception e){
  421.                     detail.setState(ArchiveStatoImport.ERROR);
  422.                     detail.setException(e);
  423.                 }
  424.                 esito.getServiziApplicativi().add(detail);
  425.             }
  426.            
  427.            
  428.             // Accordi di Cooperazione
  429.             for (int i = 0; i < archive.getAccordiCooperazione().size(); i++) {
  430.                 ArchiveAccordoCooperazione archiveAccordoCooperazione = archive.getAccordiCooperazione().get(i);
  431.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveAccordoCooperazione);
  432.                 try{
  433.                     archiveAccordoCooperazione.update();
  434.                     this.importAccordoCooperazione(archiveAccordoCooperazione, detail);
  435.                 }catch(Exception e){
  436.                     detail.setState(ArchiveStatoImport.ERROR);
  437.                     detail.setException(e);
  438.                 }
  439.                 esito.getAccordiCooperazione().add(detail);
  440.             }
  441.            
  442.            
  443.             // Accordi di Servizio Parte Comune
  444.             for (int i = 0; i < archive.getAccordiServizioParteComune().size(); i++) {
  445.                 ArchiveAccordoServizioParteComune archiveAccordoServizioParteComune = archive.getAccordiServizioParteComune().get(i);
  446.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveAccordoServizioParteComune);
  447.                 try{
  448.                     archiveAccordoServizioParteComune.update();
  449.                     this.importAccordoServizioParteComune(archiveAccordoServizioParteComune, utilizzoAzioniDiretteInAccordoAbilitato, detail,
  450.                             mapIdSoggettoDefault, mapAPIconReferente);
  451.                 }catch(Exception e){
  452.                     detail.setState(ArchiveStatoImport.ERROR);
  453.                     detail.setException(e);
  454.                 }
  455.                 esito.getAccordiServizioParteComune().add(detail);
  456.             }
  457.            
  458.            
  459.             // Divisione asps che implementano accordi di servizio parte comune,
  460.             // da asps che implementano servizi composti
  461.             List<ArchiveAccordoServizioParteSpecifica> listAccordiServizioParteSpecifica =
  462.                     new ArrayList<ArchiveAccordoServizioParteSpecifica>();
  463.             List<ArchiveAccordoServizioParteSpecifica> listAccordiServizioParteSpecifica_serviziComposti =
  464.                     new ArrayList<ArchiveAccordoServizioParteSpecifica>();
  465.             for (int i = 0; i < archive.getAccordiServizioParteSpecifica().size(); i++) {
  466.                 ArchiveAccordoServizioParteSpecifica archiveAccordoServizioParteSpecifica =
  467.                         archive.getAccordiServizioParteSpecifica().get(i);
  468.                 archiveAccordoServizioParteSpecifica.update();
  469.                 IDAccordo idAccordoServizioParteComune = archiveAccordoServizioParteSpecifica.getIdAccordoServizioParteComune();
  470.                
  471.                 IProtocolFactory<?> protocolFactory = this.protocolFactoryManager.getProtocolFactoryByOrganizationType(idAccordoServizioParteComune.getSoggettoReferente().getTipo());
  472.                 boolean APIconReferente = mapAPIconReferente.get(protocolFactory.getProtocol());
  473.                 if(!APIconReferente) {
  474.                     IDSoggetto soggettoDefaultProtocollo = mapIdSoggettoDefault.get(protocolFactory.getProtocol());
  475.                     if(!idAccordoServizioParteComune.getSoggettoReferente().equals(soggettoDefaultProtocollo)) {
  476.                         idAccordoServizioParteComune.getSoggettoReferente().setTipo(soggettoDefaultProtocollo.getTipo());
  477.                         idAccordoServizioParteComune.getSoggettoReferente().setNome(soggettoDefaultProtocollo.getNome());
  478.                         archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().setAccordoServizioParteComune(this.idAccordoFactory.getUriFromIDAccordo(idAccordoServizioParteComune));
  479.                     }
  480.                 }
  481.                
  482.                 if(this.importerEngine.existsAccordoServizioParteComune(idAccordoServizioParteComune)){
  483.                     // verifico la tipologia
  484.                     AccordoServizioParteComune aspc = this.importerEngine.getAccordoServizioParteComune(idAccordoServizioParteComune);
  485.                     if(aspc.getServizioComposto()!=null){
  486.                         listAccordiServizioParteSpecifica_serviziComposti.add(archiveAccordoServizioParteSpecifica);    
  487.                     }else{
  488.                         listAccordiServizioParteSpecifica.add(archiveAccordoServizioParteSpecifica);    
  489.                     }
  490.                 }
  491.                 else{
  492.                     // aggiungo alla lista di servizi composti, visto che l'accordo riferito dovrebbe essere definito nell'archivio che si sta importando
  493.                     // se cosi' non fosse, la gestione dell'accordo di servizio parte specifica per servizi composti comunque
  494.                     // segnalera' che l'accordo riferito non esiste
  495.                     listAccordiServizioParteSpecifica_serviziComposti.add(archiveAccordoServizioParteSpecifica);    
  496.                 }
  497.             }

  498.            
  499.            
  500.             // Preparo Liste di Mapping da creare una volta registrati sia gli accordi (servizi e fruitori) che le porte (delegate e applicative)
  501.             List<MappingErogazionePortaApplicativa> listMappingErogazionePA = new ArrayList<MappingErogazionePortaApplicativa>();
  502.             List<MappingFruizionePortaDelegata> listMappingFruizionePD = new ArrayList<MappingFruizionePortaDelegata>();
  503.            
  504.            
  505.             // Accordi di Servizio Parte Specifica (implementano accordi di servizio parte comune)
  506.             for (int i = 0; i < listAccordiServizioParteSpecifica.size(); i++) {
  507.                 ArchiveAccordoServizioParteSpecifica archiveAccordoServizioParteSpecifica = listAccordiServizioParteSpecifica.get(i);
  508.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveAccordoServizioParteSpecifica);
  509.                 try{
  510.                     //archiveAccordoServizioParteSpecifica.update(); eseguito durante la preparazione della lista listAccordiServizioParteSpecifica
  511.                     this.importAccordoServizioParteSpecifica(archiveAccordoServizioParteSpecifica, false,
  512.                             isAbilitatoControlloUnicitaImplementazioneAccordoPerSoggetto,
  513.                             isAbilitatoControlloUnicitaImplementazionePortTypePerSoggetto,
  514.                             detail,
  515.                             listMappingErogazionePA,
  516.                             mapIdSoggettoDefault, mapAPIconReferente);
  517.                 }catch(Exception e){
  518.                     detail.setState(ArchiveStatoImport.ERROR);
  519.                     detail.setException(e);
  520.                 }
  521.                 esito.getAccordiServizioParteSpecifica().add(detail);
  522.             }
  523.            
  524.            
  525.             // Accordi di Servizio Composto
  526.             for (int i = 0; i < archive.getAccordiServizioComposto().size(); i++) {
  527.                 ArchiveAccordoServizioComposto archiveAccordoServizioComposto = archive.getAccordiServizioComposto().get(i);
  528.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveAccordoServizioComposto);
  529.                 try{
  530.                     archiveAccordoServizioComposto.update();
  531.                     this.importAccordoServizioComposto(archiveAccordoServizioComposto, utilizzoAzioniDiretteInAccordoAbilitato, detail,
  532.                             mapIdSoggettoDefault, mapAPIconReferente);
  533.                 }catch(Exception e){
  534.                     detail.setState(ArchiveStatoImport.ERROR);
  535.                     detail.setException(e);
  536.                 }
  537.                 esito.getAccordiServizioComposto().add(detail);
  538.             }

  539.            
  540.             // Accordi di Servizio Parte Specifica (implementano accordi di servizio composto)
  541.             for (int i = 0; i < listAccordiServizioParteSpecifica_serviziComposti.size(); i++) {
  542.                 ArchiveAccordoServizioParteSpecifica archiveAccordoServizioParteSpecifica = listAccordiServizioParteSpecifica_serviziComposti.get(i);
  543.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveAccordoServizioParteSpecifica);
  544.                 try{
  545.                     //archiveAccordoServizioParteSpecifica.update(); eseguito durante la preparazione della lista listAccordiServizioParteSpecifica_serviziComposti
  546.                     this.importAccordoServizioParteSpecifica(archiveAccordoServizioParteSpecifica, true,
  547.                             isAbilitatoControlloUnicitaImplementazioneAccordoPerSoggetto,
  548.                             isAbilitatoControlloUnicitaImplementazionePortTypePerSoggetto,
  549.                             detail,
  550.                             listMappingErogazionePA,
  551.                             mapIdSoggettoDefault, mapAPIconReferente);
  552.                 }catch(Exception e){
  553.                     detail.setState(ArchiveStatoImport.ERROR);
  554.                     detail.setException(e);
  555.                 }
  556.                 esito.getAccordiServizioParteSpecificaServiziComposti().add(detail);
  557.             }
  558.            
  559.            
  560.             // Fruitori
  561.             for (int i = 0; i < archive.getAccordiFruitori().size(); i++) {
  562.                 ArchiveFruitore archiveFruitore = archive.getAccordiFruitori().get(i);
  563.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveFruitore);
  564.                 try{
  565.                     archiveFruitore.update();
  566.                     this.importFruitore(archiveFruitore, detail, listMappingFruizionePD);
  567.                 }catch(Exception e){
  568.                     detail.setState(ArchiveStatoImport.ERROR);
  569.                     detail.setException(e);
  570.                 }
  571.                 esito.getAccordiFruitori().add(detail);
  572.             }
  573.            
  574.            
  575.             // PorteDelegate
  576.             for (int i = 0; i < archive.getPorteDelegate().size(); i++) {
  577.                 ArchivePortaDelegata archivePortaDelegata = archive.getPorteDelegate().get(i);
  578.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archivePortaDelegata);
  579.                 try{
  580.                     archivePortaDelegata.update();
  581.                     this.importPortaDelegata(archivePortaDelegata, detail);
  582.                 }catch(Exception e){
  583.                     detail.setState(ArchiveStatoImport.ERROR);
  584.                     detail.setException(e);
  585.                 }
  586.                 esito.getPorteDelegate().add(detail);
  587.             }
  588.            
  589.            
  590.             // PorteApplicative
  591.             for (int i = 0; i < archive.getPorteApplicative().size(); i++) {
  592.                 ArchivePortaApplicativa archivePortaApplicativa = archive.getPorteApplicative().get(i);
  593.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archivePortaApplicativa);
  594.                 try{
  595.                     archivePortaApplicativa.update();
  596.                     this.importPortaApplicativa(archivePortaApplicativa, detail);
  597.                 }catch(Exception e){
  598.                     detail.setState(ArchiveStatoImport.ERROR);
  599.                     detail.setException(e);
  600.                 }
  601.                 esito.getPorteApplicative().add(detail);
  602.             }
  603.            
  604.            
  605.             // Mapping Erogazione - PA  (eventuali errori non provocano il fallimento del loader)
  606.             if(listMappingErogazionePA.size()>0){
  607.                 for (int i = 0; i < listMappingErogazionePA.size(); i++) {
  608.                     MappingErogazionePortaApplicativa mapping = listMappingErogazionePA.get(i);
  609.                     ArchiveMappingErogazione archiveMappingErogazione = new ArchiveMappingErogazione(mapping);
  610.                     ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveMappingErogazione);
  611.                     try{
  612.                         if(this.importerEngine.existsMappingErogazione(mapping.getIdServizio(), mapping.getIdPortaApplicativa())) {
  613.                             detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  614.                         }
  615.                         else {
  616.                             this.importerEngine.createMappingErogazione(mapping.getNome(), mapping.getDescrizione(), mapping.isDefault(), mapping.getIdServizio(), mapping.getIdPortaApplicativa());
  617.                             detail.setState(ArchiveStatoImport.CREATED);
  618.                         }
  619.                     }catch(Exception e){
  620.                         this.log.error("Errore durante la creazione del mapping di erogazione nome ["+mapping.getNome()+"] deafult ["+mapping.isDefault()+"] del servizio ["+mapping.getIdServizio()+
  621.                                 "] verso la porta applicativa ["+mapping.getIdPortaApplicativa().getNome()+"]: "+e.getMessage(),e);
  622.                         detail.setState(ArchiveStatoImport.ERROR);
  623.                         detail.setException(e);
  624.                     }
  625.                     esito.getMappingErogazioni().add(detail);
  626.                 }
  627.             }
  628.            
  629.             // Mapping Fruizione - PD  (eventuali errori non provocano il fallimento del loader)
  630.             if(listMappingFruizionePD.size()>0){
  631.                 for (int i = 0; i < listMappingFruizionePD.size(); i++) {
  632.                     MappingFruizionePortaDelegata mapping = listMappingFruizionePD.get(i);
  633.                     ArchiveMappingFruizione archiveMappingFruizione = new ArchiveMappingFruizione(mapping);
  634.                     ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveMappingFruizione);
  635.                     try{
  636.                         if(this.importerEngine.existsMappingFruizione(mapping.getIdServizio(), mapping.getIdFruitore(), mapping.getIdPortaDelegata())) {
  637.                             detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  638.                         }
  639.                         else {
  640.                             this.importerEngine.createMappingFruizione(mapping.getNome(), mapping.getDescrizione(), mapping.isDefault(), mapping.getIdServizio(), mapping.getIdFruitore(), mapping.getIdPortaDelegata());
  641.                             detail.setState(ArchiveStatoImport.CREATED);
  642.                         }
  643.                     }catch(Exception e){
  644.                         this.log.error("Errore durante la creazione del mapping di fruizione nome ["+mapping.getNome()+"] deafult ["+mapping.isDefault()+"] del servizio ["+mapping.getIdServizio()+
  645.                                 "] verso la porta delegata ["+mapping.getIdPortaDelegata().getNome()+"] da parte del soggetto ["+mapping.getIdFruitore()+"]: "+e.getMessage(),e);
  646.                         detail.setState(ArchiveStatoImport.ERROR);
  647.                         detail.setException(e);
  648.                     }
  649.                     esito.getMappingFruizioni().add(detail);
  650.                 }
  651.             }
  652.            
  653.                        
  654.             // Controllo Traffico (Configurazione)
  655.             if(archive.getControlloTraffico_configurazione()!=null){
  656.                 org.openspcoop2.core.controllo_traffico.ConfigurazioneGenerale configurazione = archive.getControlloTraffico_configurazione();
  657.                 ArchiveEsitoImportDetailConfigurazione<org.openspcoop2.core.controllo_traffico.ConfigurazioneGenerale> detail =
  658.                         new ArchiveEsitoImportDetailConfigurazione<org.openspcoop2.core.controllo_traffico.ConfigurazioneGenerale>(configurazione);
  659.                 try{
  660.                     this.importControlloTraffico_configurazione(configurazione, detail);
  661.                 }catch(Exception e){
  662.                     detail.setState(ArchiveStatoImport.ERROR);
  663.                     detail.setException(e);
  664.                 }
  665.                 esito.setControlloTraffico_configurazione(detail);
  666.             }
  667.                    
  668.             // Controllo Traffico (ConfigurazionePolicy)
  669.             for (int i = 0; i < archive.getControlloTraffico_configurationPolicies().size(); i++) {
  670.                 ArchiveConfigurationPolicy archiveCCPolicy = archive.getControlloTraffico_configurationPolicies().get(i);
  671.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveCCPolicy);
  672.                 try{
  673.                     this.importControlloTraffico_configurationPolicy(archiveCCPolicy, detail);
  674.                 }catch(Exception e){
  675.                     detail.setState(ArchiveStatoImport.ERROR);
  676.                     detail.setException(e);
  677.                 }
  678.                 esito.getControlloTraffico_configurationPolicies().add(detail);
  679.             }
  680.            
  681.             // Controllo Traffico (AttivazionePolicy)
  682.             HashMap<String, String> instanceSerialIdsForPolicy = new HashMap<>();
  683.             // NOTA: devo riordinare per posizione, poi anche se la posizione verrà ricalcolata, verrà mantenuto l'ordine
  684.             SortedMap<List<ArchiveActivePolicy>> map_controllo_traffico_activePolicy = reorderByPosition(archive.getControlloTraffico_activePolicies());
  685.             if(!map_controllo_traffico_activePolicy.isEmpty()) {
  686.                 for (String position : map_controllo_traffico_activePolicy.keys()) {
  687.                     List<ArchiveActivePolicy> archiveActivePolicyList = map_controllo_traffico_activePolicy.get(position);
  688.                     if(!archiveActivePolicyList.isEmpty()) {
  689.                         for (ArchiveActivePolicy archiveCCPolicy : archiveActivePolicyList) {
  690.                             ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveCCPolicy);
  691.                             try{
  692.                                 this.importControlloTraffico_activePolicy(archiveCCPolicy, detail, instanceSerialIdsForPolicy);
  693.                             }catch(Exception e){
  694.                                 detail.setState(ArchiveStatoImport.ERROR);
  695.                                 detail.setException(e);
  696.                             }
  697.                             esito.getControlloTraffico_activePolicies().add(detail);
  698.                         }
  699.                     }
  700.                 }
  701.             }

  702.            
  703.             // Allarmi
  704.             HashMap<String, String> instanceSerialIdsForAlarm = new HashMap<>();
  705.             for (int i = 0; i < archive.getAllarmi().size(); i++) {
  706.                 ArchiveAllarme archiveAllarme = archive.getAllarmi().get(i);
  707.                 ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveAllarme);
  708.                 try{
  709.                     this.importAllarme(archiveAllarme, detail, instanceSerialIdsForAlarm);
  710.                 }catch(Exception e){
  711.                     detail.setState(ArchiveStatoImport.ERROR);
  712.                     detail.setException(e);
  713.                 }
  714.                 esito.getAllarmi().add(detail);
  715.             }
  716.            
  717.            
  718.             // Configurazione (UrlInvocazioneRegole)
  719.             // NOTA: devo riordinare per posizione, poi anche se la posizione verrà ricalcolata, verrà mantenuto l'ordine
  720.             SortedMap<List<ArchiveUrlInvocazioneRegola>> map_urlInvocazione_regole = reorderByPosition(archive.getConfigurazionePdD_urlInvocazione_regole());
  721.             if(!map_urlInvocazione_regole.isEmpty()) {
  722.                 for (String position : map_urlInvocazione_regole.keys()) {
  723.                     List<ArchiveUrlInvocazioneRegola> archiveRegolaList = map_urlInvocazione_regole.get(position);
  724.                     if(!archiveRegolaList.isEmpty()) {
  725.                         for (ArchiveUrlInvocazioneRegola archiveRegola : archiveRegolaList) {
  726.                             ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archiveRegola);
  727.                             try{
  728.                                 this.importConfigurazione_UrlInvocazioneRegola(archiveRegola, detail);
  729.                             }catch(Exception e){
  730.                                 detail.setState(ArchiveStatoImport.ERROR);
  731.                                 detail.setException(e);
  732.                             }
  733.                             esito.getConfigurazionePdD_urlInvocazione_regole().add(detail);
  734.                         }
  735.                     }
  736.                 }
  737.             }
  738.            
  739.            
  740.             // Configurazione (UrlInvocazione)
  741.             if(archive.getConfigurazionePdD_urlInvocazione()!=null){
  742.                 org.openspcoop2.core.config.ConfigurazioneUrlInvocazione configurazione = archive.getConfigurazionePdD_urlInvocazione();
  743.                 ArchiveEsitoImportDetailConfigurazione<org.openspcoop2.core.config.ConfigurazioneUrlInvocazione> detail =
  744.                         new ArchiveEsitoImportDetailConfigurazione<org.openspcoop2.core.config.ConfigurazioneUrlInvocazione>(configurazione);
  745.                 try{
  746.                     this.importConfigurazione_UrlInvocazione(configurazione, detail);
  747.                 }catch(Exception e){
  748.                     detail.setState(ArchiveStatoImport.ERROR);
  749.                     detail.setException(e);
  750.                 }
  751.                 esito.setConfigurazionePdD_urlInvocazione(detail);
  752.             }
  753.            
  754.                        
  755.             // Configurazione
  756.             if(archive.getConfigurazionePdD()!=null){
  757.                 Configurazione configurazione = archive.getConfigurazionePdD();
  758.                 ArchiveEsitoImportDetailConfigurazione<Configurazione> detail = new ArchiveEsitoImportDetailConfigurazione<Configurazione>(configurazione);
  759.                 try{
  760.                     this.importConfigurazione(configurazione, detail);
  761.                 }catch(Exception e){
  762.                     detail.setState(ArchiveStatoImport.ERROR);
  763.                     detail.setException(e);
  764.                 }
  765.                 esito.setConfigurazionePdD(detail);
  766.             }

  767.            
  768.             // Creazione mapping in caso di importazione package creati prima dell'introduzione dei mapping fruizione ed erogazione
  769.             if(archive.getPorteApplicative().size()>0){
  770.                 for (int i = 0; i < archive.getPorteApplicative().size(); i++) {
  771.                    
  772.                     ArchiveEsitoImportDetail detailEsitoPortaApplicativaPrecedente = null;
  773.                     if(esito.getPorteApplicative().size()>i) {
  774.                         detailEsitoPortaApplicativaPrecedente = esito.getPorteApplicative().get(i);
  775.                     }
  776.                     boolean init = true;
  777.                     if(detailEsitoPortaApplicativaPrecedente!=null) {
  778.                         if(ArchiveStatoImport.ERROR.equals(detailEsitoPortaApplicativaPrecedente.getState())){
  779.                             init = false;
  780.                         }
  781.                     }
  782.                    
  783.                     ArchivePortaApplicativa archivePortaApplicativa = archive.getPorteApplicative().get(i);
  784.                     ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archivePortaApplicativa);
  785.                     try{
  786.                         if(init) {
  787.                             List<PortaApplicativa> listPA = new ArrayList<>();
  788.                             listPA.add(archive.getPorteApplicative().get(i).getPortaApplicativa());
  789.                             this.importerEngine.initMappingErogazione(this.log,listPA);
  790.                         }
  791.                         detail.setState(ArchiveStatoImport.UPDATED); // esito non gestito ma ci vuole sempre per corrispondere alla lista degli esiti della PA
  792.                     }catch(Exception e){
  793.                         detail.setState(ArchiveStatoImport.ERROR);
  794.                         detail.setException(e);
  795.                     }
  796.                     esito.getPorteApplicative_initMapping().add(detail);
  797.                 }
  798.             }
  799.             if(archive.getPorteDelegate().size()>0){
  800.                 for (int i = 0; i < archive.getPorteDelegate().size(); i++) {
  801.                    
  802.                     ArchiveEsitoImportDetail detailEsitoPortaDelegataPrecedente = null;
  803.                     if(esito.getPorteApplicative().size()>i) {
  804.                         detailEsitoPortaDelegataPrecedente = esito.getPorteDelegate().get(i);
  805.                     }
  806.                     boolean init = true;
  807.                     if(detailEsitoPortaDelegataPrecedente!=null) {
  808.                         if(ArchiveStatoImport.ERROR.equals(detailEsitoPortaDelegataPrecedente.getState())){
  809.                             init = false;
  810.                         }
  811.                     }
  812.                    
  813.                     ArchivePortaDelegata archivePortaDelegata = archive.getPorteDelegate().get(i);
  814.                     ArchiveEsitoImportDetail detail = new ArchiveEsitoImportDetail(archivePortaDelegata);
  815.                     try{
  816.                         if(init) {
  817.                             List<PortaDelegata> listPD = new ArrayList<>();
  818.                             listPD.add(archive.getPorteDelegate().get(i).getPortaDelegata());
  819.                             this.importerEngine.initMappingFruizione(this.log,listPD);
  820.                         }
  821.                         detail.setState(ArchiveStatoImport.UPDATED); // esito non gestito ma ci vuole sempre per corrispondere alla lista degli esiti della PA
  822.                     }catch(Exception e){
  823.                         detail.setState(ArchiveStatoImport.ERROR);
  824.                         detail.setException(e);
  825.                     }
  826.                     esito.getPorteDelegate_initMapping().add(detail);
  827.                 }
  828.             }
  829.            
  830.             this.importerEngine.finalizeImport(archive);
  831.            
  832.             return esito;
  833.            
  834.         }catch(Exception e){
  835.             throw e;
  836.         }
  837.     }
  838.    
  839.    
  840.     private <T extends IPositionArchiveObject> SortedMap<List<T>> reorderByPosition(ArchiveSortedMap<T> map) throws ProtocolException, UtilsException {
  841.         SortedMap<List<T>> map_reordered = new SortedMap<List<T>>();
  842.         if(map.size()>0) {
  843.             HashMap<String, List<T>> map_for_reorder = new HashMap<String, List<T>>();
  844.             for (int i = 0; i < map.size(); i++) {
  845.                 T archive = map.get(i);
  846.                 int posizione = archive.position();
  847.                 String posizionePadding = StringUtils.leftPad(posizione+"", 20, "0");
  848.                 List<T> l = null;
  849.                 if(map_for_reorder.containsKey(posizionePadding)) {
  850.                     l = map_for_reorder.get(posizionePadding);
  851.                 }
  852.                 else {
  853.                     l = new ArrayList<T>();
  854.                     map_for_reorder.put(posizionePadding, l);
  855.                 }
  856.                 l.add(archive);
  857.             }
  858.            
  859.             List<String> keys = new ArrayList<>();
  860.             keys.addAll(map_for_reorder.keySet());
  861.             Collections.sort(keys);
  862.             for (String position : keys) {
  863.                 map_reordered.add(position, map_for_reorder.remove(position));
  864.             }
  865.         }
  866.         return map_reordered;
  867.     }
  868.    
  869.    
  870.    
  871.     public void importPdd(ArchivePdd archivePdd,ArchiveEsitoImportDetail detail){
  872.        
  873.         String nomePdd = archivePdd.getNomePdd();
  874.         try{
  875.            
  876.             // --- check esistenza ---
  877.             if(this.updateAbilitato==false){
  878.                 if(this.importerEngine.existsPortaDominio(nomePdd)){
  879.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  880.                     return;
  881.                 }
  882.             }
  883.            
  884.                
  885.             // --- check elementi riferiti ---
  886.             // non esistenti
  887.            
  888.            
  889.             // --- compatibilita' elementi riferiti ---
  890.             // non esistenti
  891.            
  892.            
  893.             // ---- visibilita' oggetto riferiti ---
  894.             // non esistenti
  895.            
  896.            
  897.             // --- set dati obbligatori nel db ----
  898.            
  899.             archivePdd.getPortaDominio().setSuperUser(this.userLogin);
  900.            
  901.             org.openspcoop2.core.registry.driver.utils.XMLDataConverter.
  902.                 impostaInformazioniRegistroDB_PortaDominio(archivePdd.getPortaDominio());
  903.            
  904.            
  905.             // --- ora registrazione
  906.             archivePdd.getPortaDominio().setOraRegistrazione(DateManager.getDate());
  907.            
  908.            
  909.             // --- upload ---
  910.             boolean create = false;
  911.             if(this.importerEngine.existsPortaDominio(nomePdd)){
  912.                
  913.                 org.openspcoop2.core.registry.PortaDominio old = this.importerEngine.getPortaDominio(nomePdd);
  914.                 archivePdd.getPortaDominio().setId(old.getId());
  915.                
  916.                 // visibilita' oggetto stesso per update
  917.                 if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  918.                     if(this.userLogin.equals(old.getSuperUser())==false){
  919.                         throw new Exception("La porta di dominio non è visibile/aggiornabile dall'utente collegato ("+this.userLogin+")");
  920.                     }
  921.                 }

  922.                 // update
  923.                 this.importerEngine.updatePortaDominio(archivePdd.getPortaDominio());
  924.                 create = false;
  925.             }
  926.             // --- create ---
  927.             else{
  928.                 this.importerEngine.createPortaDominio(archivePdd.getPortaDominio());
  929.                 create = true;
  930.             }
  931.                

  932.             // --- tipoPdd ---
  933.             org.openspcoop2.core.registry.driver.utils.XMLDataConverter.
  934.                 impostaInformazioniRegistroDB_PortaDominio_update(archivePdd.getPortaDominio(), this.nomePddOperativa,
  935.                     this.log, this.importerEngine.getDriverRegistroServizi(), this.tipoPddDefault);
  936.            
  937.            
  938.             // --- info ---
  939.             if(create){
  940.                 detail.setState(ArchiveStatoImport.CREATED);
  941.             }else{
  942.                 detail.setState(ArchiveStatoImport.UPDATED);
  943.             }
  944.         }          
  945.         catch(Exception e){
  946.             this.log.error("Errore durante l'import della porta di dominio ["+nomePdd+"]: "+e.getMessage(),e);
  947.             detail.setState(ArchiveStatoImport.ERROR);
  948.             detail.setException(e);
  949.         }
  950.     }
  951.    
  952.    
  953.    
  954.    
  955.    
  956.    
  957.    
  958.     public void importGruppo(ArchiveGruppo archiveGruppo,ArchiveEsitoImportDetail detail){
  959.        
  960.         IDGruppo idGruppo = archiveGruppo.getIdGruppo();
  961.         try{
  962.            
  963.             // --- check esistenza ---
  964.             if(this.updateAbilitato==false){
  965.                 if(this.importerEngine.existsGruppo(idGruppo)){
  966.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  967.                     return;
  968.                 }
  969.             }
  970.            
  971.                
  972.             // --- check elementi riferiti ---
  973.             // non esistenti
  974.            
  975.            
  976.             // --- compatibilita' elementi riferiti ---
  977.             // non esistenti
  978.            
  979.            
  980.             // ---- visibilita' oggetto riferiti ---
  981.             // non esistenti
  982.            
  983.            
  984.             // --- set dati obbligatori nel db ----
  985.            
  986.             archiveGruppo.getGruppo().setSuperUser(this.userLogin);
  987.            
  988.             org.openspcoop2.core.registry.driver.utils.XMLDataConverter.
  989.                 impostaInformazioniRegistroDB_Gruppo(archiveGruppo.getGruppo());
  990.            
  991.            
  992.             // --- ora registrazione
  993.             archiveGruppo.getGruppo().setOraRegistrazione(DateManager.getDate());
  994.            
  995.            
  996.             // --- upload ---
  997.             boolean create = false;
  998.             if(this.importerEngine.existsGruppo(idGruppo)){
  999.                
  1000.                 org.openspcoop2.core.registry.Gruppo old = this.importerEngine.getGruppo(idGruppo);
  1001.                 archiveGruppo.getGruppo().setId(old.getId());
  1002.                
  1003.                 // visibilita' oggetto stesso per update
  1004.                 if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  1005.                     if(this.userLogin.equals(old.getSuperUser())==false){
  1006.                         throw new Exception("Il gruppo non è visibile/aggiornabile dall'utente collegato ("+this.userLogin+")");
  1007.                     }
  1008.                 }

  1009.                 // update
  1010.                 this.importerEngine.updateGruppo(archiveGruppo.getGruppo());
  1011.                 create = false;
  1012.             }
  1013.             // --- create ---
  1014.             else{
  1015.                 this.importerEngine.createGruppo(archiveGruppo.getGruppo());
  1016.                 create = true;
  1017.             }
  1018.                

  1019.             // --- info ---
  1020.             if(create){
  1021.                 detail.setState(ArchiveStatoImport.CREATED);
  1022.             }else{
  1023.                 detail.setState(ArchiveStatoImport.UPDATED);
  1024.             }
  1025.         }          
  1026.         catch(Exception e){
  1027.             this.log.error("Errore durante l'import del gruppo ["+idGruppo+"]: "+e.getMessage(),e);
  1028.             detail.setState(ArchiveStatoImport.ERROR);
  1029.             detail.setException(e);
  1030.         }
  1031.     }
  1032.    
  1033.    
  1034.    
  1035.    
  1036.    
  1037.    
  1038.    
  1039.     public void importRuolo(ArchiveRuolo archiveRuolo,ArchiveEsitoImportDetail detail){
  1040.        
  1041.         IDRuolo idRuolo = archiveRuolo.getIdRuolo();
  1042.         try{
  1043.            
  1044.             // --- check esistenza ---
  1045.             if(this.updateAbilitato==false){
  1046.                 if(this.importerEngine.existsRuolo(idRuolo)){
  1047.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  1048.                     return;
  1049.                 }
  1050.             }
  1051.            
  1052.                
  1053.             // --- check elementi riferiti ---
  1054.             // non esistenti
  1055.            
  1056.            
  1057.             // --- compatibilita' elementi riferiti ---
  1058.             // non esistenti
  1059.            
  1060.            
  1061.             // ---- visibilita' oggetto riferiti ---
  1062.             // non esistenti
  1063.            
  1064.            
  1065.             // --- set dati obbligatori nel db ----
  1066.            
  1067.             archiveRuolo.getRuolo().setSuperUser(this.userLogin);
  1068.            
  1069.             org.openspcoop2.core.registry.driver.utils.XMLDataConverter.
  1070.                 impostaInformazioniRegistroDB_Ruolo(archiveRuolo.getRuolo());
  1071.            
  1072.            
  1073.             // --- ora registrazione
  1074.             archiveRuolo.getRuolo().setOraRegistrazione(DateManager.getDate());
  1075.            
  1076.            
  1077.             // --- upload ---
  1078.             boolean create = false;
  1079.             if(this.importerEngine.existsRuolo(idRuolo)){
  1080.                
  1081.                 org.openspcoop2.core.registry.Ruolo old = this.importerEngine.getRuolo(idRuolo);
  1082.                 archiveRuolo.getRuolo().setId(old.getId());
  1083.                
  1084.                 // visibilita' oggetto stesso per update
  1085.                 if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  1086.                     if(this.userLogin.equals(old.getSuperUser())==false){
  1087.                         throw new Exception("Il ruolo non è visibile/aggiornabile dall'utente collegato ("+this.userLogin+")");
  1088.                     }
  1089.                 }

  1090.                 // update
  1091.                 this.importerEngine.updateRuolo(archiveRuolo.getRuolo());
  1092.                 create = false;
  1093.             }
  1094.             // --- create ---
  1095.             else{
  1096.                 this.importerEngine.createRuolo(archiveRuolo.getRuolo());
  1097.                 create = true;
  1098.             }
  1099.                

  1100.             // --- info ---
  1101.             if(create){
  1102.                 detail.setState(ArchiveStatoImport.CREATED);
  1103.             }else{
  1104.                 detail.setState(ArchiveStatoImport.UPDATED);
  1105.             }
  1106.         }          
  1107.         catch(Exception e){
  1108.             this.log.error("Errore durante l'import del ruolo ["+idRuolo+"]: "+e.getMessage(),e);
  1109.             detail.setState(ArchiveStatoImport.ERROR);
  1110.             detail.setException(e);
  1111.         }
  1112.     }
  1113.    
  1114.    
  1115.    
  1116.    
  1117.    
  1118.     public void importScope(ArchiveScope archiveScope,ArchiveEsitoImportDetail detail){
  1119.        
  1120.         IDScope idScope = archiveScope.getIdScope();
  1121.         try{
  1122.            
  1123.             // --- check esistenza ---
  1124.             if(this.updateAbilitato==false){
  1125.                 if(this.importerEngine.existsScope(idScope)){
  1126.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  1127.                     return;
  1128.                 }
  1129.             }
  1130.            
  1131.                
  1132.             // --- check elementi riferiti ---
  1133.             // non esistenti
  1134.            
  1135.            
  1136.             // --- compatibilita' elementi riferiti ---
  1137.             // non esistenti
  1138.            
  1139.            
  1140.             // ---- visibilita' oggetto riferiti ---
  1141.             // non esistenti
  1142.            
  1143.            
  1144.             // --- set dati obbligatori nel db ----
  1145.            
  1146.             archiveScope.getScope().setSuperUser(this.userLogin);
  1147.            
  1148.             org.openspcoop2.core.registry.driver.utils.XMLDataConverter.
  1149.                 impostaInformazioniRegistroDB_Scope(archiveScope.getScope());
  1150.            
  1151.            
  1152.             // --- ora registrazione
  1153.             archiveScope.getScope().setOraRegistrazione(DateManager.getDate());
  1154.            
  1155.            
  1156.             // --- upload ---
  1157.             boolean create = false;
  1158.             if(this.importerEngine.existsScope(idScope)){
  1159.                
  1160.                 org.openspcoop2.core.registry.Scope old = this.importerEngine.getScope(idScope);
  1161.                 archiveScope.getScope().setId(old.getId());
  1162.                
  1163.                 // visibilita' oggetto stesso per update
  1164.                 if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  1165.                     if(this.userLogin.equals(old.getSuperUser())==false){
  1166.                         throw new Exception("Lo scope non è visibile/aggiornabile dall'utente collegato ("+this.userLogin+")");
  1167.                     }
  1168.                 }

  1169.                 // update
  1170.                 this.importerEngine.updateScope(archiveScope.getScope());
  1171.                 create = false;
  1172.             }
  1173.             // --- create ---
  1174.             else{
  1175.                 this.importerEngine.createScope(archiveScope.getScope());
  1176.                 create = true;
  1177.             }
  1178.                

  1179.             // --- info ---
  1180.             if(create){
  1181.                 detail.setState(ArchiveStatoImport.CREATED);
  1182.             }else{
  1183.                 detail.setState(ArchiveStatoImport.UPDATED);
  1184.             }
  1185.         }          
  1186.         catch(Exception e){
  1187.             this.log.error("Errore durante l'import dello scope ["+idScope+"]: "+e.getMessage(),e);
  1188.             detail.setState(ArchiveStatoImport.ERROR);
  1189.             detail.setException(e);
  1190.         }
  1191.     }
  1192.    
  1193.    
  1194.    
  1195.    
  1196.     public void importSoggetto(ArchiveSoggetto archiveSoggetto,ArchiveEsitoImportDetail detail,
  1197.             boolean isSoggettiApplicativiCredenzialiBasicPermitSameCredentials,
  1198.             boolean isSoggettiApplicativiCredenzialiSslPermitSameCredentials,
  1199.             boolean isSoggettiApplicativiCredenzialiPrincipalPermitSameCredentials,
  1200.             Map<String, IDSoggetto> mapIdSoggettoDefault, Map<String, org.openspcoop2.core.registry.Soggetto> mapSoggettoDefault){
  1201.        
  1202.         IDSoggetto idSoggetto = archiveSoggetto.getIdSoggetto();
  1203.         IProtocolFactory<?> protocolFactory = null;
  1204.         try{
  1205.            
  1206.             boolean create = false;
  1207.            
  1208.             if(archiveSoggetto.getSoggettoRegistro()!=null){
  1209.                                
  1210.                
  1211.                 // --- check esistenza ---
  1212.                 if(this.updateAbilitato==false){
  1213.                     if(this.importerEngine.existsSoggettoRegistro(idSoggetto)){
  1214.                         detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  1215.                         return;
  1216.                     }
  1217.                 }
  1218.                
  1219.                
  1220.                
  1221.                 // --- check soggetto default ---
  1222.                
  1223.                 protocolFactory = this.protocolFactoryManager.getProtocolFactoryByOrganizationType(idSoggetto.getTipo());
  1224.                 //IDSoggetto soggettoDefaultProtocollo = this.importerEngine.getSoggettoDefault( protocolFactory.getProtocol());
  1225.                 IDSoggetto soggettoDefaultProtocollo = mapIdSoggettoDefault.get(protocolFactory.getProtocol());
  1226.                                
  1227.                 // non devono essere importati soggetti di default diversi da quelli presenti
  1228.                 if(archiveSoggetto.getSoggettoConfigurazione().isDominioDefault()) {
  1229.                     if(soggettoDefaultProtocollo!=null) {
  1230.                         if(!soggettoDefaultProtocollo.equals(idSoggetto)) {
  1231.                             // imposto a false il dominio di default
  1232.                             archiveSoggetto.getSoggettoConfigurazione().setDominioDefault(false);
  1233.                         }
  1234.                     }
  1235.                 }
  1236.                
  1237.                 // se il soggetto che sto importando è il soggetto di default, deve avere la stessa pdd e deve rimanere soggetto di default
  1238.                 if(soggettoDefaultProtocollo!=null) {
  1239.                     if(soggettoDefaultProtocollo.equals(idSoggetto)) {
  1240.                         archiveSoggetto.getSoggettoConfigurazione().setDominioDefault(true);
  1241.                         //try {
  1242.                             //org.openspcoop2.core.registry.Soggetto soggettoDefault = this.importerEngine.getSoggettoRegistro(soggettoDefaultProtocollo);
  1243.                             org.openspcoop2.core.registry.Soggetto soggettoDefault = mapSoggettoDefault.get(protocolFactory.getProtocol());
  1244.                             if(soggettoDefault!=null && soggettoDefault.getPortaDominio()!=null) {
  1245.                                 if(!soggettoDefault.getPortaDominio().equals(archiveSoggetto.getSoggettoRegistro().getPortaDominio())) {
  1246.                                     archiveSoggetto.getSoggettoRegistro().setPortaDominio(soggettoDefault.getPortaDominio());
  1247.                                 }
  1248.                             }
  1249.                         //}catch( DriverRegistroServiziNotFound notFound) {
  1250.                             // ignore
  1251.                         //}
  1252.                     }
  1253.                 }
  1254.                
  1255.                
  1256.                 // --- check elementi riferiti ---
  1257.                
  1258.                 // porta dominio
  1259.                 if(archiveSoggetto.getSoggettoRegistro().getPortaDominio()!=null){
  1260.                     if(this.importerEngine.existsPortaDominio(archiveSoggetto.getSoggettoRegistro().getPortaDominio()) == false ){
  1261.                         throw new Exception("Porta di dominio ["+archiveSoggetto.getSoggettoRegistro().getPortaDominio()+"] associata non esiste");
  1262.                     }
  1263.                 }      
  1264.                
  1265.                 // ruoli
  1266.                 if(archiveSoggetto.getSoggettoRegistro().getRuoli()!=null && archiveSoggetto.getSoggettoRegistro().getRuoli().sizeRuoloList()>0){
  1267.                     for (int i = 0; i < archiveSoggetto.getSoggettoRegistro().getRuoli().sizeRuoloList(); i++) {
  1268.                         IDRuolo idRuolo = new IDRuolo(archiveSoggetto.getSoggettoRegistro().getRuoli().getRuolo(i).getNome());
  1269.                         if(this.importerEngine.existsRuolo(idRuolo) == false ){
  1270.                             throw new Exception("Ruolo ["+idRuolo.getNome()+"] associato non esiste");
  1271.                         }  
  1272.                     }
  1273.                 }
  1274.                
  1275.                 // univocita' credenziali
  1276.                 if( archiveSoggetto.getSoggettoRegistro().getCredenzialiList()!=null &&
  1277.                         !archiveSoggetto.getSoggettoRegistro().getCredenzialiList().isEmpty()) {
  1278.                     for (CredenzialiSoggetto credenziali : archiveSoggetto.getSoggettoRegistro().getCredenzialiList()) {
  1279.                         org.openspcoop2.core.registry.constants.CredenzialeTipo tipo = credenziali.getTipo();
  1280.                         if(tipo!=null) {
  1281.                             Soggetto soggettoFound = null;
  1282.                             ServizioApplicativo saFound = null;
  1283.                             String c = null;
  1284.                             switch (tipo) {
  1285.                             case BASIC:
  1286.                                 soggettoFound = this.importerEngine.getSoggettoRegistroCredenzialiBasic(credenziali.getUser());
  1287.                                 c = credenziali.getUser();
  1288.                                 if(!isSoggettiApplicativiCredenzialiBasicPermitSameCredentials) {
  1289.                                     saFound = this.importerEngine.getServizioApplicativoCredenzialiBasic(credenziali.getUser());
  1290.                                 }
  1291.                                 break;
  1292.                             case APIKEY:
  1293.                                 soggettoFound = this.importerEngine.getSoggettoRegistroCredenzialiApiKey(credenziali.getUser(), credenziali.isAppId());
  1294.                                 c = credenziali.getUser();
  1295.                                 break;
  1296.                             case SSL:
  1297.                                
  1298.                                 boolean dominioEsternoModI = false;
  1299.                                 if(Costanti.MODIPA_PROTOCOL_NAME.equals(archiveSoggetto.getSoggettoRegistro().getTipo())) {
  1300.                                     Soggetto s = archiveSoggetto.getSoggettoRegistro();
  1301.                                     List<String> listPdDoperative = null;
  1302.                                     if (s.getPortaDominio()!=null && (!s.getPortaDominio().equals("")) && (!s.getPortaDominio().equals("-")) ) {
  1303.                                         FiltroRicerca filtroPdDoperative = new FiltroRicerca();
  1304.                                         filtroPdDoperative.setTipo(PddTipologia.OPERATIVO.toString());
  1305.                                         try{
  1306.                                             listPdDoperative = this.importerEngine.getAllIdPorteDominio(filtroPdDoperative);
  1307.                                         }catch(DriverRegistroServiziNotFound notFound){
  1308.                                             // ignore
  1309.                                         }
  1310.                                         if(listPdDoperative==null){
  1311.                                             listPdDoperative = new ArrayList<>();
  1312.                                         }
  1313.                                     }
  1314.                                     boolean pddEsterna = false;
  1315.                                     if( (listPdDoperative==null) || !listPdDoperative.contains(s.getPortaDominio())){
  1316.                                         pddEsterna = true;
  1317.                                     }
  1318.                                     dominioEsternoModI = pddEsterna;
  1319.                                 }
  1320.                                
  1321.                                 if(credenziali.getCertificate()!=null && credenziali.getCertificate().length>0) {
  1322.                                     soggettoFound = this.importerEngine.getSoggettoRegistroCredenzialiSsl(credenziali.getCertificate(), credenziali.isCertificateStrictVerification());
  1323.                                     c = "X.509";
  1324.                                     if(!isSoggettiApplicativiCredenzialiSslPermitSameCredentials) {
  1325.                                         saFound = this.importerEngine.getServizioApplicativoCredenzialiSsl(credenziali.getCertificate(), credenziali.isCertificateStrictVerification(),
  1326.                                                 dominioEsternoModI ? ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiModIFirma() : ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiHttps());
  1327.                                     }
  1328.                                 }
  1329.                                 else {
  1330.                                     soggettoFound = this.importerEngine.getSoggettoRegistroCredenzialiSsl(credenziali.getSubject(), credenziali.getIssuer());
  1331.                                     c = credenziali.getSubject();
  1332.                                     if(!isSoggettiApplicativiCredenzialiSslPermitSameCredentials) {
  1333.                                         saFound = this.importerEngine.getServizioApplicativoCredenzialiSsl(credenziali.getSubject(), credenziali.getIssuer(),
  1334.                                                 dominioEsternoModI ? ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiModIFirma() : ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiHttps());
  1335.                                     }
  1336.                                 }
  1337.                                 break;
  1338.                             case PRINCIPAL:
  1339.                                 soggettoFound = this.importerEngine.getSoggettoRegistroCredenzialiPrincipal(credenziali.getUser());
  1340.                                 c = credenziali.getUser();
  1341.                                 if(!isSoggettiApplicativiCredenzialiPrincipalPermitSameCredentials) {
  1342.                                     saFound = this.importerEngine.getServizioApplicativoCredenzialiPrincipal(credenziali.getUser());
  1343.                                 }
  1344.                                 break;
  1345.                             }
  1346.                             if(soggettoFound!=null) {
  1347.                                 IDSoggetto idSoggettoFound =  new IDSoggetto(soggettoFound.getTipo(), soggettoFound.getNome());
  1348.                                 boolean equalsForUpdate = idSoggettoFound.equals(idSoggetto);
  1349.                                 if(!equalsForUpdate) {
  1350.                                     throw new Exception("Le credenziali '"+tipo+"' ("+c+") risultano già associate al soggetto '"+idSoggettoFound+"'");
  1351.                                 }
  1352.                             }
  1353.                             if(saFound!=null) {
  1354.                                 IDSoggetto idSoggettoSaFound =  new IDSoggetto(saFound.getTipoSoggettoProprietario(), saFound.getNomeSoggettoProprietario());
  1355.                                 throw new Exception("Le credenziali '"+tipo+"' ("+c+") risultano già associate all'applicativo '"+saFound.getNome()+"' appartenente al soggetto '"+idSoggettoSaFound+"'");
  1356.                             }
  1357.                         }
  1358.                     }
  1359.                 }
  1360.                
  1361.                
  1362.                 // --- compatibilita' elementi riferiti ---
  1363.                 // Non ce ne sono da controllare
  1364.                
  1365.                
  1366.                 // ---- visibilita' oggetto riferiti ---
  1367.                 // Non ce ne sono da controllare
  1368.                
  1369.                
  1370.                 // --- set dati obbligatori nel db ----
  1371.                 String server = this.nomePddOperativa;
  1372.                 if(PddTipologia.ESTERNO.equals(this.tipoPddDefault)) {
  1373.                     server = null; // non gli assegno alcuna pdd se non definita
  1374.                 }
  1375.                 org.openspcoop2.core.registry.driver.utils.XMLDataConverter.
  1376.                     impostaInformazioniRegistroDB_Soggetto(archiveSoggetto.getSoggettoRegistro(),server);
  1377.                
  1378.                 archiveSoggetto.getSoggettoRegistro().setSuperUser(this.userLogin);        
  1379.                
  1380.                 if(archiveSoggetto.getSoggettoRegistro().getCodiceIpa()==null ||
  1381.                         archiveSoggetto.getSoggettoRegistro().getIdentificativoPorta()==null){
  1382.                    
  1383.                     ITraduttore traduttore = protocolFactory.createTraduttore();
  1384.                    
  1385.                     if(archiveSoggetto.getSoggettoRegistro().getCodiceIpa()==null){
  1386.                         archiveSoggetto.getSoggettoRegistro().setCodiceIpa(traduttore.getIdentificativoCodiceIPADefault(idSoggetto, false));
  1387.                     }
  1388.                    
  1389.                     if(archiveSoggetto.getSoggettoRegistro().getIdentificativoPorta()==null){
  1390.                         archiveSoggetto.getSoggettoRegistro().setIdentificativoPorta(traduttore.getIdentificativoPortaDefault(idSoggetto));
  1391.                     }
  1392.                 }
  1393.                
  1394.                
  1395.                
  1396.                 // --- ora registrazione
  1397.                 archiveSoggetto.getSoggettoRegistro().setOraRegistrazione(DateManager.getDate());
  1398.                
  1399.                
  1400.                
  1401.                 // --- upload ---
  1402.                 if(this.importerEngine.existsSoggettoRegistro(idSoggetto)){
  1403.                    
  1404.                     org.openspcoop2.core.registry.Soggetto old = this.importerEngine.getSoggettoRegistro(idSoggetto);
  1405.                     archiveSoggetto.getSoggettoRegistro().setId(old.getId());
  1406.                     IDSoggetto oldIDSoggettoForUpdate = new IDSoggetto(old.getTipo(), old.getNome());
  1407.                     archiveSoggetto.getSoggettoRegistro().setOldIDSoggettoForUpdate(oldIDSoggettoForUpdate);
  1408.                     org.openspcoop2.core.registry.driver.utils.XMLDataConverter.
  1409.                         impostaInformazioniRegistroDB_Soggetto_update(archiveSoggetto.getSoggettoRegistro(), old);
  1410.                    
  1411.                     // visibilita' oggetto stesso per update
  1412.                     if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  1413.                         if(this.userLogin.equals(old.getSuperUser())==false){
  1414.                             throw new Exception("Il soggetto non è visibile/aggiornabile dall'utente collegato ("+this.userLogin+")");
  1415.                         }
  1416.                     }

  1417.                     // update
  1418.                     this.importerEngine.updateSoggettoRegistro(archiveSoggetto.getSoggettoRegistro());
  1419.                    
  1420.                 }
  1421.                 // --- create ---
  1422.                 else{
  1423.                     this.importerEngine.createSoggettoRegistro(archiveSoggetto.getSoggettoRegistro());
  1424.                     create = true;
  1425.                 }
  1426.                
  1427.             }
  1428.            
  1429.             if(archiveSoggetto.getSoggettoConfigurazione()!=null){
  1430.            
  1431.                 // --- check esistenza ---
  1432.                 if(this.updateAbilitato==false){
  1433.                     if(this.importerEngine.existsSoggettoConfigurazione(idSoggetto) && !create){
  1434.                         detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  1435.                         return;
  1436.                     }
  1437.                 }
  1438.                
  1439.                
  1440.                 // --- check elementi riferiti ---
  1441.                 // Non ce ne sono da controllare
  1442.                
  1443.                
  1444.                 // --- compatibilita' elementi riferiti ---
  1445.                 // Non ce ne sono da controllare
  1446.                
  1447.                
  1448.                 // --- visibilita' oggetto riferiti ---
  1449.                 // Non ce ne sono da controllare
  1450.                
  1451.                
  1452.                 // --- set dati obbligatori nel db ---
  1453.                
  1454.                 archiveSoggetto.getSoggettoConfigurazione().setSuperUser(this.userLogin);
  1455.                
  1456.                 if(archiveSoggetto.getSoggettoConfigurazione().getIdentificativoPorta()==null){
  1457.                    
  1458.                     if(protocolFactory==null) {
  1459.                         protocolFactory = this.protocolFactoryManager.getProtocolFactoryByOrganizationType(idSoggetto.getTipo());
  1460.                     }
  1461.                     ITraduttore traduttore = protocolFactory.createTraduttore();
  1462.                    
  1463.                     if(archiveSoggetto.getSoggettoConfigurazione().getIdentificativoPorta()==null){
  1464.                         archiveSoggetto.getSoggettoConfigurazione().setIdentificativoPorta(traduttore.getIdentificativoPortaDefault(idSoggetto));
  1465.                     }
  1466.                 }
  1467.                
  1468.                
  1469.                
  1470.                 // --- ora registrazione
  1471.                 archiveSoggetto.getSoggettoConfigurazione().setOraRegistrazione(DateManager.getDate());
  1472.                
  1473.                
  1474.                
  1475.                 // --- upload ---
  1476.                 if(this.importerEngine.existsSoggettoConfigurazione(idSoggetto)){
  1477.                    
  1478.                     org.openspcoop2.core.config.Soggetto old = this.importerEngine.getSoggettoConfigurazione(idSoggetto);
  1479.                     archiveSoggetto.getSoggettoConfigurazione().setId(old.getId());
  1480.                     IDSoggetto oldIDSoggettoForUpdate = new IDSoggetto(old.getTipo(), old.getNome());
  1481.                     archiveSoggetto.getSoggettoRegistro().setOldIDSoggettoForUpdate(oldIDSoggettoForUpdate);
  1482.                    
  1483.                     // visibilita' oggetto stesso per update
  1484.                     if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  1485.                         if(this.userLogin.equals(old.getSuperUser())==false){
  1486.                             throw new Exception("Il soggetto non è visibile/aggiornabile dall'utente collegato ("+this.userLogin+")");
  1487.                         }
  1488.                     }

  1489.                     // update
  1490.                     this.importerEngine.updateSoggettoConfigurazione(archiveSoggetto.getSoggettoConfigurazione());
  1491.                    
  1492.                 }
  1493.                 // --- create ---
  1494.                 else{
  1495.                     this.importerEngine.createSoggettoConfigurazione(archiveSoggetto.getSoggettoConfigurazione());
  1496.                     create = true;
  1497.                 }
  1498.                
  1499.             }
  1500.            
  1501.            
  1502.             // --- upload ---
  1503.             if(create){
  1504.                 detail.setState(ArchiveStatoImport.CREATED);
  1505.             }else{
  1506.                 detail.setState(ArchiveStatoImport.UPDATED);
  1507.             }
  1508.            
  1509.         }          
  1510.         catch(Exception e){
  1511.             this.log.error("Errore durante l'import del soggetto ["+idSoggetto+"]: "+e.getMessage(),e);
  1512.             detail.setState(ArchiveStatoImport.ERROR);
  1513.             detail.setException(e);
  1514.         }
  1515.     }
  1516.    
  1517.    
  1518.    
  1519.    
  1520.     public void importServizioApplicativo(ArchiveServizioApplicativo archiveServizioApplicativo,
  1521.             ArchiveEsitoImportDetail detail,
  1522.             boolean isSoggettiApplicativiCredenzialiBasicPermitSameCredentials,
  1523.             boolean isSoggettiApplicativiCredenzialiSslPermitSameCredentials,
  1524.             boolean isSoggettiApplicativiCredenzialiPrincipalPermitSameCredentials){
  1525.        
  1526.         IDServizioApplicativo idServizioApplicativo = archiveServizioApplicativo.getIdServizioApplicativo();
  1527.         IDSoggetto idSoggettoProprietario = archiveServizioApplicativo.getIdSoggettoProprietario();
  1528.         try{
  1529.            
  1530.             // --- check esistenza ---
  1531.             if(this.updateAbilitato==false){
  1532.                 if(this.importerEngine.existsServizioApplicativo(idServizioApplicativo)){
  1533.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  1534.                     return;
  1535.                 }
  1536.             }
  1537.            
  1538.                
  1539.             // --- check elementi riferiti ---
  1540.            
  1541.             // soggetto proprietario
  1542.             if(this.importerEngine.existsSoggettoConfigurazione(idSoggettoProprietario) == false ){
  1543.                 throw new Exception("Soggetto proprietario ["+idSoggettoProprietario+"] non esistente");
  1544.             }
  1545.            
  1546.             // ruoli
  1547.             if(archiveServizioApplicativo.getServizioApplicativo().getInvocazionePorta()!=null &&
  1548.                     archiveServizioApplicativo.getServizioApplicativo().getInvocazionePorta().getRuoli()!=null &&
  1549.                     archiveServizioApplicativo.getServizioApplicativo().getInvocazionePorta().getRuoli().sizeRuoloList()>0){
  1550.                 for (int i = 0; i < archiveServizioApplicativo.getServizioApplicativo().getInvocazionePorta().getRuoli().sizeRuoloList(); i++) {
  1551.                     IDRuolo idRuolo = new IDRuolo(archiveServizioApplicativo.getServizioApplicativo().getInvocazionePorta().getRuoli().getRuolo(i).getNome());
  1552.                     if(this.importerEngine.existsRuolo(idRuolo) == false ){
  1553.                         throw new Exception("Ruolo ["+idRuolo.getNome()+"] associato non esiste");
  1554.                     }  
  1555.                 }
  1556.             }
  1557.            
  1558.             // univocita' credenziali
  1559.             if(archiveServizioApplicativo.getServizioApplicativo().getInvocazionePorta()!=null &&
  1560.                     archiveServizioApplicativo.getServizioApplicativo().getInvocazionePorta().getCredenzialiList()!=null &&
  1561.                     !archiveServizioApplicativo.getServizioApplicativo().getInvocazionePorta().getCredenzialiList().isEmpty()) {
  1562.                 for (Credenziali credenziali : archiveServizioApplicativo.getServizioApplicativo().getInvocazionePorta().getCredenzialiList()) {
  1563.                     org.openspcoop2.core.config.constants.CredenzialeTipo tipo = credenziali.getTipo();
  1564.                     if(tipo!=null) {
  1565.                         ServizioApplicativo saFound = null;
  1566.                         Soggetto soggettoFound = null;
  1567.                         String c = null;
  1568.                         switch (tipo) {
  1569.                         case BASIC:
  1570.                             saFound = this.importerEngine.getServizioApplicativoCredenzialiBasic(credenziali.getUser());
  1571.                             c = credenziali.getUser();
  1572.                             if(!isSoggettiApplicativiCredenzialiBasicPermitSameCredentials) {
  1573.                                 soggettoFound = this.importerEngine.getSoggettoRegistroCredenzialiBasic(credenziali.getUser());
  1574.                             }
  1575.                             break;
  1576.                         case APIKEY:
  1577.                             saFound = this.importerEngine.getServizioApplicativoCredenzialiApiKey(credenziali.getUser(), credenziali.isAppId());
  1578.                             c = credenziali.getUser();
  1579.                             break;
  1580.                         case SSL:
  1581.                            
  1582.                             boolean tokenWithHttpsEnabled = false;
  1583.                             ProtocolFactoryManager protocolFactoryManager = ProtocolFactoryManager.getInstance();
  1584.                             String protocollo = protocolFactoryManager.getProtocolByOrganizationType(idSoggettoProprietario.getTipo());
  1585.                             tokenWithHttpsEnabled = protocolFactoryManager.getProtocolFactoryByName(protocollo).createProtocolConfiguration().isSupportatoAutenticazioneApplicativiHttpsConToken();
  1586.                             if(tokenWithHttpsEnabled && credenziali.getTokenPolicy()!=null && StringUtils.isNotEmpty(credenziali.getTokenPolicy())) {
  1587.                                 saFound = this.importerEngine.getServizioApplicativoCredenzialiToken(credenziali.getTokenPolicy(), credenziali.getUser());
  1588.                                 c = credenziali.getUser();
  1589.                                 tipo = org.openspcoop2.core.config.constants.CredenzialeTipo.TOKEN;
  1590.                             }
  1591.                             else {
  1592.                                 boolean dominioEsternoModI = false;
  1593.                                 if(Costanti.MODIPA_PROTOCOL_NAME.equals(protocollo)) {
  1594.                                     Soggetto s = null;
  1595.                                     try {
  1596.                                         s = this.importerEngine.getSoggettoRegistro(idSoggettoProprietario);
  1597.                                     }catch(DriverRegistroServiziNotFound notFound){
  1598.                                         // ignore
  1599.                                     }
  1600.                                     List<String> listPdDoperative = null;
  1601.                                     if (s!=null && s.getPortaDominio()!=null && (!s.getPortaDominio().equals("")) && (!s.getPortaDominio().equals("-")) ) {
  1602.                                         FiltroRicerca filtroPdDoperative = new FiltroRicerca();
  1603.                                         filtroPdDoperative.setTipo(PddTipologia.OPERATIVO.toString());
  1604.                                         try{
  1605.                                             listPdDoperative = this.importerEngine.getAllIdPorteDominio(filtroPdDoperative);
  1606.                                         }catch(DriverRegistroServiziNotFound notFound){
  1607.                                             // ignore
  1608.                                         }
  1609.                                         if(listPdDoperative==null){
  1610.                                             listPdDoperative = new ArrayList<>();
  1611.                                         }
  1612.                                     }
  1613.                                     boolean pddEsterna = false;
  1614.                                     if( (listPdDoperative==null) || !listPdDoperative.contains(s.getPortaDominio())){
  1615.                                         pddEsterna = true;
  1616.                                     }
  1617.                                     dominioEsternoModI = pddEsterna;
  1618.                                 }
  1619.                                 if(credenziali.getCertificate()!=null && credenziali.getCertificate().length>0) {
  1620.                                     saFound = this.importerEngine.getServizioApplicativoCredenzialiSsl(credenziali.getCertificate(), credenziali.isCertificateStrictVerification(),
  1621.                                             dominioEsternoModI ? ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiModIFirma() : ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiHttps());
  1622.                                     c = "X.509";
  1623.                                     if(!isSoggettiApplicativiCredenzialiSslPermitSameCredentials) {
  1624.                                         soggettoFound = this.importerEngine.getSoggettoRegistroCredenzialiSsl(credenziali.getCertificate(), credenziali.isCertificateStrictVerification());
  1625.                                     }
  1626.                                 }
  1627.                                 else {
  1628.                                     saFound = this.importerEngine.getServizioApplicativoCredenzialiSsl(credenziali.getSubject(), credenziali.getIssuer(),
  1629.                                             dominioEsternoModI ? ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiModIFirma() : ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiHttps());
  1630.                                     c = credenziali.getSubject();
  1631.                                     if(!isSoggettiApplicativiCredenzialiSslPermitSameCredentials) {
  1632.                                         soggettoFound = this.importerEngine.getSoggettoRegistroCredenzialiSsl(credenziali.getSubject(), credenziali.getIssuer());
  1633.                                     }
  1634.                                 }
  1635.                             }
  1636.                             break;
  1637.                         case PRINCIPAL:
  1638.                             saFound = this.importerEngine.getServizioApplicativoCredenzialiPrincipal(credenziali.getUser());
  1639.                             c = credenziali.getUser();
  1640.                             if(!isSoggettiApplicativiCredenzialiPrincipalPermitSameCredentials) {
  1641.                                 soggettoFound = this.importerEngine.getSoggettoRegistroCredenzialiPrincipal(credenziali.getUser());
  1642.                             }
  1643.                             break;
  1644.                         case TOKEN:
  1645.                             saFound = this.importerEngine.getServizioApplicativoCredenzialiToken(credenziali.getTokenPolicy(), credenziali.getUser());
  1646.                             c = credenziali.getUser();
  1647.                             break;
  1648.                         }
  1649.                         if(saFound!=null) {
  1650.                             IDSoggetto idSoggettoProprietarioFound =  new IDSoggetto(saFound.getTipoSoggettoProprietario(), saFound.getNomeSoggettoProprietario());
  1651.                             boolean equalsForUpdate = idSoggettoProprietario.equals(idSoggettoProprietarioFound) && idServizioApplicativo.getNome().contentEquals(saFound.getNome());
  1652.                             if(!equalsForUpdate) {
  1653.                                 throw new Exception("Le credenziali '"+tipo+"' ("+c+") risultano già associate all'applicativo '"+saFound.getNome()+"' appartenente al soggetto '"+idSoggettoProprietarioFound+"'");
  1654.                             }
  1655.                         }
  1656.                         if(soggettoFound!=null) {
  1657.                             IDSoggetto idSoggettoFound =  new IDSoggetto(soggettoFound.getTipo(), soggettoFound.getNome());
  1658.                             throw new Exception("Le credenziali '"+tipo+"' ("+c+") risultano già associate al soggetto '"+idSoggettoFound+"'");
  1659.                         }
  1660.                     }
  1661.                 }
  1662.             }
  1663.            
  1664.             // token negoziazione
  1665.             if(archiveServizioApplicativo.getServizioApplicativo()!=null && archiveServizioApplicativo.getServizioApplicativo().getInvocazioneServizio()!=null) {
  1666.                 if(archiveServizioApplicativo.getServizioApplicativo().getInvocazioneServizio().getConnettore()!=null &&
  1667.                         archiveServizioApplicativo.getServizioApplicativo().getInvocazioneServizio().getConnettore().getProperties()!=null && archiveServizioApplicativo.getServizioApplicativo().getInvocazioneServizio().getConnettore().getProperties().containsKey(CostantiConnettori.CONNETTORE_TOKEN_POLICY)) {
  1668.                     String policy = archiveServizioApplicativo.getServizioApplicativo().getInvocazioneServizio().getConnettore().getProperties().get(CostantiConnettori.CONNETTORE_TOKEN_POLICY);
  1669.                     if(this.importerEngine.existsGenericProperties_retrieve(policy) == false) {
  1670.                         throw new Exception("Token Policy Negoziazione ["+policy+"] indicato nel connettore non esistente");
  1671.                     }
  1672.                 }
  1673.             }
  1674.             if(archiveServizioApplicativo.getServizioApplicativo()!=null && archiveServizioApplicativo.getServizioApplicativo().getRispostaAsincrona()!=null) {
  1675.                 if(archiveServizioApplicativo.getServizioApplicativo().getRispostaAsincrona().getConnettore()!=null &&
  1676.                         archiveServizioApplicativo.getServizioApplicativo().getRispostaAsincrona().getConnettore().getProperties()!=null && archiveServizioApplicativo.getServizioApplicativo().getRispostaAsincrona().getConnettore().getProperties().containsKey(CostantiConnettori.CONNETTORE_TOKEN_POLICY)) {
  1677.                     String policy = archiveServizioApplicativo.getServizioApplicativo().getRispostaAsincrona().getConnettore().getProperties().get(CostantiConnettori.CONNETTORE_TOKEN_POLICY);
  1678.                     if(this.importerEngine.existsGenericProperties_retrieve(policy) == false) {
  1679.                         throw new Exception("Token Policy Negoziazione ["+policy+"] indicato nel connettore non esistente");
  1680.                     }
  1681.                 }
  1682.             }
  1683.            
  1684.             // plugin
  1685.             if(this.checkExistsPluginConfigurazione) {
  1686.                 if(archiveServizioApplicativo.getServizioApplicativo()!=null && archiveServizioApplicativo.getServizioApplicativo().getInvocazioneServizio()!=null) {
  1687.                     if(archiveServizioApplicativo.getServizioApplicativo().getInvocazioneServizio().getConnettore()!=null &&
  1688.                             archiveServizioApplicativo.getServizioApplicativo().getInvocazioneServizio().getConnettore().getCustom()!=null &&
  1689.                             archiveServizioApplicativo.getServizioApplicativo().getInvocazioneServizio().getConnettore().getCustom() &&
  1690.                             archiveServizioApplicativo.getServizioApplicativo().getInvocazioneServizio().getConnettore().getTipo()!=null) {
  1691.                         TipiConnettore tipo = TipiConnettore.toEnumFromName(archiveServizioApplicativo.getServizioApplicativo().getInvocazioneServizio().getConnettore().getTipo());
  1692.                         if(tipo==null) {
  1693.                             if(this.importerEngine.existsPluginClasse(TipoPlugin.CONNETTORE.getValue(), archiveServizioApplicativo.getServizioApplicativo().getInvocazioneServizio().getConnettore().getTipo()) == false ){
  1694.                                 throw new Exception("Plugin '"+TipoPlugin.CONNETTORE.getValue()+"' ["+archiveServizioApplicativo.getServizioApplicativo().getInvocazioneServizio().getConnettore().getTipo()+"] non esistente nel registro");
  1695.                             }
  1696.                         }
  1697.                     }
  1698.                 }
  1699.                 if(archiveServizioApplicativo.getServizioApplicativo()!=null && archiveServizioApplicativo.getServizioApplicativo().getRispostaAsincrona()!=null) {
  1700.                     if(archiveServizioApplicativo.getServizioApplicativo().getRispostaAsincrona().getConnettore()!=null &&
  1701.                             archiveServizioApplicativo.getServizioApplicativo().getRispostaAsincrona().getConnettore().getCustom()!=null &&
  1702.                             archiveServizioApplicativo.getServizioApplicativo().getRispostaAsincrona().getConnettore().getCustom() &&
  1703.                             archiveServizioApplicativo.getServizioApplicativo().getRispostaAsincrona().getConnettore().getTipo()!=null) {
  1704.                         TipiConnettore tipo = TipiConnettore.toEnumFromName(archiveServizioApplicativo.getServizioApplicativo().getRispostaAsincrona().getConnettore().getTipo());
  1705.                         if(tipo==null) {
  1706.                             if(this.importerEngine.existsPluginClasse(TipoPlugin.CONNETTORE.getValue(), archiveServizioApplicativo.getServizioApplicativo().getRispostaAsincrona().getConnettore().getTipo()) == false ){
  1707.                                 throw new Exception("Plugin '"+TipoPlugin.CONNETTORE.getValue()+"' ["+archiveServizioApplicativo.getServizioApplicativo().getRispostaAsincrona().getConnettore().getTipo()+"] non esistente nel registro");
  1708.                             }
  1709.                         }
  1710.                     }
  1711.                 }
  1712.             }
  1713.            
  1714.            
  1715.            
  1716.             // --- compatibilita' elementi riferiti ---
  1717.             // non ce ne sono da controllare
  1718.            
  1719.            
  1720.             // ---- visibilita' oggetto riferiti ---
  1721.             org.openspcoop2.core.config.Soggetto soggetto = this.importerEngine.getSoggettoConfigurazione(idSoggettoProprietario);
  1722.             if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  1723.                 if(this.userLogin.equals(soggetto.getSuperUser())==false){
  1724.                     throw new Exception("Il soggetto proprietario ["+idSoggettoProprietario+"] non è visibile/utilizzabile dall'utente collegato ("+this.userLogin+")");
  1725.                 }
  1726.             }
  1727.            
  1728.            
  1729.             // --- set dati obbligatori nel db ----
  1730.            
  1731.             // archiveServizioApplicativo.getServizioApplicativo().setSuperUser(this.userLogin);
  1732.             // L'oggetto non contiene informazione di visibilita, la eredita dal soggetto
  1733.            
  1734.             org.openspcoop2.core.config.driver.utils.XMLDataConverter.
  1735.                 impostaInformazioniConfigurazione_ServizioApplicativo(archiveServizioApplicativo.getServizioApplicativo(), soggetto, "",
  1736.                         this.log, CostantiConfigurazione.CONFIGURAZIONE_DB);
  1737.            
  1738.            
  1739.            
  1740.             // --- ora registrazione
  1741.             archiveServizioApplicativo.getServizioApplicativo().setOraRegistrazione(DateManager.getDate());
  1742.            
  1743.            
  1744.            
  1745.             // --- upload ---
  1746.             if(this.importerEngine.existsServizioApplicativo(idServizioApplicativo)){
  1747.                
  1748.                 org.openspcoop2.core.config.ServizioApplicativo old = this.importerEngine.getServizioApplicativo(idServizioApplicativo);
  1749.                 archiveServizioApplicativo.getServizioApplicativo().setId(old.getId());
  1750.                 IDServizioApplicativo oldIDServizioApplicativoForUpdate = new IDServizioApplicativo();
  1751.                 oldIDServizioApplicativoForUpdate.setNome(old.getNome());
  1752.                 oldIDServizioApplicativoForUpdate.setIdSoggettoProprietario(new IDSoggetto(old.getTipoSoggettoProprietario(), old.getNomeSoggettoProprietario()));
  1753.                 archiveServizioApplicativo.getServizioApplicativo().setOldIDServizioApplicativoForUpdate(oldIDServizioApplicativoForUpdate);
  1754.                 org.openspcoop2.core.config.driver.utils.XMLDataConverter.
  1755.                     impostaInformazioniConfigurazione_ServizioApplicativo_update(archiveServizioApplicativo.getServizioApplicativo(), old);
  1756.                
  1757.                 // visibilita' oggetto stesso per update
  1758.                 // L'oggetto non contiene informazione di visibilita, la eredita dal soggetto

  1759.                 // update
  1760.                 this.importerEngine.updateServizioApplicativo(archiveServizioApplicativo.getServizioApplicativo());
  1761.                 detail.setState(ArchiveStatoImport.UPDATED);
  1762.             }
  1763.             // --- create ---
  1764.             else{
  1765.                 this.importerEngine.createServizioApplicativo(archiveServizioApplicativo.getServizioApplicativo());
  1766.                 detail.setState(ArchiveStatoImport.CREATED);
  1767.             }
  1768.                

  1769.            
  1770.         }          
  1771.         catch(Exception e){
  1772.             this.log.error("Errore durante l'import del servizio applicativo ["+idServizioApplicativo+"]: "+e.getMessage(),e);
  1773.             detail.setState(ArchiveStatoImport.ERROR);
  1774.             detail.setException(e);
  1775.         }
  1776.     }
  1777.    
  1778.    
  1779.    
  1780.    

  1781.     public void importAccordoCooperazione(ArchiveAccordoCooperazione archiveAccordoCooperazione,
  1782.             ArchiveEsitoImportDetail detail){
  1783.        
  1784.         IDAccordoCooperazione idAccordoCooperazione = archiveAccordoCooperazione.getIdAccordoCooperazione();
  1785.         IDSoggetto idSoggettoReferente = archiveAccordoCooperazione.getIdSoggettoReferente();
  1786.         List<IDSoggetto> idSoggettiPartecipanti = archiveAccordoCooperazione.getIdSoggettiPartecipanti();
  1787.         try{
  1788.             // --- check esistenza ---
  1789.             if(this.updateAbilitato==false){
  1790.                 if(this.importerEngine.existsAccordoCooperazione(idAccordoCooperazione)){
  1791.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  1792.                     return;
  1793.                 }
  1794.             }
  1795.            
  1796.                
  1797.             // --- check elementi riferiti ---
  1798.            
  1799.             // soggetto referente
  1800.             if(this.importerEngine.existsSoggettoRegistro(idSoggettoReferente) == false ){
  1801.                 throw new Exception("Soggetto proprietario ["+idSoggettoReferente+"] non esistente");
  1802.             }
  1803.            
  1804.             // soggetti partecipanti
  1805.             if(idSoggettiPartecipanti!=null){
  1806.                 for (IDSoggetto idSoggettoPartecipante : idSoggettiPartecipanti) {
  1807.                     if(this.importerEngine.existsSoggettoRegistro(idSoggettoPartecipante) == false ){
  1808.                         throw new Exception("Soggetto partecipante ["+idSoggettoPartecipante+"] non esistente");
  1809.                     }
  1810.                 }
  1811.             }
  1812.            
  1813.            
  1814.             // --- compatibilita' elementi riferiti ---
  1815.             String protocolloAssociatoAccordo = this.protocolFactoryManager.getProtocolByOrganizationType(idSoggettoReferente.getTipo());
  1816.             // soggetti partecipanti
  1817.             if(idSoggettiPartecipanti!=null){
  1818.                 for (IDSoggetto idSoggettoPartecipante : idSoggettiPartecipanti) {
  1819.                     String protocolloAssociatoSoggettoPartecipante = this.protocolFactoryManager.getProtocolByOrganizationType(idSoggettoPartecipante.getTipo());
  1820.                     if(protocolloAssociatoAccordo.equals(protocolloAssociatoSoggettoPartecipante)==false){
  1821.                         throw new Exception("Soggetto partecipante ["+idSoggettoPartecipante+"] (protocollo:"+protocolloAssociatoSoggettoPartecipante+
  1822.                                 ") non utilizzabile in un accordo con soggetto referente ["+idSoggettoReferente+"] (protocollo:"+protocolloAssociatoAccordo+")");
  1823.                     }
  1824.                 }
  1825.             }
  1826.            

  1827.             // ---- visibilita' oggetto riferiti ---
  1828.             org.openspcoop2.core.registry.Soggetto soggetto = this.importerEngine.getSoggettoRegistro(idSoggettoReferente);
  1829.             if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  1830.                 if(this.userLogin.equals(soggetto.getSuperUser())==false){
  1831.                     throw new Exception("Il soggetto referente ["+idSoggettoReferente+"] non è visibile/utilizzabile dall'utente collegato ("+this.userLogin+")");
  1832.                 }
  1833.             }
  1834.             if(idSoggettiPartecipanti!=null){
  1835.                 for (IDSoggetto idSoggettoPartecipante : idSoggettiPartecipanti) {
  1836.                     org.openspcoop2.core.registry.Soggetto soggettoPartecipante = this.importerEngine.getSoggettoRegistro(idSoggettoPartecipante);
  1837.                     if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  1838.                         if(this.userLogin.equals(soggettoPartecipante.getSuperUser())==false){
  1839.                             throw new Exception("Il soggetto partecipante ["+idSoggettoPartecipante+"] non è visibile/utilizzabile dall'utente collegato ("+this.userLogin+")");
  1840.                         }
  1841.                     }
  1842.                 }
  1843.             }
  1844.            
  1845.            
  1846.             // --- set dati obbligatori nel db ----
  1847.            
  1848.             archiveAccordoCooperazione.getAccordoCooperazione().setSuperUser(this.userLogin);
  1849.            
  1850.             for(int i=0; i<archiveAccordoCooperazione.getAccordoCooperazione().sizeAllegatoList();i++){
  1851.                 archiveAccordoCooperazione.getAccordoCooperazione().getAllegato(i).setRuolo(RuoliDocumento.allegato.toString());
  1852.                 archiveAccordoCooperazione.getAccordoCooperazione().getAllegato(i).setTipoProprietarioDocumento(ProprietariDocumento.accordoCooperazione.toString());
  1853.             }
  1854.             for(int i=0; i<archiveAccordoCooperazione.getAccordoCooperazione().sizeSpecificaSemiformaleList();i++){
  1855.                 archiveAccordoCooperazione.getAccordoCooperazione().getSpecificaSemiformale(i).setRuolo(RuoliDocumento.specificaSemiformale.toString());
  1856.                 archiveAccordoCooperazione.getAccordoCooperazione().getSpecificaSemiformale(i).setTipoProprietarioDocumento(ProprietariDocumento.accordoCooperazione.toString());
  1857.             }
  1858.                        
  1859.            
  1860.             // --- workflowStatoDocumenti ---
  1861.             StringBuilder warningInfoStatoFinale = new StringBuilder("");
  1862.             if(archiveAccordoCooperazione.getAccordoCooperazione().getStatoPackage()==null){
  1863.                 if(this.gestioneWorkflowStatiAccordi){
  1864.                     try{
  1865.                         archiveAccordoCooperazione.getAccordoCooperazione().setStatoPackage(StatiAccordo.finale.toString());
  1866.                         this.importerEngine.validaStatoAccordoCooperazione(archiveAccordoCooperazione.getAccordoCooperazione());
  1867.                     }catch(ValidazioneStatoPackageException validazioneException){
  1868.                         try{
  1869.                             archiveAccordoCooperazione.getAccordoCooperazione().setStatoPackage(StatiAccordo.operativo.toString());
  1870.                             this.importerEngine.validaStatoAccordoCooperazione(archiveAccordoCooperazione.getAccordoCooperazione());
  1871.                         }catch(ValidazioneStatoPackageException validazioneExceptionLevelOperativo){
  1872.                             warningInfoStatoFinale.append("\n\t\t(WARNING) Accordo salvato con stato '").append(StatiAccordo.bozza.toString()).append("'\n\t\t\t");
  1873.                             warningInfoStatoFinale.append(validazioneException.toString("\n\t\t\t - ","\n\t\t\t - "));
  1874.                             warningInfoStatoFinale.append("\n\t\t\t"+validazioneExceptionLevelOperativo.toString("\n\t\t\t - ","\n\t\t\t - "));
  1875.                             archiveAccordoCooperazione.getAccordoCooperazione().setStatoPackage(StatiAccordo.bozza.toString());
  1876.                         }
  1877.                     }
  1878.                 }
  1879.                 else{
  1880.                     archiveAccordoCooperazione.getAccordoCooperazione().setStatoPackage(StatiAccordo.finale.toString());
  1881.                 }
  1882.             }
  1883.            
  1884.            
  1885.            
  1886.             // --- ora registrazione
  1887.             archiveAccordoCooperazione.getAccordoCooperazione().setOraRegistrazione(DateManager.getDate());
  1888.            
  1889.            
  1890.            
  1891.             // --- upload ---
  1892.             if(this.importerEngine.existsAccordoCooperazione(idAccordoCooperazione)){
  1893.                
  1894.                 AccordoCooperazione old = this.importerEngine.getAccordoCooperazione(idAccordoCooperazione);
  1895.                 archiveAccordoCooperazione.getAccordoCooperazione().setId(old.getId());
  1896.                 archiveAccordoCooperazione.getAccordoCooperazione().setOldIDAccordoForUpdate(this.idAccordoCooperazioneFactory.getIDAccordoFromAccordo(old));
  1897.                
  1898.                 // visibilita' oggetto stesso per update
  1899.                 if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  1900.                     if(this.userLogin.equals(old.getSuperUser())==false){
  1901.                         throw new Exception("L'accordo non è visibile/aggiornabile dall'utente collegato ("+this.userLogin+")");
  1902.                     }
  1903.                 }

  1904.                 // update
  1905.                 this.importerEngine.updateAccordoCooperazione(archiveAccordoCooperazione.getAccordoCooperazione());
  1906.                 detail.setState(ArchiveStatoImport.UPDATED);
  1907.                 detail.setStateDetail(warningInfoStatoFinale.toString());
  1908.             }
  1909.             // --- create ---
  1910.             else{
  1911.                 this.importerEngine.createAccordoCooperazione(archiveAccordoCooperazione.getAccordoCooperazione());
  1912.                 detail.setState(ArchiveStatoImport.CREATED);
  1913.                 detail.setStateDetail(warningInfoStatoFinale.toString());
  1914.             }
  1915.                

  1916.            
  1917.         }          
  1918.         catch(Exception e){
  1919.             this.log.error("Errore durante l'import dell'accordo di cooperazione ["+idAccordoCooperazione+"]: "+e.getMessage(),e);
  1920.             detail.setState(ArchiveStatoImport.ERROR);
  1921.             detail.setException(e);
  1922.         }
  1923.     }
  1924.    
  1925.    
  1926.    
  1927.    
  1928.    
  1929.    
  1930.     private void modifyUriAccordoCorrelato(AccordoServizioParteComune aspc, IDSoggetto soggettoDefaultProtocollo) {
  1931.         if(aspc!=null) {
  1932.             if(aspc.sizeProtocolPropertyList()>0) {
  1933.                 for (ProtocolProperty pp : aspc.getProtocolPropertyList()) {
  1934.                     if(CostantiDB.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_API_RICHIESTA_CORRELATA.equals(pp.getName()) && pp.getValue()!=null && StringUtils.isNotEmpty(pp.getValue())) {
  1935.                         modifyUriAccordo(pp, soggettoDefaultProtocollo);
  1936.                     }
  1937.                 }
  1938.             }
  1939.             if(aspc.sizeResourceList()>0) {
  1940.                 for (Resource r : aspc.getResourceList()) {
  1941.                     if(r.sizeProtocolPropertyList()>0) {
  1942.                         for (ProtocolProperty pp : r.getProtocolPropertyList()) {
  1943.                             if(CostantiDB.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_API_RICHIESTA_CORRELATA.equals(pp.getName()) && pp.getValue()!=null && StringUtils.isNotEmpty(pp.getValue())) {
  1944.                                 modifyUriAccordo(pp, soggettoDefaultProtocollo);
  1945.                             }
  1946.                         }
  1947.                     }
  1948.                 }
  1949.             }
  1950.             if(aspc.sizePortTypeList()>0) {
  1951.                 for (PortType pt : aspc.getPortTypeList()) {
  1952.                     if(pt.sizeProtocolPropertyList()>0) {
  1953.                         for (ProtocolProperty pp : pt.getProtocolPropertyList()) {
  1954.                             if(CostantiDB.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_API_RICHIESTA_CORRELATA.equals(pp.getName()) && pp.getValue()!=null && StringUtils.isNotEmpty(pp.getValue())) {
  1955.                                 modifyUriAccordo(pp, soggettoDefaultProtocollo);
  1956.                             }
  1957.                         }
  1958.                     }
  1959.                     if(pt.sizeAzioneList()>0) {
  1960.                         for (Operation op : pt.getAzioneList()) {
  1961.                             if(op.sizeProtocolPropertyList()>0) {
  1962.                                 for (ProtocolProperty pp : op.getProtocolPropertyList()) {
  1963.                                     if(CostantiDB.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_API_RICHIESTA_CORRELATA.equals(pp.getName()) && pp.getValue()!=null && StringUtils.isNotEmpty(pp.getValue())) {
  1964.                                         modifyUriAccordo(pp, soggettoDefaultProtocollo);
  1965.                                     }
  1966.                                 }
  1967.                             }
  1968.                         }
  1969.                     }
  1970.                 }
  1971.             }
  1972.         }
  1973.     }
  1974.     private void modifyUriAccordo(ProtocolProperty pp, IDSoggetto soggettoDefaultProtocollo) {
  1975.         if(pp!=null && CostantiDB.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_API_RICHIESTA_CORRELATA.equals(pp.getName()) && pp.getValue()!=null && StringUtils.isNotEmpty(pp.getValue())) {
  1976.             String uri = pp.getValue();
  1977.             try {
  1978.                 IDAccordo idUri = this.idAccordoFactory.getIDAccordoFromUri(uri);
  1979.                 if(idUri!=null && idUri.getSoggettoReferente()!=null) {
  1980.                     if(!idUri.getSoggettoReferente().equals(soggettoDefaultProtocollo)) {
  1981.                         idUri.getSoggettoReferente().setTipo(soggettoDefaultProtocollo.getTipo());
  1982.                         idUri.getSoggettoReferente().setNome(soggettoDefaultProtocollo.getNome());
  1983.                         String newUri = this.idAccordoFactory.getUriFromIDAccordo(idUri);
  1984.                         pp.setValue(newUri);
  1985.                         //this.log.info("MODIFICATO old["+uri+"] nuovo["+newUri+"]");
  1986.                     }
  1987.                 }
  1988.             }catch(Throwable t) {
  1989.                 // ignore
  1990.             }
  1991.         }
  1992.     }
  1993.    
  1994.     public void importAccordoServizioParteComune(ArchiveAccordoServizioParteComune archiveAccordoServizioParteComune,
  1995.             boolean utilizzoAzioniDiretteInAccordoAbilitato,
  1996.             ArchiveEsitoImportDetail detail,
  1997.             Map<String, IDSoggetto> mapIdSoggettoDefault, Map<String, Boolean> mapAPIconReferente){
  1998.        
  1999.         IDAccordo idAccordoServizioParteComune = archiveAccordoServizioParteComune.getIdAccordoServizioParteComune();
  2000.         IDSoggetto idSoggettoReferente = archiveAccordoServizioParteComune.getIdSoggettoReferente();
  2001.         try{
  2002.             // --- fix soggetto referente --
  2003.             IProtocolFactory<?> protocolFactory = this.protocolFactoryManager.getProtocolFactoryByOrganizationType(idSoggettoReferente.getTipo());
  2004.             boolean APIconReferente = mapAPIconReferente.get(protocolFactory.getProtocol());
  2005.             if(!APIconReferente) {
  2006.                 IDSoggetto soggettoDefaultProtocollo = mapIdSoggettoDefault.get(protocolFactory.getProtocol());
  2007.                 if(!idSoggettoReferente.equals(soggettoDefaultProtocollo)) {
  2008.                     archiveAccordoServizioParteComune.getAccordoServizioParteComune().getSoggettoReferente().setTipo(soggettoDefaultProtocollo.getTipo());
  2009.                     archiveAccordoServizioParteComune.getAccordoServizioParteComune().getSoggettoReferente().setNome(soggettoDefaultProtocollo.getNome());
  2010.                     idSoggettoReferente.setTipo(soggettoDefaultProtocollo.getTipo());
  2011.                     idSoggettoReferente.setNome(soggettoDefaultProtocollo.getNome());
  2012.                     idAccordoServizioParteComune.getSoggettoReferente().setTipo(soggettoDefaultProtocollo.getTipo());
  2013.                     idAccordoServizioParteComune.getSoggettoReferente().setNome(soggettoDefaultProtocollo.getNome());
  2014.                 }
  2015.                 if(CostantiLabel.MODIPA_PROTOCOL_NAME.equals(protocolFactory.getProtocol())) {
  2016.                     modifyUriAccordoCorrelato(archiveAccordoServizioParteComune.getAccordoServizioParteComune(), soggettoDefaultProtocollo);
  2017.                 }
  2018.             }
  2019.            
  2020.            
  2021.             // --- check esistenza ---
  2022.             if(this.updateAbilitato==false){
  2023.                 if(this.importerEngine.existsAccordoServizioParteComune(idAccordoServizioParteComune)){
  2024.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  2025.                     return;
  2026.                 }
  2027.             }
  2028.            
  2029.                
  2030.            
  2031.             // --- check elementi riferiti ---
  2032.            
  2033.             // soggetto referente
  2034.             if(APIconReferente) {
  2035.                 if(this.importerEngine.existsSoggettoRegistro(idSoggettoReferente) == false ){
  2036.                     throw new Exception("Soggetto proprietario ["+idSoggettoReferente+"] non esistente");
  2037.                 }
  2038.             }
  2039.            
  2040.             // gruppi
  2041.             if(archiveAccordoServizioParteComune.getAccordoServizioParteComune().getGruppi()!=null &&
  2042.                     archiveAccordoServizioParteComune.getAccordoServizioParteComune().getGruppi().sizeGruppoList()>0){
  2043.                 for (int i = 0; i < archiveAccordoServizioParteComune.getAccordoServizioParteComune().getGruppi().sizeGruppoList(); i++) {
  2044.                     IDGruppo idGruppo = new IDGruppo(archiveAccordoServizioParteComune.getAccordoServizioParteComune().getGruppi().getGruppo(i).getNome());
  2045.                     if(this.importerEngine.existsGruppo(idGruppo) == false ){
  2046.                         throw new Exception("Tag ["+idGruppo.getNome()+"] associato non esiste");
  2047.                     }  
  2048.                 }
  2049.             }
  2050.            
  2051.            
  2052.             // --- compatibilita' elementi riferiti ---
  2053.             // non ce ne sono da controllare
  2054.             //String protocolloAssociatoAccordo = this.protocolFactoryManager.getProtocolByOrganizationType(idSoggettoReferente.getTipo());
  2055.                        

  2056.             // ---- visibilita' oggetto riferiti ---
  2057.             if(APIconReferente) {
  2058.                 org.openspcoop2.core.registry.Soggetto soggetto = this.importerEngine.getSoggettoRegistro(idSoggettoReferente);
  2059.                 if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  2060.                     if(this.userLogin.equals(soggetto.getSuperUser())==false){
  2061.                         throw new Exception("Il soggetto referente ["+idSoggettoReferente+"] non è visibile/utilizzabile dall'utente collegato ("+this.userLogin+")");
  2062.                     }
  2063.                 }
  2064.             }
  2065.            
  2066.            
  2067.             // --- set dati obbligatori nel db ----

  2068.             org.openspcoop2.core.registry.driver.utils.XMLDataConverter.
  2069.                 impostaInformazioniRegistroDB_AccordoServizioParteComune(archiveAccordoServizioParteComune.getAccordoServizioParteComune());
  2070.            
  2071.             archiveAccordoServizioParteComune.getAccordoServizioParteComune().setSuperUser(this.userLogin);
  2072.            
  2073.             for(int i=0; i<archiveAccordoServizioParteComune.getAccordoServizioParteComune().sizeAllegatoList();i++){
  2074.                 archiveAccordoServizioParteComune.getAccordoServizioParteComune().getAllegato(i).setRuolo(RuoliDocumento.allegato.toString());
  2075.                 archiveAccordoServizioParteComune.getAccordoServizioParteComune().getAllegato(i).setTipoProprietarioDocumento(ProprietariDocumento.accordoServizio.toString());
  2076.             }
  2077.             for(int i=0; i<archiveAccordoServizioParteComune.getAccordoServizioParteComune().sizeSpecificaSemiformaleList();i++){
  2078.                 archiveAccordoServizioParteComune.getAccordoServizioParteComune().getSpecificaSemiformale(i).setRuolo(RuoliDocumento.specificaSemiformale.toString());
  2079.                 archiveAccordoServizioParteComune.getAccordoServizioParteComune().getSpecificaSemiformale(i).setTipoProprietarioDocumento(ProprietariDocumento.accordoServizio.toString());
  2080.             }
  2081.                    
  2082.            
  2083.             // --- workflowStatoDocumenti ---
  2084.             StringBuilder warningInfoStatoFinale = new StringBuilder("");
  2085.             if(archiveAccordoServizioParteComune.getAccordoServizioParteComune().getStatoPackage()==null){
  2086.                 if(this.gestioneWorkflowStatiAccordi){
  2087.                     try{
  2088.                         archiveAccordoServizioParteComune.getAccordoServizioParteComune().setStatoPackage(StatiAccordo.finale.toString());
  2089.                         this.importerEngine.validaStatoAccordoServizioParteComune(archiveAccordoServizioParteComune.getAccordoServizioParteComune(),utilizzoAzioniDiretteInAccordoAbilitato);
  2090.                     }catch(ValidazioneStatoPackageException validazioneException){
  2091.                         try{
  2092.                             archiveAccordoServizioParteComune.getAccordoServizioParteComune().setStatoPackage(StatiAccordo.operativo.toString());
  2093.                             this.importerEngine.validaStatoAccordoServizioParteComune(archiveAccordoServizioParteComune.getAccordoServizioParteComune(),utilizzoAzioniDiretteInAccordoAbilitato);
  2094.                         }catch(ValidazioneStatoPackageException validazioneExceptionLevelOperativo){
  2095.                             warningInfoStatoFinale.append("\n\t\t(WARNING) Accordo salvato con stato '").append(StatiAccordo.bozza.toString()).append("':\n\t\t\t");
  2096.                             warningInfoStatoFinale.append(validazioneException.toString("\n\t\t\t - ","\n\t\t\t - "));
  2097.                             warningInfoStatoFinale.append("\n\t\t\t"+validazioneExceptionLevelOperativo.toString("\n\t\t\t - ","\n\t\t\t - "));
  2098.                             archiveAccordoServizioParteComune.getAccordoServizioParteComune().setStatoPackage(StatiAccordo.bozza.toString());
  2099.                         }
  2100.                     }
  2101.                 }
  2102.                 else{
  2103.                     archiveAccordoServizioParteComune.getAccordoServizioParteComune().setStatoPackage(StatiAccordo.finale.toString());
  2104.                 }
  2105.             }
  2106.            
  2107.            
  2108.            
  2109.             // --- Aderenza WSDL ---
  2110.             StringBuilder warningAderenzaWSDL = new StringBuilder("");
  2111.             if(org.openspcoop2.core.registry.constants.ServiceBinding.SOAP.equals(archiveAccordoServizioParteComune.getAccordoServizioParteComune().getServiceBinding())) {
  2112.                 this.informazioniServizioAderentiWSDL(archiveAccordoServizioParteComune.getAccordoServizioParteComune(), warningAderenzaWSDL);
  2113.             }
  2114.            
  2115.            
  2116.            
  2117.             // --- ora registrazione
  2118.             archiveAccordoServizioParteComune.getAccordoServizioParteComune().setOraRegistrazione(DateManager.getDate());
  2119.            
  2120.            
  2121.            
  2122.             // --- upload ---
  2123.             if(this.importerEngine.existsAccordoServizioParteComune(idAccordoServizioParteComune)){
  2124.                
  2125.                 AccordoServizioParteComune old = this.importerEngine.getAccordoServizioParteComune(idAccordoServizioParteComune);
  2126.                 archiveAccordoServizioParteComune.getAccordoServizioParteComune().setId(old.getId());
  2127.                 archiveAccordoServizioParteComune.getAccordoServizioParteComune().setOldIDAccordoForUpdate(this.idAccordoFactory.getIDAccordoFromAccordo(old));
  2128.                
  2129.                 // visibilita' oggetto stesso per update
  2130.                 if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  2131.                     if(this.userLogin.equals(old.getSuperUser())==false){
  2132.                         throw new Exception("L'accordo non è visibile/aggiornabile dall'utente collegato ("+this.userLogin+")");
  2133.                     }
  2134.                 }

  2135.                 // update
  2136.                 this.importerEngine.updateAccordoServizioParteComune(archiveAccordoServizioParteComune.getAccordoServizioParteComune());
  2137.                 detail.setState(ArchiveStatoImport.UPDATED);
  2138.                 detail.setStateDetail(warningInfoStatoFinale.toString()+warningAderenzaWSDL.toString());
  2139.                    
  2140.             }
  2141.             // --- create ---
  2142.             else{
  2143.                 this.importerEngine.createAccordoServizioParteComune(archiveAccordoServizioParteComune.getAccordoServizioParteComune());
  2144.                 detail.setState(ArchiveStatoImport.CREATED);
  2145.                 detail.setStateDetail(warningInfoStatoFinale.toString()+warningAderenzaWSDL.toString());
  2146.             }
  2147.                

  2148.            
  2149.         }          
  2150.         catch(Exception e){
  2151.             this.log.error("Errore durante l'import dell'accordo di servizio parte comune ["+idAccordoServizioParteComune+"]: "+e.getMessage(),e);
  2152.             detail.setState(ArchiveStatoImport.ERROR);
  2153.             detail.setException(e);
  2154.         }
  2155.     }
  2156.    
  2157.    
  2158.     public void importAccordoServizioComposto(ArchiveAccordoServizioComposto archiveAccordoServizioComposto,
  2159.             boolean utilizzoAzioniDiretteInAccordoAbilitato,
  2160.             ArchiveEsitoImportDetail detail,
  2161.             Map<String, IDSoggetto> mapIdSoggettoDefault, Map<String, Boolean> mapAPIconReferente){
  2162.        
  2163.         IDAccordo idAccordoServizioComposto = archiveAccordoServizioComposto.getIdAccordoServizioParteComune();
  2164.         IDSoggetto idSoggettoReferente = archiveAccordoServizioComposto.getIdSoggettoReferente();
  2165.         IDAccordoCooperazione idAccordoCooperazione = archiveAccordoServizioComposto.getIdAccordoCooperazione();
  2166.         List<IDServizio> idServiziComponenti = archiveAccordoServizioComposto.getIdServiziComponenti();
  2167.         try{
  2168.             // --- fix soggetto referente --
  2169.             IProtocolFactory<?> protocolFactory = this.protocolFactoryManager.getProtocolFactoryByOrganizationType(idSoggettoReferente.getTipo());
  2170.             boolean APIconReferente = mapAPIconReferente.get(protocolFactory.getProtocol());
  2171.             if(!APIconReferente) {
  2172.                 IDSoggetto soggettoDefaultProtocollo = mapIdSoggettoDefault.get(protocolFactory.getProtocol());
  2173.                 if(!idSoggettoReferente.equals(soggettoDefaultProtocollo)) {
  2174.                     archiveAccordoServizioComposto.getAccordoServizioParteComune().getSoggettoReferente().setTipo(soggettoDefaultProtocollo.getTipo());
  2175.                     archiveAccordoServizioComposto.getAccordoServizioParteComune().getSoggettoReferente().setNome(soggettoDefaultProtocollo.getNome());
  2176.                     idSoggettoReferente.setTipo(soggettoDefaultProtocollo.getTipo());
  2177.                     idSoggettoReferente.setNome(soggettoDefaultProtocollo.getNome());
  2178.                     idAccordoServizioComposto.getSoggettoReferente().setTipo(soggettoDefaultProtocollo.getTipo());
  2179.                     idAccordoServizioComposto.getSoggettoReferente().setNome(soggettoDefaultProtocollo.getNome());
  2180.                 }
  2181.                 if(CostantiLabel.MODIPA_PROTOCOL_NAME.equals(protocolFactory.getProtocol())) {
  2182.                     modifyUriAccordoCorrelato(archiveAccordoServizioComposto.getAccordoServizioParteComune(), soggettoDefaultProtocollo);
  2183.                 }
  2184.             }
  2185.            
  2186.             // --- check esistenza ---
  2187.             if(this.updateAbilitato==false){
  2188.                 if(this.importerEngine.existsAccordoServizioParteComune(idAccordoServizioComposto)){
  2189.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  2190.                     return;
  2191.                 }
  2192.             }
  2193.            
  2194.                
  2195.            
  2196.             // --- check elementi riferiti ---
  2197.            
  2198.             // soggetto referente
  2199.             if(APIconReferente) {
  2200.                 if(this.importerEngine.existsSoggettoRegistro(idSoggettoReferente) == false ){
  2201.                     throw new Exception("Soggetto proprietario ["+idSoggettoReferente+"] non esistente");
  2202.                 }
  2203.             }
  2204.            
  2205.             // accordo cooperazione
  2206.             if(this.importerEngine.existsAccordoCooperazione(idAccordoCooperazione) == false){
  2207.                 throw new Exception("Accordo di Cooperazione ["+idAccordoCooperazione+"] riferito non esistente");
  2208.             }
  2209.            
  2210.             // servizi componenti
  2211.             for (IDServizio idServizioComponente : idServiziComponenti) {
  2212.                 if(this.importerEngine.existsAccordoServizioParteSpecifica(idServizioComponente)==false){
  2213.                     throw new Exception("ServizioComponente ["+idServizioComponente+"] riferito non esistente");
  2214.                 }
  2215.             }
  2216.            
  2217.            
  2218.             // --- compatibilita' elementi riferiti ---
  2219.             String protocolloAssociatoAccordo = this.protocolFactoryManager.getProtocolByOrganizationType(idSoggettoReferente.getTipo());
  2220.             // accordo cooperazione
  2221.             AccordoCooperazione ac = this.importerEngine.getAccordoCooperazione(idAccordoCooperazione);
  2222.             String protocolloAssociatoAccordoCooperazione =
  2223.                     this.protocolFactoryManager.getProtocolByOrganizationType(ac.getSoggettoReferente().getTipo());
  2224.             if(protocolloAssociatoAccordo.equals(protocolloAssociatoAccordoCooperazione)==false){
  2225.                 throw new Exception("Soggetto referente ("+ac.getSoggettoReferente().getTipo()+"/"+ac.getSoggettoReferente().getNome()+
  2226.                         ") dell'accordo di cooperazione ["+idAccordoCooperazione+"] (protocollo:"+protocolloAssociatoAccordoCooperazione+
  2227.                         ") non utilizzabile in un accordo con soggetto referente ["+idSoggettoReferente+"] (protocollo:"+protocolloAssociatoAccordo+")");
  2228.             }
  2229.             // servizi componenti
  2230.             for (IDServizio idServizioComponente : idServiziComponenti) {
  2231.                 String protocolloAssociatoServizioComponente = this.protocolFactoryManager.getProtocolByServiceType(idServizioComponente.getTipo());
  2232.                 if(protocolloAssociatoAccordo.equals(protocolloAssociatoServizioComponente)==false){
  2233.                     throw new Exception("ServizioComponente ["+idServizioComponente+"] (protocollo:"+protocolloAssociatoServizioComponente+
  2234.                             ") non utilizzabile in un accordo con soggetto referente ["+idSoggettoReferente+"] (protocollo:"+protocolloAssociatoAccordo+")");
  2235.                 }
  2236.                 String protocolloAssociatoSoggettoServizioComponente = this.protocolFactoryManager.getProtocolByOrganizationType(idServizioComponente.getSoggettoErogatore().getTipo());
  2237.                 if(protocolloAssociatoAccordo.equals(protocolloAssociatoSoggettoServizioComponente)==false){
  2238.                     throw new Exception("ServizioComponente ["+idServizioComponente+"] (protocollo:"+protocolloAssociatoSoggettoServizioComponente+
  2239.                             ") non utilizzabile in un accordo con soggetto referente ["+idSoggettoReferente+"] (protocollo:"+protocolloAssociatoAccordo+")");
  2240.                 }
  2241.             }
  2242.            

  2243.             // ---- visibilita' oggetto riferiti ---
  2244.             // soggetto referente
  2245.             if(APIconReferente) {
  2246.                 org.openspcoop2.core.registry.Soggetto soggetto = this.importerEngine.getSoggettoRegistro(idSoggettoReferente);
  2247.                 if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  2248.                     if(this.userLogin.equals(soggetto.getSuperUser())==false){
  2249.                         throw new Exception("Il soggetto referente ["+idSoggettoReferente+"] non è visibile/utilizzabile dall'utente collegato ("+this.userLogin+")");
  2250.                     }
  2251.                 }
  2252.             }
  2253.             // accordo cooperazione
  2254.             org.openspcoop2.core.registry.AccordoCooperazione accordoCooperazione = this.importerEngine.getAccordoCooperazione(idAccordoCooperazione);
  2255.             if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  2256.                 if(this.userLogin.equals(accordoCooperazione.getSuperUser())==false){
  2257.                     throw new Exception("L'accordo di cooperazione ["+idAccordoCooperazione+"] non è visibile/utilizzabile dall'utente collegato ("+this.userLogin+")");
  2258.                 }
  2259.             }
  2260.             // servizi componenti
  2261.             Map<String, AccordoServizioParteSpecifica> serviziComponenti = new HashMap<String, AccordoServizioParteSpecifica>();
  2262.             for (IDServizio idServizioComponente : idServiziComponenti) {
  2263.                
  2264.                 AccordoServizioParteSpecifica asps = this.importerEngine.getAccordoServizioParteSpecifica(idServizioComponente);
  2265.                 serviziComponenti.put(idServizioComponente.toString(), asps);
  2266.                
  2267.                 if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  2268.                    
  2269.                     if(this.userLogin.equals(asps.getSuperUser())==false){
  2270.                         throw new Exception("Il servizio componente ["+idServizioComponente+"] non è visibile/utilizzabile dall'utente collegato ("+this.userLogin+").");
  2271.                     }
  2272.                    
  2273.                     // soggetto
  2274.                     Soggetto soggettoErogatoreServizioComponente =
  2275.                         this.importerEngine.getSoggettoRegistro(new IDSoggetto(idServizioComponente.getSoggettoErogatore().getTipo(),
  2276.                                 idServizioComponente.getSoggettoErogatore().getNome()));
  2277.                     if(this.userLogin.equals(soggettoErogatoreServizioComponente.getSuperUser())==false){
  2278.                         throw new Exception("Il servizio componente ["+idServizioComponente+"] (il soggetto erogatore in particolar modo) non è visibile/utilizzabile dall'utente collegato ("+this.userLogin+").");
  2279.                     }
  2280.                 }
  2281.             }

  2282.                    
  2283.             // --- set dati obbligatori nel db ----

  2284.             org.openspcoop2.core.registry.driver.utils.XMLDataConverter.
  2285.                 impostaInformazioniRegistroDB_AccordoServizioParteComune(archiveAccordoServizioComposto.getAccordoServizioParteComune());
  2286.            
  2287.             archiveAccordoServizioComposto.getAccordoServizioParteComune().setSuperUser(this.userLogin);
  2288.            
  2289.             for(int i=0; i<archiveAccordoServizioComposto.getAccordoServizioParteComune().sizeAllegatoList();i++){
  2290.                 archiveAccordoServizioComposto.getAccordoServizioParteComune().getAllegato(i).setRuolo(RuoliDocumento.allegato.toString());
  2291.                 archiveAccordoServizioComposto.getAccordoServizioParteComune().getAllegato(i).setTipoProprietarioDocumento(ProprietariDocumento.accordoServizio.toString());
  2292.             }
  2293.             for(int i=0; i<archiveAccordoServizioComposto.getAccordoServizioParteComune().sizeSpecificaSemiformaleList();i++){
  2294.                 archiveAccordoServizioComposto.getAccordoServizioParteComune().getSpecificaSemiformale(i).setRuolo(RuoliDocumento.specificaSemiformale.toString());
  2295.                 archiveAccordoServizioComposto.getAccordoServizioParteComune().getSpecificaSemiformale(i).setTipoProprietarioDocumento(ProprietariDocumento.accordoServizio.toString());
  2296.             }
  2297.             for(int i=0; i<archiveAccordoServizioComposto.getAccordoServizioParteComune().getServizioComposto().sizeSpecificaCoordinamentoList();i++){
  2298.                 archiveAccordoServizioComposto.getAccordoServizioParteComune().getSpecificaSemiformale(i).setRuolo(RuoliDocumento.specificaCoordinamento.toString());
  2299.                 archiveAccordoServizioComposto.getAccordoServizioParteComune().getSpecificaSemiformale(i).setTipoProprietarioDocumento(ProprietariDocumento.accordoServizio.toString());
  2300.             }

  2301.             archiveAccordoServizioComposto.getAccordoServizioParteComune().getServizioComposto().
  2302.                 setIdAccordoCooperazione(accordoCooperazione.getId());
  2303.            
  2304.             for(int i=0; i<archiveAccordoServizioComposto.getAccordoServizioParteComune().getServizioComposto().sizeServizioComponenteList();i++){
  2305.                 AccordoServizioParteComuneServizioCompostoServizioComponente componente =
  2306.                         archiveAccordoServizioComposto.getAccordoServizioParteComune().getServizioComposto().getServizioComponente(i);
  2307.                 IDServizio idServizioComponente = IDServizioFactory.getInstance().getIDServizioFromValues(componente.getTipo(), componente.getNome(),
  2308.                         componente.getTipoSoggetto(), componente.getNomeSoggetto(),
  2309.                         componente.getVersione());
  2310.                 idServizioComponente.setAzione(componente.getAzione());
  2311.                 AccordoServizioParteSpecifica asps = serviziComponenti.get(idServizioComponente.toString());
  2312.                 if(asps==null){
  2313.                     StringBuilder bfException = new StringBuilder();
  2314.                     for (String idS : serviziComponenti.keySet()) {
  2315.                         if(bfException.length()>0){
  2316.                             bfException.append(",");
  2317.                         }
  2318.                         bfException.append(idS);
  2319.                     }
  2320.                     throw new Exception("ServizioComponente ["+idServizioComponente+"] riferito non esistente?? Dovrebbe essere stato recuperato? ListaKeys: "+
  2321.                             bfException.toString());
  2322.                 }
  2323.                 componente.setIdServizioComponente(asps.getId());
  2324.             }
  2325.                
  2326.            
  2327.             // --- workflowStatoDocumenti ---
  2328.             StringBuilder warningInfoStatoFinale = new StringBuilder("");
  2329.             if(archiveAccordoServizioComposto.getAccordoServizioParteComune().getStatoPackage()==null){
  2330.                 if(this.gestioneWorkflowStatiAccordi){
  2331.                     try{
  2332.                         archiveAccordoServizioComposto.getAccordoServizioParteComune().setStatoPackage(StatiAccordo.finale.toString());
  2333.                         this.importerEngine.validaStatoAccordoServizioParteComune(archiveAccordoServizioComposto.getAccordoServizioParteComune(),utilizzoAzioniDiretteInAccordoAbilitato);
  2334.                     }catch(ValidazioneStatoPackageException validazioneException){
  2335.                         try{
  2336.                             archiveAccordoServizioComposto.getAccordoServizioParteComune().setStatoPackage(StatiAccordo.operativo.toString());
  2337.                             this.importerEngine.validaStatoAccordoServizioParteComune(archiveAccordoServizioComposto.getAccordoServizioParteComune(),utilizzoAzioniDiretteInAccordoAbilitato);
  2338.                         }catch(ValidazioneStatoPackageException validazioneExceptionLevelOperativo){
  2339.                             warningInfoStatoFinale.append("\n\t\t(WARNING) Accordo salvato con stato '").append(StatiAccordo.bozza.toString()).append("':\n\t\t\t");
  2340.                             warningInfoStatoFinale.append(validazioneException.toString("\n\t\t\t - ","\n\t\t\t - "));
  2341.                             warningInfoStatoFinale.append("\n\t\t\t"+validazioneExceptionLevelOperativo.toString("\n\t\t\t - ","\n\t\t\t - "));
  2342.                             archiveAccordoServizioComposto.getAccordoServizioParteComune().setStatoPackage(StatiAccordo.bozza.toString());
  2343.                         }
  2344.                     }
  2345.                 }
  2346.                 else{
  2347.                     archiveAccordoServizioComposto.getAccordoServizioParteComune().setStatoPackage(StatiAccordo.finale.toString());
  2348.                 }
  2349.             }
  2350.            
  2351.            
  2352.            
  2353.             // --- Aderenza WSDL ---
  2354.             StringBuilder warningAderenzaWSDL = new StringBuilder("");
  2355.             if(org.openspcoop2.core.registry.constants.ServiceBinding.SOAP.equals(archiveAccordoServizioComposto.getAccordoServizioParteComune().getServiceBinding())) {
  2356.                 this.informazioniServizioAderentiWSDL(archiveAccordoServizioComposto.getAccordoServizioParteComune(), warningAderenzaWSDL);
  2357.             }
  2358.            
  2359.            
  2360.            
  2361.             // --- ora registrazione
  2362.             archiveAccordoServizioComposto.getAccordoServizioParteComune().setOraRegistrazione(DateManager.getDate());
  2363.            
  2364.            
  2365.            
  2366.             // --- upload ---
  2367.             if(this.importerEngine.existsAccordoServizioParteComune(idAccordoServizioComposto)){
  2368.                
  2369.                 AccordoServizioParteComune old = this.importerEngine.getAccordoServizioParteComune(idAccordoServizioComposto);
  2370.                 archiveAccordoServizioComposto.getAccordoServizioParteComune().setId(old.getId());
  2371.                 archiveAccordoServizioComposto.getAccordoServizioParteComune().setOldIDAccordoForUpdate(this.idAccordoFactory.getIDAccordoFromAccordo(old));
  2372.                
  2373.                 // visibilita' oggetto stesso per update
  2374.                 if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  2375.                     if(this.userLogin.equals(old.getSuperUser())==false){
  2376.                         throw new Exception("L'accordo non è visibile/aggiornabile dall'utente collegato ("+this.userLogin+")");
  2377.                     }
  2378.                 }

  2379.                 // update
  2380.                 this.importerEngine.updateAccordoServizioParteComune(archiveAccordoServizioComposto.getAccordoServizioParteComune());
  2381.                 detail.setState(ArchiveStatoImport.UPDATED);
  2382.                 detail.setStateDetail(warningInfoStatoFinale.toString()+warningAderenzaWSDL.toString());
  2383.                    
  2384.             }
  2385.             // --- create ---
  2386.             else{
  2387.                 this.importerEngine.createAccordoServizioParteComune(archiveAccordoServizioComposto.getAccordoServizioParteComune());
  2388.                 detail.setState(ArchiveStatoImport.CREATED);
  2389.                 detail.setStateDetail(warningInfoStatoFinale.toString()+warningAderenzaWSDL.toString());
  2390.             }
  2391.                

  2392.            
  2393.         }          
  2394.         catch(Exception e){
  2395.             this.log.error("Errore durante l'import dell'accordo di servizio parte comune ["+idAccordoServizioComposto+"]: "+e.getMessage(),e);
  2396.             detail.setState(ArchiveStatoImport.ERROR);
  2397.             detail.setException(e);
  2398.         }
  2399.     }
  2400.    
  2401.    
  2402.     private void informazioniServizioAderentiWSDL(AccordoServizioParteComune accordoServizioParteComune,StringBuilder anomalieRiscontrate) throws Exception{
  2403.        
  2404.         try{
  2405.        
  2406.             String indent = "\t\t";
  2407.            
  2408.             // lettura WSDL Concettuale
  2409.             StringBuilder strutturaWSDL = new StringBuilder("Struttura WSDL:\n");
  2410.             //strutturaWSDL.append(indent+"=========================================\n");
  2411.             byte[]wsdl = accordoServizioParteComune.getByteWsdlConcettuale();
  2412.             if(wsdl==null){
  2413.                 throw new Exception("WSDLConcettuale non fornito");
  2414.             }
  2415.             OpenSPCoop2MessageFactory defaultFactory = OpenSPCoop2MessageFactory.getDefaultMessageFactory();
  2416.             RegistroOpenSPCoopUtilities wsdlUtility = new RegistroOpenSPCoopUtilities(defaultFactory, this.log);
  2417.             wsdl=wsdlUtility.eliminaImportASParteComune(wsdl);
  2418.             DefinitionWrapper wsdlObject = new DefinitionWrapper(wsdl,MessageXMLUtils.getInstance(defaultFactory));
  2419.             Map<String, List<String>> mapPortTypeOperations = new HashMap<>();
  2420.             java.util.Map<?,?> pts = wsdlObject.getAllPortTypes();
  2421.             if(pts==null || pts.size()<=0){
  2422.                 this.log.warn("Non sono stati definiti port types nel wsdl concettuale");
  2423.             }else{
  2424.                 java.util.Iterator<?> ptsIterator = pts.values().iterator();
  2425.                 java.util.ArrayList<String> listPortTypesName = new ArrayList<>();
  2426.                 while(ptsIterator.hasNext()) {
  2427.                     javax.wsdl.PortType pt = (javax.wsdl.PortType) ptsIterator.next();
  2428.                     String ptName = pt.getQName().getLocalPart();
  2429.                     listPortTypesName.add(ptName);
  2430.                     java.util.List<?> ops = pt.getOperations();
  2431.                     java.util.Iterator<?> opIt = ops.iterator();
  2432.                     java.util.ArrayList<String> listOperationName = new ArrayList<>();
  2433.                     while(opIt.hasNext()){
  2434.                         javax.wsdl.Operation op = (javax.wsdl.Operation) opIt.next();
  2435.                         String nomeOperazione = op.getName();
  2436.                         listOperationName.add(nomeOperazione);
  2437.                     }
  2438.                     java.util.Collections.sort(listOperationName);
  2439.                     mapPortTypeOperations.put(ptName, listOperationName);
  2440.                 }
  2441.                
  2442.                 java.util.Collections.sort(listPortTypesName);
  2443.                 for (String ptName : listPortTypesName) {
  2444.                     strutturaWSDL.append(indent+". "+ptName+"\n");
  2445.                     List<String> opList = mapPortTypeOperations.get(ptName);
  2446.                     for (String opName : opList) {
  2447.                         strutturaWSDL.append(indent+"\t- "+opName+"\n");
  2448.                     }
  2449.                 }
  2450.             }
  2451.            
  2452.             // Accordo di Servizio registrato
  2453.             StringBuilder strutturaAccordoOpenSPCoop = new StringBuilder("Servizi/Azioni associati all'accordo:\n");
  2454.             //strutturaAccordoOpenSPCoop.append(indent+"=========================================\n");
  2455.             java.util.ArrayList<String> listPortTypesName = new ArrayList<>();
  2456.             Map<String, PortType> mapPtNameToObject = new HashMap<String, PortType>();
  2457.             for(int i=0;i<accordoServizioParteComune.sizePortTypeList();i++){
  2458.                 PortType ptOpenSPCoop = accordoServizioParteComune.getPortType(i);
  2459.                 listPortTypesName.add(ptOpenSPCoop.getNome());
  2460.                 mapPtNameToObject.put(ptOpenSPCoop.getNome(), ptOpenSPCoop);
  2461.             }
  2462.             java.util.Collections.sort(listPortTypesName);
  2463.             for (String ptName : listPortTypesName) {
  2464.                 PortType ptOpenSPCoop = mapPtNameToObject.get(ptName);
  2465.                 strutturaAccordoOpenSPCoop.append(indent+". "+ptOpenSPCoop.getNome()+"\n");
  2466.                 java.util.ArrayList<String> listOperationName = new ArrayList<>();
  2467.                 for(int j=0;j<ptOpenSPCoop.sizeAzioneList();j++){
  2468.                     Operation opOpenSPCoop = ptOpenSPCoop.getAzione(j);
  2469.                     listOperationName.add(opOpenSPCoop.getNome());
  2470.                 }
  2471.                 java.util.Collections.sort(listOperationName);
  2472.                 for (String opName : listOperationName) {
  2473.                     strutturaAccordoOpenSPCoop.append(indent+"\t- "+opName+"\n");
  2474.                 }
  2475.             }
  2476.        
  2477.            
  2478.            
  2479.            
  2480.             // Verifica su PT dell'accordo
  2481.             boolean aderenzaWSDL = true;
  2482.             for(int i=0;i<accordoServizioParteComune.sizePortTypeList();i++){
  2483.                 PortType ptOpenSPCoop = accordoServizioParteComune.getPortType(i);
  2484.                 if(mapPortTypeOperations.containsKey(ptOpenSPCoop.getNome())){
  2485.                     List<String> opWSDL = mapPortTypeOperations.remove(ptOpenSPCoop.getNome());
  2486.                     for(int j=0;j<ptOpenSPCoop.sizeAzioneList();j++){
  2487.                         Operation opOpenSPCoop = ptOpenSPCoop.getAzione(j);
  2488.                         if(opWSDL.contains(opOpenSPCoop.getNome())){
  2489.                             opWSDL.remove(opOpenSPCoop.getNome());
  2490.                         }else{
  2491.                             aderenzaWSDL = false;
  2492.                             break;
  2493.                         }
  2494.                     }
  2495.                     if(opWSDL.size()>0){
  2496.                         aderenzaWSDL = false;
  2497.                         break;
  2498.                     }
  2499.                 }else{
  2500.                     aderenzaWSDL = false;
  2501.                     break;
  2502.                 }
  2503.             }
  2504.             if(aderenzaWSDL){
  2505.                 if(mapPortTypeOperations.size()>0){
  2506.                     aderenzaWSDL = false;
  2507.                 }
  2508.             }
  2509.            
  2510.             if(aderenzaWSDL==false){
  2511.                 anomalieRiscontrate.append("\n"+indent+"(WARNING) accordo importato contiene una struttura (servizi e azioni) non aderente all'interfaccia WSDL");
  2512.                 anomalieRiscontrate.append("\n"+indent+"Alcuni servizi o alcune azioni associate all'accordo importato");
  2513.                 anomalieRiscontrate.append("\n"+indent+"non corrispondono ai port types e alle operations definite");
  2514.                 anomalieRiscontrate.append("\n"+indent);
  2515.                 anomalieRiscontrate.append(strutturaWSDL);
  2516.                 anomalieRiscontrate.append(indent);
  2517.                 anomalieRiscontrate.append(strutturaAccordoOpenSPCoop);
  2518.             }
  2519.             //return aderenzaWSDL;
  2520.            
  2521.         }catch(Exception e){
  2522.             // Non devo segnalare nulla. Comunque se c'e' abilitata la validazione otterro' un errore senza importare l'archivio.
  2523.             // se invece e' stato indicato di non effettuare la validazione e' corretto che venga importato comunque l'archivio.
  2524.             // senza che vi sia per forza un wsdl corretto.
  2525.             this.log.debug("Check informazioniServizioAderentiWSDL non riuscito: "+e.getMessage());
  2526.         }
  2527.        
  2528.         return;
  2529.     }
  2530.    
  2531.    
  2532.    
  2533.    
  2534.    
  2535.    
  2536.    
  2537.    
  2538.     public void importAccordoServizioParteSpecifica(ArchiveAccordoServizioParteSpecifica archiveAccordoServizioParteSpecifica,
  2539.             boolean servizioComposto,
  2540.             boolean isAbilitatoControlloUnicitaImplementazioneAccordoPerSoggetto,
  2541.             boolean isAbilitatoControlloUnicitaImplementazionePortTypePerSoggetto,
  2542.             ArchiveEsitoImportDetail detail,
  2543.             List<MappingErogazionePortaApplicativa> listMappingErogazionePA,
  2544.             Map<String, IDSoggetto> mapIdSoggettoDefault, Map<String, Boolean> mapAPIconReferente){
  2545.        
  2546.         IDAccordo idAccordoServizioParteComune = archiveAccordoServizioParteSpecifica.getIdAccordoServizioParteComune();
  2547.         IDServizio idAccordoServizioParteSpecifica = archiveAccordoServizioParteSpecifica.getIdAccordoServizioParteSpecifica();
  2548.         IDSoggetto idSoggettoErogatore = archiveAccordoServizioParteSpecifica.getIdSoggettoErogatore();
  2549.         String labelAccordoParteComune = "Accordo di Servizio Parte Comune";
  2550.         if(servizioComposto){
  2551.             labelAccordoParteComune = "Accordo di Servizio Composto";
  2552.         }
  2553.         try{
  2554.             // --- check esistenza ---
  2555.             if(this.updateAbilitato==false){
  2556.                 if(this.importerEngine.existsAccordoServizioParteSpecifica(idAccordoServizioParteSpecifica)){
  2557.                    
  2558.                     List<IDPortaApplicativa> idPACheck = this.importerEngine.getIDPorteApplicativeAssociateErogazione(idAccordoServizioParteSpecifica);
  2559.                     // gestione portaApplicativaAssociata
  2560.                     if(archiveAccordoServizioParteSpecifica.getMappingPorteApplicativeAssociate()!=null &&
  2561.                             archiveAccordoServizioParteSpecifica.getMappingPorteApplicativeAssociate().size()>0){
  2562.                         for (MappingErogazionePortaApplicativa mappingPortaApplicativaAssociata : archiveAccordoServizioParteSpecifica.getMappingPorteApplicativeAssociate()) {
  2563.                             if(idPACheck==null || idPACheck.size()<=0 || (idPACheck.contains(mappingPortaApplicativaAssociata.getIdPortaApplicativa())==false)){
  2564.                                 listMappingErogazionePA.add(mappingPortaApplicativaAssociata);
  2565.                             }  
  2566.                         }
  2567.                     }
  2568.                    
  2569.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  2570.                     return;
  2571.                 }
  2572.             }
  2573.            
  2574.                
  2575.             // --- check elementi riferiti ---
  2576.            
  2577.             // soggetto erogatore
  2578.             if(this.importerEngine.existsSoggettoRegistro(idSoggettoErogatore) == false ){
  2579.                 throw new Exception("Soggetto erogatore ["+idSoggettoErogatore+"] non esistente");
  2580.             }
  2581.            
  2582.             // accordo di servizio parte comune
  2583.             IProtocolFactory<?> protocolFactory = this.protocolFactoryManager.getProtocolFactoryByOrganizationType(idSoggettoErogatore.getTipo());
  2584.             boolean APIconReferente = mapAPIconReferente.get(protocolFactory.getProtocol());
  2585.             if(!APIconReferente) {
  2586.                 // Lascio il codice, ma lo switch viene effettuato prima durante la divisione asps che implementano accordi di servizio parte comune e composti
  2587.                 IDSoggetto soggettoDefaultProtocollo = mapIdSoggettoDefault.get(protocolFactory.getProtocol());
  2588.                 if(!idAccordoServizioParteComune.getSoggettoReferente().equals(soggettoDefaultProtocollo)) {
  2589.                     idAccordoServizioParteComune.getSoggettoReferente().setTipo(soggettoDefaultProtocollo.getTipo());
  2590.                     idAccordoServizioParteComune.getSoggettoReferente().setNome(soggettoDefaultProtocollo.getNome());
  2591.                     archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().setAccordoServizioParteComune(this.idAccordoFactory.getUriFromIDAccordo(idAccordoServizioParteComune));
  2592.                 }
  2593.             }
  2594.             if(this.importerEngine.existsAccordoServizioParteComune(idAccordoServizioParteComune) == false ){
  2595.                 throw new Exception(labelAccordoParteComune+" ["+idAccordoServizioParteComune+"] non esistente");
  2596.             }
  2597.            
  2598.             // controlli interni accordo
  2599.             org.openspcoop2.core.registry.Soggetto soggetto = this.importerEngine.getSoggettoRegistro(idSoggettoErogatore);
  2600.             AccordoServizioParteComune accordoServizioParteComune = this.importerEngine.getAccordoServizioParteComune(idAccordoServizioParteComune);
  2601.             AccordoServizioParteSpecifica old = null;
  2602.             long idAccordoServizioParteSpecificaLong = -1;
  2603.             boolean isUpdate = false;
  2604.             boolean servizioCorrelato =
  2605.                     TipologiaServizio.CORRELATO.
  2606.                         equals(archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getTipologiaServizio());
  2607.             if(this.importerEngine.existsAccordoServizioParteSpecifica(idAccordoServizioParteSpecifica)){
  2608.                 old = this.importerEngine.getAccordoServizioParteSpecifica(idAccordoServizioParteSpecifica);
  2609.                 idAccordoServizioParteSpecificaLong = old.getId();
  2610.                 isUpdate = true;
  2611.             }
  2612.             // uri
  2613.             String uriAccordo = null;
  2614.             try{
  2615.                 uriAccordo = IDServizioFactory.getInstance().getUriFromIDServizio(idAccordoServizioParteSpecifica);
  2616.             }catch(Exception e){
  2617.                 uriAccordo = idAccordoServizioParteSpecifica.toString(false);
  2618.             }
  2619.             // exists other service che implementa lo stesso accordo di servizio parte comune
  2620.             this.importerEngine.controlloUnicitaImplementazioneAccordoPerSoggetto(archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getPortType(),
  2621.                     idSoggettoErogatore, soggetto.getId(),
  2622.                     idAccordoServizioParteComune, accordoServizioParteComune.getId(),
  2623.                     idAccordoServizioParteSpecifica, idAccordoServizioParteSpecificaLong,
  2624.                     isUpdate, servizioCorrelato,
  2625.                     isAbilitatoControlloUnicitaImplementazioneAccordoPerSoggetto,
  2626.                     isAbilitatoControlloUnicitaImplementazionePortTypePerSoggetto);
  2627.             // exists other service with same tipo/nome e tipo/nome soggetto erogatore
  2628.             if(this.importerEngine.existsAccordoServizioParteSpecifica(idAccordoServizioParteSpecifica)){
  2629.                 if(!isUpdate){
  2630.                     AccordoServizioParteSpecifica aspsCheck = this.importerEngine.getAccordoServizioParteSpecifica(idAccordoServizioParteSpecifica);
  2631.                     throw new Exception("Servizio ["+uriAccordo+"] già esistente definito all'interno dell'accordo di servizio parte specifica ["+IDServizioFactory.getInstance().getUriFromAccordo(aspsCheck)+"]");
  2632.                 }
  2633.                 else{
  2634.                     // change
  2635.                     AccordoServizioParteSpecifica aspsCheck = this.importerEngine.getAccordoServizioParteSpecifica(idAccordoServizioParteSpecifica);
  2636.                     IDServizio idAccordoASPSCheck = IDServizioFactory.getInstance().getIDServizioFromAccordo(aspsCheck);
  2637.                     if(idAccordoASPSCheck.equals(idAccordoServizioParteSpecifica)==false){
  2638.                         throw new Exception("Servizio ["+uriAccordo+"] già esistente definito all'interno dell'accordo di servizio parte specifica ["+IDServizioFactory.getInstance().getUriFromAccordo(aspsCheck)+"]");
  2639.                     }
  2640.                 }
  2641.             }
  2642.            
  2643.             // token negoziazione
  2644.             if(archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica()!=null && archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getConfigurazioneServizio()!=null) {
  2645.                 if(archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getConfigurazioneServizio().getConnettore()!=null &&
  2646.                         archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getConfigurazioneServizio().getConnettore().getProperties()!=null &&
  2647.                         archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getConfigurazioneServizio().getConnettore().getProperties().containsKey(CostantiConnettori.CONNETTORE_TOKEN_POLICY)) {
  2648.                     String policy = archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getConfigurazioneServizio().getConnettore().getProperties().get(CostantiConnettori.CONNETTORE_TOKEN_POLICY);
  2649.                     if(this.importerEngine.existsGenericProperties_retrieve(policy) == false) {
  2650.                         throw new Exception("Token Policy Negoziazione ["+policy+"] indicato nel connettore non esistente");
  2651.                     }
  2652.                 }
  2653.                 if(archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getConfigurazioneServizio().sizeConfigurazioneAzioneList()>0) {
  2654.                     for (ConfigurazioneServizioAzione confAzione : archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getConfigurazioneServizio().getConfigurazioneAzioneList()) {
  2655.                         if(confAzione.getConnettore()!=null &&
  2656.                                 confAzione.getConnettore().getProperties()!=null && confAzione.getConnettore().getProperties().containsKey(CostantiConnettori.CONNETTORE_TOKEN_POLICY)) {
  2657.                             String policy = confAzione.getConnettore().getProperties().get(CostantiConnettori.CONNETTORE_TOKEN_POLICY);
  2658.                             if(this.importerEngine.existsGenericProperties_retrieve(policy) == false) {
  2659.                                 throw new Exception("Token Policy Negoziazione ["+policy+"] indicato nel connettore non esistente");
  2660.                             }
  2661.                         }
  2662.                     }
  2663.                 }
  2664.             }
  2665.            
  2666.             // plugin
  2667.             if(this.checkExistsPluginConfigurazione) {
  2668.                 if(archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getConfigurazioneServizio().getConnettore()!=null&&
  2669.                         archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getConfigurazioneServizio().getConnettore().getCustom()!=null &&
  2670.                         archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getConfigurazioneServizio().getConnettore().getCustom() &&
  2671.                         archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getConfigurazioneServizio().getConnettore().getTipo()!=null) {
  2672.                     TipiConnettore tipo = TipiConnettore.toEnumFromName(archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getConfigurazioneServizio().getConnettore().getTipo());
  2673.                     if(tipo==null) {
  2674.                         if(this.importerEngine.existsPluginClasse(TipoPlugin.CONNETTORE.getValue(), archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getConfigurazioneServizio().getConnettore().getTipo()) == false ){
  2675.                             throw new Exception("Plugin '"+TipoPlugin.CONNETTORE.getValue()+"' ["+archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getConfigurazioneServizio().getConnettore().getTipo()+"] non esistente nel registro");
  2676.                         }
  2677.                     }
  2678.                 }
  2679.                 if(archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getConfigurazioneServizio().sizeConfigurazioneAzioneList()>0) {
  2680.                     for (ConfigurazioneServizioAzione confAzione : archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getConfigurazioneServizio().getConfigurazioneAzioneList()) {
  2681.                         if(confAzione.getConnettore()!=null &&
  2682.                                 confAzione.getConnettore().getCustom()!=null &&
  2683.                                 confAzione.getConnettore().getCustom() &&
  2684.                                 confAzione.getConnettore().getTipo()!=null) {
  2685.                             TipiConnettore tipo = TipiConnettore.toEnumFromName(confAzione.getConnettore().getTipo());
  2686.                             if(tipo==null) {
  2687.                                 if(this.importerEngine.existsPluginClasse(TipoPlugin.CONNETTORE.getValue(), confAzione.getConnettore().getTipo()) == false ){
  2688.                                     throw new Exception("Plugin '"+TipoPlugin.CONNETTORE.getValue()+"' ["+confAzione.getConnettore().getTipo()+"] non esistente nel registro");
  2689.                                 }
  2690.                             }
  2691.                         }
  2692.                     }
  2693.                 }
  2694.             }
  2695.            
  2696.            
  2697.            
  2698.             // --- compatibilita' elementi riferiti ---
  2699.             String protocolloAssociatoAccordo = this.protocolFactoryManager.getProtocolByOrganizationType(idSoggettoErogatore.getTipo());
  2700.             // accordo di servizio parte comune
  2701.             String protocolloAssociatoAccordoParteComune = this.protocolFactoryManager.getProtocolByOrganizationType(idAccordoServizioParteComune.getSoggettoReferente().getTipo());
  2702.             if(protocolloAssociatoAccordo.equals(protocolloAssociatoAccordoParteComune)==false){
  2703.                 throw new Exception("AccordoServizioParteComune ["+idAccordoServizioParteComune+"] (protocollo:"+protocolloAssociatoAccordoParteComune+
  2704.                         ") non utilizzabile in un accordo con soggetto erogatore ["+idSoggettoErogatore+"] (protocollo:"+protocolloAssociatoAccordo+")");
  2705.             }
  2706.                
  2707.            
  2708.             // ---- visibilita' oggetto riferiti ---
  2709.             // soggetto erogatore
  2710.             if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  2711.                 if(this.userLogin.equals(soggetto.getSuperUser())==false){
  2712.                     throw new Exception("Il soggetto erogatore ["+idSoggettoErogatore+"] non è visibile/utilizzabile dall'utente collegato ("+this.userLogin+")");
  2713.                 }
  2714.             }
  2715.             // accordo di servizio parte comune
  2716.             if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  2717.                 if(this.userLogin.equals(accordoServizioParteComune.getSuperUser())==false){
  2718.                     throw new Exception("L'accordo di servizio parte comune ["+idAccordoServizioParteComune+"] non è visibile/utilizzabile dall'utente collegato ("+this.userLogin+")");
  2719.                 }
  2720.             }
  2721.            
  2722.            
  2723.             // --- set dati obbligatori nel db ----

  2724.             org.openspcoop2.core.registry.driver.utils.XMLDataConverter.
  2725.                 impostaInformazioniRegistroDB_AccordoServizioParteSpecifica(archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica());
  2726.            
  2727.             archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().setSuperUser(this.userLogin);
  2728.            
  2729.             for(int i=0; i<archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().sizeAllegatoList();i++){
  2730.                 archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getAllegato(i).setRuolo(RuoliDocumento.allegato.toString());
  2731.                 archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getAllegato(i).setTipoProprietarioDocumento(ProprietariDocumento.servizio.toString());
  2732.             }
  2733.             for(int i=0; i<archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().sizeSpecificaSemiformaleList();i++){
  2734.                 archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getSpecificaSemiformale(i).setRuolo(RuoliDocumento.specificaSemiformale.toString());
  2735.                 archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getSpecificaSemiformale(i).setTipoProprietarioDocumento(ProprietariDocumento.servizio.toString());
  2736.             }
  2737.             for(int i=0; i<archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().sizeSpecificaLivelloServizioList();i++){
  2738.                 archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getSpecificaLivelloServizio(i).setRuolo(RuoliDocumento.specificaLivelloServizio.toString());
  2739.                 archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getSpecificaLivelloServizio(i).setTipoProprietarioDocumento(ProprietariDocumento.servizio.toString());
  2740.             }
  2741.             for(int i=0; i<archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().sizeSpecificaSicurezzaList();i++){
  2742.                 archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getSpecificaSicurezza(i).setRuolo(RuoliDocumento.specificaSicurezza.toString());
  2743.                 archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getSpecificaSicurezza(i).setTipoProprietarioDocumento(ProprietariDocumento.servizio.toString());
  2744.             }
  2745.                    
  2746.            
  2747.             // --- workflowStatoDocumenti ---
  2748.             StringBuilder warningInfoStatoFinale = new StringBuilder("");
  2749.             if(archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getStatoPackage()==null){
  2750.                 if(this.gestioneWorkflowStatiAccordi){
  2751.                     boolean gestioneWsdlImplementativo = false;
  2752.                     try{
  2753.                         IProtocolFactory<?> protocol = ProtocolFactoryManager.getInstance().getProtocolFactoryByServiceType(archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getTipo());
  2754.                         gestioneWsdlImplementativo = protocol.createProtocolConfiguration().
  2755.                                 isSupportoPortiAccessoAccordiParteSpecifica(toMessageServiceBinding(accordoServizioParteComune.getServiceBinding()),
  2756.                                         formatoSpecifica2InterfaceType(accordoServizioParteComune.getFormatoSpecifica()));
  2757.                         archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().setStatoPackage(StatiAccordo.finale.toString());
  2758.                         this.importerEngine.validaStatoAccordoServizioParteSpecifica(archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica(),
  2759.                                 gestioneWsdlImplementativo, false);
  2760.                     }catch(ValidazioneStatoPackageException validazioneException){
  2761.                         try{
  2762.                             archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().setStatoPackage(StatiAccordo.operativo.toString());
  2763.                             this.importerEngine.validaStatoAccordoServizioParteSpecifica(archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica(),
  2764.                                     gestioneWsdlImplementativo, false);
  2765.                         }catch(ValidazioneStatoPackageException validazioneExceptionLevelOperativo){
  2766.                             warningInfoStatoFinale.append("\n\t\t(WARNING) Accordo salvato con stato '").append(StatiAccordo.bozza.toString()).append("':\n\t\t\t");
  2767.                             warningInfoStatoFinale.append(validazioneException.toString("\n\t\t\t - ","\n\t\t\t - "));
  2768.                             warningInfoStatoFinale.append("\n\t\t\t"+validazioneExceptionLevelOperativo.toString("\n\t\t\t - ","\n\t\t\t - "));
  2769.                             archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().setStatoPackage(StatiAccordo.bozza.toString());
  2770.                         }
  2771.                     }
  2772.                 }
  2773.                 else{
  2774.                     archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().setStatoPackage(StatiAccordo.finale.toString());
  2775.                 }
  2776.             }
  2777.            
  2778.                    
  2779.             // --- ora registrazione
  2780.             archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().setOraRegistrazione(DateManager.getDate());
  2781.            
  2782.            
  2783.             // --- upload ---
  2784.             org.openspcoop2.core.registry.driver.utils.XMLDataConverter.
  2785.                 aggiornatoStatoFruitori(archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica(),
  2786.                         StatiAccordo.valueOf(archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().getStatoPackage()));
  2787.            
  2788.             List<IDPortaApplicativa> idPACheck = null;
  2789.             ArchiveStatoImport statoImport = null;
  2790.            
  2791.             if(this.importerEngine.existsAccordoServizioParteSpecifica(idAccordoServizioParteSpecifica)){
  2792.                
  2793.                 archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().setId(old.getId());
  2794.                 IDServizio oldIDServizioForUpdate = IDServizioFactory.getInstance().getIDServizioFromValues(old.getTipo(), old.getNome(),
  2795.                         old.getTipoSoggettoErogatore(), old.getNomeSoggettoErogatore(),
  2796.                         old.getVersione());
  2797.                 archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica().setOldIDServizioForUpdate(oldIDServizioForUpdate);
  2798.                 boolean mantieniFruitoriEsistenti = true;
  2799.                 org.openspcoop2.core.registry.driver.utils.XMLDataConverter.
  2800.                     impostaInformazioniRegistro_AccordoServizioParteSpecifica_update(archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica(),
  2801.                             old,mantieniFruitoriEsistenti);
  2802.                
  2803.                 // visibilita' oggetto stesso per update
  2804.                 if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  2805.                     if(this.userLogin.equals(old.getSuperUser())==false){
  2806.                         throw new Exception("L'accordo non è visibile/aggiornabile dall'utente collegato ("+this.userLogin+")");
  2807.                     }
  2808.                 }

  2809.                 // update
  2810.                 this.importerEngine.updateAccordoServizioParteSpecifica(archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica());
  2811.                 statoImport = ArchiveStatoImport.UPDATED;
  2812.                
  2813.                 idPACheck = this.importerEngine.getIDPorteApplicativeAssociateErogazione(idAccordoServizioParteSpecifica);
  2814.                    
  2815.             }
  2816.             // --- create ---
  2817.             else{
  2818.                 this.importerEngine.createAccordoServizioParteSpecifica(archiveAccordoServizioParteSpecifica.getAccordoServizioParteSpecifica());
  2819.                 statoImport = ArchiveStatoImport.CREATED;
  2820.             }
  2821.            
  2822.             // gestione portaApplicativaAssociata
  2823.             if(archiveAccordoServizioParteSpecifica.getMappingPorteApplicativeAssociate()!=null &&
  2824.                     archiveAccordoServizioParteSpecifica.getMappingPorteApplicativeAssociate().size()>0){
  2825.                 for (MappingErogazionePortaApplicativa mappingPortaApplicativaAssociata : archiveAccordoServizioParteSpecifica.getMappingPorteApplicativeAssociate()) {
  2826.                     if(idPACheck==null || idPACheck.size()<=0 || (idPACheck.contains(mappingPortaApplicativaAssociata.getIdPortaApplicativa())==false)){
  2827.                         listMappingErogazionePA.add(mappingPortaApplicativaAssociata);
  2828.                     }  
  2829.                 }
  2830.             }
  2831.            
  2832.             // update info importazione
  2833.             detail.setState(statoImport);
  2834.             detail.setStateDetail(warningInfoStatoFinale.toString());
  2835.                

  2836.            
  2837.         }          
  2838.         catch(Exception e){
  2839.             this.log.error("Errore durante l'import dell'accordo di servizio parte specifica ["+idAccordoServizioParteSpecifica+"]: "+e.getMessage(),e);
  2840.             detail.setState(ArchiveStatoImport.ERROR);
  2841.             detail.setException(e);
  2842.         }
  2843.     }
  2844.     private ServiceBinding toMessageServiceBinding(org.openspcoop2.core.registry.constants.ServiceBinding serviceBinding) {
  2845.         if(serviceBinding == null)
  2846.             return null;
  2847.        
  2848.         switch (serviceBinding) {
  2849.         case REST:
  2850.             return ServiceBinding.REST;
  2851.         case SOAP:
  2852.         default:
  2853.             return ServiceBinding.SOAP;
  2854.         }          
  2855.     }
  2856.     private InterfaceType formatoSpecifica2InterfaceType(org.openspcoop2.core.registry.constants.FormatoSpecifica formatoSpecifica) {
  2857.         if(formatoSpecifica == null)
  2858.             return null;
  2859.        
  2860.         switch (formatoSpecifica) {
  2861.         case SWAGGER_2:
  2862.             return InterfaceType.SWAGGER_2;
  2863.         case OPEN_API_3:
  2864.             return InterfaceType.OPEN_API_3;
  2865.         case WADL:
  2866.             return InterfaceType.WADL;

  2867.            
  2868.         case WSDL_11:
  2869.         default:
  2870.             return InterfaceType.WSDL_11;
  2871.         }          
  2872.     }
  2873.    
  2874.    
  2875.    
  2876.     public void importFruitore(ArchiveFruitore archiveFruitore,
  2877.             ArchiveEsitoImportDetail detail,
  2878.             List<MappingFruizionePortaDelegata> listMappingFruizionePD){
  2879.        
  2880.         IDServizio idAccordoServizioParteSpecifica = archiveFruitore.getIdAccordoServizioParteSpecifica();
  2881.         IDSoggetto idSoggettoFruitore = archiveFruitore.getIdSoggettoFruitore();

  2882.         try{
  2883.             AccordoServizioParteSpecifica oldAccordo = null;
  2884.             Fruitore old = null;
  2885.             if(this.importerEngine.existsAccordoServizioParteSpecifica(idAccordoServizioParteSpecifica)){
  2886.                 oldAccordo = this.importerEngine.getAccordoServizioParteSpecifica(idAccordoServizioParteSpecifica);
  2887.                 for (int i = 0; i < oldAccordo.sizeFruitoreList(); i++) {
  2888.                     Fruitore check = oldAccordo.getFruitore(i);
  2889.                     if(check.getTipo().equals(idSoggettoFruitore.getTipo()) &&
  2890.                             check.getNome().equals(idSoggettoFruitore.getNome())){
  2891.                         old = oldAccordo.removeFruitore(i);
  2892.                         break;
  2893.                     }
  2894.                 }
  2895.             }          
  2896.            
  2897.             // --- check esistenza ---
  2898.             if(this.updateAbilitato==false){
  2899.                 if(old!=null){
  2900.                    
  2901.                     // gestione portaDelegataAssociata
  2902.                     if(archiveFruitore.getMappingPorteDelegateAssociate()!=null &&
  2903.                             archiveFruitore.getMappingPorteDelegateAssociate().size()>0){
  2904.                         List<IDPortaDelegata> idPDCheck = this.importerEngine.getIDPorteDelegateAssociateFruizione(archiveFruitore.getIdAccordoServizioParteSpecifica(), archiveFruitore.getIdSoggettoFruitore());
  2905.                         for (MappingFruizionePortaDelegata mappingPortaDelegataAssociata : archiveFruitore.getMappingPorteDelegateAssociate()) {
  2906.                             if(idPDCheck==null || idPDCheck.size()<=0 || idPDCheck.contains(mappingPortaDelegataAssociata.getIdPortaDelegata())==false){
  2907.                                 listMappingFruizionePD.add(mappingPortaDelegataAssociata);
  2908.                             }  
  2909.                         }
  2910.                     }
  2911.                    
  2912.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  2913.                     return;
  2914.                 }
  2915.             }
  2916.            
  2917.                        
  2918.             // --- check elementi riferiti ---
  2919.            
  2920.             // soggetto fruitore
  2921.             if(this.importerEngine.existsSoggettoRegistro(idSoggettoFruitore) == false ){
  2922.                 throw new Exception("Soggetto fruitore ["+idSoggettoFruitore+"] non esistente");
  2923.             }
  2924.            
  2925.             // accordo di servizio parte specifica
  2926.             if(this.importerEngine.existsAccordoServizioParteSpecifica(idAccordoServizioParteSpecifica) == false){
  2927.                 throw new Exception("Accordo di Servizio Parte Specifica non esistente");
  2928.             }
  2929.            
  2930.             // token negoziazione
  2931.             if(archiveFruitore.getFruitore().getConnettore()!=null &&
  2932.                     archiveFruitore.getFruitore().getConnettore().getProperties()!=null &&
  2933.                     archiveFruitore.getFruitore().getConnettore().getProperties().containsKey(CostantiConnettori.CONNETTORE_TOKEN_POLICY)) {
  2934.                 String policy = archiveFruitore.getFruitore().getConnettore().getProperties().get(CostantiConnettori.CONNETTORE_TOKEN_POLICY);
  2935.                 if(this.importerEngine.existsGenericProperties_retrieve(policy) == false) {
  2936.                     throw new Exception("Token Policy Negoziazione ["+policy+"] indicato nel connettore non esistente");
  2937.                 }
  2938.             }
  2939.             if(archiveFruitore.getFruitore().sizeConfigurazioneAzioneList()>0) {
  2940.                 for (ConfigurazioneServizioAzione confAzione : archiveFruitore.getFruitore().getConfigurazioneAzioneList()) {
  2941.                     if(confAzione.getConnettore()!=null &&
  2942.                             confAzione.getConnettore().getProperties()!=null &&
  2943.                             confAzione.getConnettore().getProperties().containsKey(CostantiConnettori.CONNETTORE_TOKEN_POLICY)) {
  2944.                         String policy = confAzione.getConnettore().getProperties().get(CostantiConnettori.CONNETTORE_TOKEN_POLICY);
  2945.                         if(this.importerEngine.existsGenericProperties_retrieve(policy) == false) {
  2946.                             throw new Exception("Token Policy Negoziazione ["+policy+"] indicato nel connettore non esistente");
  2947.                         }
  2948.                     }
  2949.                 }
  2950.             }
  2951.            
  2952.             // plugin
  2953.             if(this.checkExistsPluginConfigurazione) {
  2954.                 if(archiveFruitore.getFruitore().getConnettore()!=null &&
  2955.                         archiveFruitore.getFruitore().getConnettore().getCustom()!=null &&
  2956.                         archiveFruitore.getFruitore().getConnettore().getCustom() &&
  2957.                         archiveFruitore.getFruitore().getConnettore().getTipo()!=null) {
  2958.                     TipiConnettore tipo = TipiConnettore.toEnumFromName(archiveFruitore.getFruitore().getConnettore().getTipo());
  2959.                     if(tipo==null) {
  2960.                         if(this.importerEngine.existsPluginClasse(TipoPlugin.CONNETTORE.getValue(), archiveFruitore.getFruitore().getConnettore().getTipo()) == false ){
  2961.                             throw new Exception("Plugin '"+TipoPlugin.CONNETTORE.getValue()+"' ["+archiveFruitore.getFruitore().getConnettore().getTipo()+"] non esistente nel registro");
  2962.                         }
  2963.                     }
  2964.                 }
  2965.                 if(archiveFruitore.getFruitore().sizeConfigurazioneAzioneList()>0) {
  2966.                     for (ConfigurazioneServizioAzione confAzione : archiveFruitore.getFruitore().getConfigurazioneAzioneList()) {
  2967.                         if(confAzione.getConnettore()!=null &&
  2968.                                 confAzione.getConnettore().getCustom()!=null &&
  2969.                                 confAzione.getConnettore().getCustom() &&
  2970.                                 confAzione.getConnettore().getTipo()!=null) {
  2971.                             TipiConnettore tipo = TipiConnettore.toEnumFromName(confAzione.getConnettore().getTipo());
  2972.                             if(tipo==null) {
  2973.                                 if(this.importerEngine.existsPluginClasse(TipoPlugin.CONNETTORE.getValue(), confAzione.getConnettore().getTipo()) == false ){
  2974.                                     throw new Exception("Plugin '"+TipoPlugin.CONNETTORE.getValue()+"' ["+confAzione.getConnettore().getTipo()+"] non esistente nel registro");
  2975.                                 }
  2976.                             }
  2977.                         }
  2978.                     }
  2979.                 }
  2980.             }
  2981.        
  2982.            
  2983.             // --- compatibilita' elementi riferiti ---
  2984.             String protocolloAssociatoFruitore = this.protocolFactoryManager.getProtocolByOrganizationType(idSoggettoFruitore.getTipo());
  2985.             // accordo di servizio parte specifica
  2986.             String protocolloAssociatoAccordoParteSpecifica = this.protocolFactoryManager.getProtocolByOrganizationType(idAccordoServizioParteSpecifica.getSoggettoErogatore().getTipo());
  2987.             if(protocolloAssociatoFruitore.equals(protocolloAssociatoAccordoParteSpecifica)==false){
  2988.                 throw new Exception("AccordoServizioParteSpecifica ["+idAccordoServizioParteSpecifica+"] (protocollo:"+protocolloAssociatoAccordoParteSpecifica+
  2989.                         ") non utilizzabile in un fruitore ["+idSoggettoFruitore+"] (protocollo:"+protocolloAssociatoFruitore+")");
  2990.             }
  2991.                
  2992.            
  2993.             // ---- visibilita' oggetto riferiti ---
  2994.             // soggetto
  2995.             Soggetto soggetto = this.importerEngine.getSoggettoRegistro(idSoggettoFruitore);
  2996.             if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  2997.                 if(this.userLogin.equals(soggetto.getSuperUser())==false){
  2998.                     throw new Exception("Il soggetto fruitore ["+idSoggettoFruitore+"] non è visibile/utilizzabile dall'utente collegato ("+this.userLogin+")");
  2999.                 }
  3000.             }
  3001.             // accordo di servizio parte specifica
  3002.             if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  3003.                 if(this.userLogin.equals(oldAccordo.getSuperUser())==false){
  3004.                     throw new Exception("L'accordo di servizio parte specifica ["+idAccordoServizioParteSpecifica+"] non è visibile/utilizzabile dall'utente collegato ("+this.userLogin+")");
  3005.                 }
  3006.             }
  3007.            
  3008.            
  3009.             // --- set dati obbligatori nel db ----

  3010.             org.openspcoop2.core.registry.driver.utils.XMLDataConverter.
  3011.                 impostaInformazioniRegistroDB_AccordoServizioParteSpecifica_Fruitore(archiveFruitore.getFruitore());
  3012.                    
  3013.            
  3014.             // --- workflowStatoDocumenti ---
  3015.             StringBuilder warningInfoStatoFinale = new StringBuilder("");
  3016.             if(archiveFruitore.getFruitore()==null){
  3017.                 if(this.gestioneWorkflowStatiAccordi){
  3018.                     try{
  3019.                         archiveFruitore.getFruitore().setStatoPackage(StatiAccordo.finale.toString());
  3020.                         this.importerEngine.validaStatoFruitoreServizio(archiveFruitore.getFruitore(),oldAccordo);
  3021.                     }catch(ValidazioneStatoPackageException validazioneException){
  3022.                         try{
  3023.                             archiveFruitore.getFruitore().setStatoPackage(StatiAccordo.operativo.toString());
  3024.                             this.importerEngine.validaStatoFruitoreServizio(archiveFruitore.getFruitore(),oldAccordo);
  3025.                         }catch(ValidazioneStatoPackageException validazioneExceptionLevelOperativo){
  3026.                             warningInfoStatoFinale.append("\n\t\t(WARNING) Fruitore salvato con stato '").append(StatiAccordo.bozza.toString()).append("':\n\t\t\t");
  3027.                             warningInfoStatoFinale.append(validazioneException.toString("\n\t\t\t - ","\n\t\t\t - "));
  3028.                             warningInfoStatoFinale.append("\n\t\t\t"+validazioneExceptionLevelOperativo.toString("\n\t\t\t - ","\n\t\t\t - "));
  3029.                             archiveFruitore.getFruitore().setStatoPackage(StatiAccordo.bozza.toString());
  3030.                         }
  3031.                     }
  3032.                 }
  3033.                 else{
  3034.                     archiveFruitore.getFruitore().setStatoPackage(StatiAccordo.finale.toString());
  3035.                 }
  3036.             }
  3037.            
  3038.            
  3039.            
  3040.             // --- ora registrazione
  3041.             archiveFruitore.getFruitore().setOraRegistrazione(DateManager.getDate());
  3042.            
  3043.            
  3044.                        
  3045.             // --- upload ---
  3046.             // prima ho rimosso il fruitore se gia' esisteva.
  3047.             if(old!=null){
  3048.                 archiveFruitore.getFruitore().setId(old.getId());
  3049.             }
  3050.             oldAccordo.addFruitore(archiveFruitore.getFruitore());
  3051.            
  3052.             // update
  3053.             IDServizio oldIDServizioForUpdate = IDServizioFactory.getInstance().getIDServizioFromValues(oldAccordo.getTipo(), oldAccordo.getNome(),
  3054.                     oldAccordo.getTipoSoggettoErogatore(),oldAccordo.getNomeSoggettoErogatore(),
  3055.                     oldAccordo.getVersione());
  3056.             oldAccordo.setOldIDServizioForUpdate(oldIDServizioForUpdate);
  3057.             this.importerEngine.updateAccordoServizioParteSpecifica(oldAccordo);
  3058.            
  3059.             // gestione portaDelegataAssociata
  3060.             if(archiveFruitore.getMappingPorteDelegateAssociate()!=null &&
  3061.                     archiveFruitore.getMappingPorteDelegateAssociate().size()>0){
  3062.                 List<IDPortaDelegata> idPDCheck = this.importerEngine.getIDPorteDelegateAssociateFruizione(archiveFruitore.getIdAccordoServizioParteSpecifica(), archiveFruitore.getIdSoggettoFruitore());
  3063.                 for (MappingFruizionePortaDelegata mappingPortaDelegataAssociata : archiveFruitore.getMappingPorteDelegateAssociate()) {
  3064.                     if(idPDCheck==null || idPDCheck.size()<=0 || idPDCheck.contains(mappingPortaDelegataAssociata.getIdPortaDelegata())==false){
  3065.                         listMappingFruizionePD.add(mappingPortaDelegataAssociata);
  3066.                     }  
  3067.                 }
  3068.             }
  3069.            
  3070.             if(old!=null){
  3071.                 detail.setState(ArchiveStatoImport.UPDATED);
  3072.                 detail.setStateDetail(warningInfoStatoFinale.toString());
  3073.             }else{
  3074.                 detail.setState(ArchiveStatoImport.CREATED);
  3075.                 detail.setStateDetail(warningInfoStatoFinale.toString());
  3076.             }
  3077.                    
  3078.         }          
  3079.         catch(Exception e){
  3080.             this.log.error("Errore durante l'import del fruitore["+idSoggettoFruitore+"] dell'accordo di servizio parte specifica ["+idAccordoServizioParteSpecifica+"]: "+e.getMessage(),e);
  3081.             detail.setState(ArchiveStatoImport.ERROR);
  3082.             detail.setException(e);
  3083.         }
  3084.     }
  3085.    
  3086.    
  3087.    
  3088.    
  3089.     public void importPortaDelegata(ArchivePortaDelegata archivePortaDelegata,
  3090.             ArchiveEsitoImportDetail detail){
  3091.        
  3092.         IDPortaDelegata idPortaDelegata = archivePortaDelegata.getIdPortaDelegata();
  3093.         IDSoggetto idSoggettoProprietario = archivePortaDelegata.getIdSoggettoProprietario();
  3094.         try{
  3095.             // --- check esistenza ---
  3096.             if(this.updateAbilitato==false){
  3097.                 if(this.importerEngine.existsPortaDelegata(idPortaDelegata)){
  3098.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  3099.                     return;
  3100.                 }
  3101.             }
  3102.            
  3103.            
  3104.             // --- lettura elementi riferiti all'interno della porta delegata ---
  3105.             PortaDelegata pd = archivePortaDelegata.getPortaDelegata();
  3106.             IDSoggetto idSoggettoErogatore = null;
  3107.             IDServizio idServizio = null;
  3108.             if(pd.getSoggettoErogatore()!=null &&
  3109.                     pd.getSoggettoErogatore().getTipo()!=null &&
  3110.                     pd.getSoggettoErogatore().getNome()!=null ){
  3111.                 idSoggettoErogatore = new IDSoggetto(pd.getSoggettoErogatore().getTipo(), pd.getSoggettoErogatore().getNome());
  3112.             }
  3113.             if(idSoggettoErogatore!=null){
  3114.                 if(pd.getServizio()!=null &&
  3115.                         pd.getServizio().getTipo()!=null &&
  3116.                         pd.getServizio().getNome()!=null &&
  3117.                         pd.getServizio().getVersione()!=null){
  3118.                     idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(pd.getServizio().getTipo(), pd.getServizio().getNome(),
  3119.                             idSoggettoErogatore, pd.getServizio().getVersione());
  3120.                 }
  3121.             }
  3122.            
  3123.            
  3124.             // --- check elementi riferiti ---
  3125.            
  3126.             // soggetto proprietario
  3127.             if(this.importerEngine.existsSoggettoConfigurazione(idSoggettoProprietario) == false ){
  3128.                 throw new Exception("Soggetto proprietario ["+idSoggettoProprietario+"] non esistente");
  3129.             }
  3130.            
  3131.             // soggetto erogatore
  3132.             if(idSoggettoErogatore!=null){
  3133.                 if(this.importerEngine.existsSoggettoRegistro(idSoggettoErogatore) == false ){
  3134.                     throw new Exception("Soggetto erogatore riferito nella PD ["+idSoggettoErogatore+"] non esistente");
  3135.                 }
  3136.             }
  3137.            
  3138.             // accordo servizio parte specifica
  3139.             if(idServizio!=null){
  3140.                 if(this.importerEngine.existsAccordoServizioParteSpecifica(idServizio) == false ){
  3141.                     throw new Exception("Servizio riferito nella PD ["+idServizio+"] non esistente");
  3142.                 }
  3143.             }
  3144.            
  3145.             // ruoli
  3146.             if(archivePortaDelegata.getPortaDelegata().getRuoli()!=null && archivePortaDelegata.getPortaDelegata().getRuoli().sizeRuoloList()>0){
  3147.                 for (int i = 0; i < archivePortaDelegata.getPortaDelegata().getRuoli().sizeRuoloList(); i++) {
  3148.                     IDRuolo idRuolo = new IDRuolo(archivePortaDelegata.getPortaDelegata().getRuoli().getRuolo(i).getNome());
  3149.                     if(this.importerEngine.existsRuolo(idRuolo) == false ){
  3150.                         throw new Exception("Ruolo ["+idRuolo.getNome()+"] associato non esiste");
  3151.                     }  
  3152.                 }
  3153.             }
  3154.            
  3155.             // scope
  3156.             if(archivePortaDelegata.getPortaDelegata().getScope()!=null && archivePortaDelegata.getPortaDelegata().getScope().sizeScopeList()>0){
  3157.                 for (int i = 0; i < archivePortaDelegata.getPortaDelegata().getScope().sizeScopeList(); i++) {
  3158.                     IDScope idScope = new IDScope(archivePortaDelegata.getPortaDelegata().getScope().getScope(i).getNome());
  3159.                     if(this.importerEngine.existsScope(idScope) == false ){
  3160.                         throw new Exception("Scope ["+idScope.getNome()+"] associato non esiste");
  3161.                     }  
  3162.                 }
  3163.             }
  3164.            
  3165.             // servizi applicativi autorizzati
  3166.             if(archivePortaDelegata.getPortaDelegata().getServizioApplicativoList()!=null && archivePortaDelegata.getPortaDelegata().sizeServizioApplicativoList()>0){
  3167.                 for (int i = 0; i < archivePortaDelegata.getPortaDelegata().sizeServizioApplicativoList(); i++) {
  3168.                     IDServizioApplicativo idSaAuth = new IDServizioApplicativo();
  3169.                     idSaAuth.setIdSoggettoProprietario(idSoggettoProprietario);
  3170.                     idSaAuth.setNome(archivePortaDelegata.getPortaDelegata().getServizioApplicativo(i).getNome());
  3171.                     if(this.importerEngine.existsServizioApplicativo(idSaAuth) == false ){
  3172.                         throw new Exception("Applicativo ["+idSaAuth+"] indicato nel controllo degli accessi non esistente");
  3173.                     }  
  3174.                 }
  3175.             }
  3176.            
  3177.             // token validazione
  3178.             if(archivePortaDelegata.getPortaDelegata().getGestioneToken()!=null &&
  3179.                     archivePortaDelegata.getPortaDelegata().getGestioneToken().getPolicy()!=null &&
  3180.                     !"".equals(archivePortaDelegata.getPortaDelegata().getGestioneToken().getPolicy())) {
  3181.                 if(this.importerEngine.existsGenericProperties_validation(archivePortaDelegata.getPortaDelegata().getGestioneToken().getPolicy()) == false) {
  3182.                     throw new Exception("Token Policy Validazione ["+archivePortaDelegata.getPortaDelegata().getGestioneToken().getPolicy()+"] indicato nel controllo degli accessi non esistente");
  3183.                 }
  3184.             }
  3185.            
  3186.             // plugin
  3187.             if(this.checkExistsPluginConfigurazione) {
  3188.                
  3189.                 if(archivePortaDelegata.getPortaDelegata()!=null && StringUtils.isNotEmpty(archivePortaDelegata.getPortaDelegata().getAutenticazione())) {
  3190.                     TipoAutenticazione tipo = TipoAutenticazione.toEnumConstant(archivePortaDelegata.getPortaDelegata().getAutenticazione(), false);
  3191.                     if(tipo==null) {
  3192.                         if(this.importerEngine.existsPluginClasse(TipoPlugin.AUTENTICAZIONE.getValue(), archivePortaDelegata.getPortaDelegata().getAutenticazione()) == false ){
  3193.                             throw new Exception("Plugin '"+TipoPlugin.AUTENTICAZIONE.getValue()+"' ["+archivePortaDelegata.getPortaDelegata().getAutenticazione()+"] non esistente nel registro");
  3194.                         }
  3195.                     }
  3196.                 }
  3197.                 if(archivePortaDelegata.getPortaDelegata()!=null && StringUtils.isNotEmpty(archivePortaDelegata.getPortaDelegata().getAutorizzazione())) {
  3198.                     TipoAutorizzazione tipo = TipoAutorizzazione.toEnumConstant(archivePortaDelegata.getPortaDelegata().getAutorizzazione(), false);
  3199.                     if(tipo==null) {
  3200.                         if(this.importerEngine.existsPluginClasse(TipoPlugin.AUTORIZZAZIONE.getValue(), archivePortaDelegata.getPortaDelegata().getAutorizzazione()) == false ){
  3201.                             throw new Exception("Plugin '"+TipoPlugin.AUTORIZZAZIONE.getValue()+"' ["+archivePortaDelegata.getPortaDelegata().getAutorizzazione()+"] non esistente nel registro");
  3202.                         }
  3203.                     }
  3204.                 }
  3205.                 if(archivePortaDelegata.getPortaDelegata()!=null && StringUtils.isNotEmpty(archivePortaDelegata.getPortaDelegata().getAutorizzazioneContenuto())) {
  3206.                     if(!CostantiConfigurazione.AUTORIZZAZIONE_CONTENUTO_BUILT_IN.equals(archivePortaDelegata.getPortaDelegata().getAutorizzazioneContenuto())) {
  3207.                         if(this.importerEngine.existsPluginClasse(TipoPlugin.AUTORIZZAZIONE_CONTENUTI.getValue(), archivePortaDelegata.getPortaDelegata().getAutorizzazioneContenuto()) == false ){
  3208.                             throw new Exception("Plugin '"+TipoPlugin.AUTORIZZAZIONE_CONTENUTI.getValue()+"' ["+archivePortaDelegata.getPortaDelegata().getAutorizzazioneContenuto()+"] non esistente nel registro");
  3209.                         }
  3210.                     }
  3211.                 }
  3212. //              // TODO:
  3213. //              TipoPlugin.INTEGRAZIONE;
  3214. //              TipoPlugin.MESSAGE_HANDLER;
  3215.                
  3216.             }
  3217.            
  3218.            
  3219.            
  3220.             // --- compatibilita' elementi riferiti ---
  3221.             String protocolloAssociatoSoggettoProprietario = this.protocolFactoryManager.getProtocolByOrganizationType(idSoggettoProprietario.getTipo());
  3222.             // erogatore
  3223.             if(idSoggettoErogatore!=null){
  3224.                 String protocolloAssociatoSoggettoErogatore = this.protocolFactoryManager.getProtocolByOrganizationType(idSoggettoErogatore.getTipo());
  3225.                 if(protocolloAssociatoSoggettoProprietario.equals(protocolloAssociatoSoggettoErogatore)==false){
  3226.                     throw new Exception("SoggettoErogatore ["+idSoggettoErogatore+"] (protocollo:"+protocolloAssociatoSoggettoErogatore+
  3227.                             ") non utilizzabile in una porta delegata appartenete al soggetto ["+idSoggettoProprietario+"] (protocollo:"+protocolloAssociatoSoggettoProprietario+")");
  3228.                 }
  3229.             }
  3230.             // accordo di servizio parte specifica
  3231.             if(idServizio!=null){
  3232.                 String protocolloAssociatoAccordoParteSpecifica = this.protocolFactoryManager.getProtocolByServiceType(idServizio.getTipo());
  3233.                 if(protocolloAssociatoSoggettoProprietario.equals(protocolloAssociatoAccordoParteSpecifica)==false){
  3234.                     throw new Exception("AccordoServizioParteSpecifica ["+idServizio+"] (protocollo:"+protocolloAssociatoAccordoParteSpecifica+
  3235.                             ") con servizio non utilizzabile in una porta delegata appartenete al soggetto ["+idSoggettoProprietario+"] (protocollo:"+protocolloAssociatoSoggettoProprietario+")");
  3236.                 }
  3237.                 String protocolloAssociatoSoggettoAccordoParteSpecifica = this.protocolFactoryManager.getProtocolByOrganizationType(idServizio.getSoggettoErogatore().getTipo());
  3238.                 if(protocolloAssociatoSoggettoProprietario.equals(protocolloAssociatoSoggettoAccordoParteSpecifica)==false){
  3239.                     throw new Exception("AccordoServizioParteSpecifica ["+idServizio+"] (protocollo:"+protocolloAssociatoSoggettoAccordoParteSpecifica+
  3240.                             ") con soggetto non utilizzabile in una porta delegata appartenete al soggetto ["+idSoggettoProprietario+"] (protocollo:"+protocolloAssociatoSoggettoProprietario+")");
  3241.                 }
  3242.             }
  3243.            
  3244.            
  3245.             // ---- visibilita' oggetto riferiti ---
  3246.             org.openspcoop2.core.config.Soggetto soggetto = this.importerEngine.getSoggettoConfigurazione(idSoggettoProprietario);
  3247.             if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  3248.                 if(this.userLogin.equals(soggetto.getSuperUser())==false){
  3249.                     throw new Exception("Il soggetto proprietario ["+idSoggettoProprietario+"] non è visibile/utilizzabile dall'utente collegato ("+this.userLogin+")");
  3250.                 }
  3251.             }
  3252.             Soggetto soggettoErogatore = null;
  3253.             AccordoServizioParteSpecifica accordoServizioParteSpecifica = null;
  3254.             if(idSoggettoErogatore!=null){
  3255.                 soggettoErogatore = this.importerEngine.getSoggettoRegistro(idSoggettoErogatore);
  3256.                 if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  3257.                     if(this.userLogin.equals(soggettoErogatore.getSuperUser())==false){
  3258.                         throw new Exception("Il soggetto erogatore riferito nella PD ["+idSoggettoErogatore+"] non è visibile/utilizzabile dall'utente collegato ("+this.userLogin+")");
  3259.                     }
  3260.                 }
  3261.             }
  3262.             if(idServizio!=null){
  3263.                 accordoServizioParteSpecifica = this.importerEngine.getAccordoServizioParteSpecifica(idServizio);
  3264.                 if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  3265.                     if(this.userLogin.equals(accordoServizioParteSpecifica.getSuperUser())==false){
  3266.                         throw new Exception("Il servizio riferito nella PD ["+idServizio+"] non è visibile/utilizzabile dall'utente collegato ("+this.userLogin+")");
  3267.                     }
  3268.                 }
  3269.             }
  3270.            
  3271.            
  3272.             // --- set dati obbligatori nel db ----
  3273.            
  3274.             //pd.setSuperUser(this.userLogin);
  3275.             // L'oggetto non contiene informazione di visibilita, la eredita dal soggetto
  3276.            
  3277.             if(idSoggettoErogatore!=null){
  3278.                 pd.getSoggettoErogatore().setId(soggettoErogatore.getId());
  3279.             }
  3280.             if(idServizio!=null){
  3281.                 pd.getServizio().setId(accordoServizioParteSpecifica.getId());
  3282.             }
  3283.            
  3284.            
  3285.             // --- ora registrazione
  3286.             pd.setOraRegistrazione(DateManager.getDate());
  3287.            
  3288.            
  3289.             // --- set dati obbligatori nel db ----
  3290.             org.openspcoop2.core.config.driver.utils.XMLDataConverter.
  3291.                 impostaInformazioniConfigurazione_PortaDelegata(pd);
  3292.            
  3293.             // --- correzione nomi provider per backward compatibility ----
  3294.             MerlinProvider.correctProviderName(pd.getMessageSecurity());
  3295.            
  3296.            
  3297.             // --- upload ---
  3298.             if(this.importerEngine.existsPortaDelegata(idPortaDelegata)){
  3299.                
  3300.                 org.openspcoop2.core.config.PortaDelegata old = this.importerEngine.getPortaDelegata(idPortaDelegata);
  3301.                 pd.setId(old.getId());
  3302.                 IDPortaDelegata oldIDPortaDelegataForUpdate = new IDPortaDelegata();
  3303.                 oldIDPortaDelegataForUpdate.setNome(old.getNome());
  3304.                 pd.setOldIDPortaDelegataForUpdate(oldIDPortaDelegataForUpdate);
  3305.                
  3306.                 // visibilita' oggetto stesso per update
  3307.                 // L'oggetto non contiene informazione di visibilita, la eredita dal soggetto

  3308.                 // update
  3309.                 this.importerEngine.updatePortaDelegata(pd);
  3310.                 detail.setState(ArchiveStatoImport.UPDATED);
  3311.             }
  3312.             // --- create ---
  3313.             else{
  3314.                 this.importerEngine.createPortaDelegata(pd);
  3315.                 detail.setState(ArchiveStatoImport.CREATED);
  3316.             }
  3317.                

  3318.            
  3319.         }          
  3320.         catch(Exception e){
  3321.             this.log.error("Errore durante l'import della porta delegata ["+idPortaDelegata+"]: "+e.getMessage(),e);
  3322.             detail.setState(ArchiveStatoImport.ERROR);
  3323.             detail.setException(e);
  3324.         }
  3325.     }
  3326.    
  3327.    
  3328.    
  3329.    
  3330.    
  3331.    
  3332.     public void importPortaApplicativa(ArchivePortaApplicativa archivePortaApplicativa,
  3333.             ArchiveEsitoImportDetail detail){
  3334.        
  3335.         IDPortaApplicativa idPortaApplicativa = archivePortaApplicativa.getIdPortaApplicativa();
  3336.         IDSoggetto idSoggettoProprietario = archivePortaApplicativa.getIdSoggettoProprietario();
  3337.         try{
  3338.             // --- check esistenza ---
  3339.             if(this.updateAbilitato==false){
  3340.                 if(this.importerEngine.existsPortaApplicativa(idPortaApplicativa)){
  3341.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  3342.                     return;
  3343.                 }
  3344.             }
  3345.            
  3346.            
  3347.             // --- lettura elementi riferiti all'interno della porta delegata ---
  3348.            
  3349.             if(idSoggettoProprietario==null) {
  3350.                 throw new Exception("Soggetto proprietario non definito");
  3351.             }
  3352.            
  3353.             PortaApplicativa pa = archivePortaApplicativa.getPortaApplicativa();
  3354.             IDServizio idServizio = null;
  3355.             IDSoggetto idSoggettoErogatore = idSoggettoProprietario;
  3356.             if(pa.getSoggettoVirtuale()!=null &&
  3357.                     pa.getSoggettoVirtuale().getTipo()!=null &&
  3358.                     pa.getSoggettoVirtuale().getNome()!=null ){
  3359.                 idSoggettoErogatore = new IDSoggetto(pa.getSoggettoVirtuale().getTipo(), pa.getSoggettoVirtuale().getNome());
  3360.             }
  3361.             if(idSoggettoErogatore!=null){
  3362.                 if(pa.getServizio()!=null &&
  3363.                         pa.getServizio().getTipo()!=null &&
  3364.                         pa.getServizio().getNome()!=null &&
  3365.                         pa.getServizio().getVersione()!=null){
  3366.                     idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(pa.getServizio().getTipo(), pa.getServizio().getNome(),
  3367.                             idSoggettoErogatore, pa.getServizio().getVersione());
  3368.                 }
  3369.             }
  3370.            
  3371.            
  3372.             // --- check elementi riferiti ---
  3373.            
  3374.             // soggetto proprietario
  3375.             if(this.importerEngine.existsSoggettoConfigurazione(idSoggettoProprietario) == false ){
  3376.                 throw new Exception("Soggetto proprietario ["+idSoggettoProprietario+"] non esistente");
  3377.             }
  3378.            
  3379.             // soggetto erogatore
  3380.             if(idSoggettoErogatore!=null){
  3381.                 if(this.importerEngine.existsSoggettoRegistro(idSoggettoErogatore) == false ){
  3382.                     throw new Exception("Soggetto erogatore riferito nella PA ["+idSoggettoErogatore+"] non esistente");
  3383.                 }
  3384.             }
  3385.            
  3386.             // accordo servizio parte specifica
  3387.             if(idServizio!=null){
  3388.                 if(this.importerEngine.existsAccordoServizioParteSpecifica(idServizio) == false ){
  3389.                     throw new Exception("Servizio riferito nella PA ["+idServizio+"] non esistente");
  3390.                 }
  3391.             }
  3392.            
  3393.             // ruoli
  3394.             if(archivePortaApplicativa.getPortaApplicativa().getRuoli()!=null && archivePortaApplicativa.getPortaApplicativa().getRuoli().sizeRuoloList()>0){
  3395.                 for (int i = 0; i < archivePortaApplicativa.getPortaApplicativa().getRuoli().sizeRuoloList(); i++) {
  3396.                     IDRuolo idRuolo = new IDRuolo(archivePortaApplicativa.getPortaApplicativa().getRuoli().getRuolo(i).getNome());
  3397.                     if(this.importerEngine.existsRuolo(idRuolo) == false ){
  3398.                         throw new Exception("Ruolo ["+idRuolo.getNome()+"] associato non esiste");
  3399.                     }  
  3400.                 }
  3401.             }
  3402.            
  3403.             // scope
  3404.             if(archivePortaApplicativa.getPortaApplicativa().getScope()!=null && archivePortaApplicativa.getPortaApplicativa().getScope().sizeScopeList()>0){
  3405.                 for (int i = 0; i < archivePortaApplicativa.getPortaApplicativa().getScope().sizeScopeList(); i++) {
  3406.                     IDScope idScope = new IDScope(archivePortaApplicativa.getPortaApplicativa().getScope().getScope(i).getNome());
  3407.                     if(this.importerEngine.existsScope(idScope) == false ){
  3408.                         throw new Exception("Scope ["+idScope.getNome()+"] associato non esiste");
  3409.                     }  
  3410.                 }
  3411.             }
  3412.            
  3413.             // soggetti autorizzati
  3414.             if(archivePortaApplicativa.getPortaApplicativa().getSoggetti()!=null && archivePortaApplicativa.getPortaApplicativa().getSoggetti().sizeSoggettoList()>0){
  3415.                 for (int i = 0; i < archivePortaApplicativa.getPortaApplicativa().getSoggetti().sizeSoggettoList(); i++) {
  3416.                     IDSoggetto idSoggettoAuth = new IDSoggetto(archivePortaApplicativa.getPortaApplicativa().getSoggetti().getSoggetto(i).getTipo(),
  3417.                             archivePortaApplicativa.getPortaApplicativa().getSoggetti().getSoggetto(i).getNome());
  3418.                     if(this.importerEngine.existsSoggettoRegistro(idSoggettoAuth) == false ){
  3419.                         throw new Exception("Soggetto ["+idSoggettoAuth+"] indicato nel controllo degli accessi non esistente");
  3420.                     }  
  3421.                 }
  3422.             }
  3423.            
  3424.             // servizi applicativi autorizzati
  3425.             if(archivePortaApplicativa.getPortaApplicativa().getServiziApplicativiAutorizzati()!=null && archivePortaApplicativa.getPortaApplicativa().getServiziApplicativiAutorizzati().sizeServizioApplicativoList()>0){
  3426.                 for (int i = 0; i < archivePortaApplicativa.getPortaApplicativa().getServiziApplicativiAutorizzati().sizeServizioApplicativoList(); i++) {
  3427.                     IDSoggetto idSoggettoAuth = new IDSoggetto(archivePortaApplicativa.getPortaApplicativa().getServiziApplicativiAutorizzati().getServizioApplicativo(i).getTipoSoggettoProprietario(),
  3428.                             archivePortaApplicativa.getPortaApplicativa().getServiziApplicativiAutorizzati().getServizioApplicativo(i).getNomeSoggettoProprietario());
  3429.                     IDServizioApplicativo idSaAuth = new IDServizioApplicativo();
  3430.                     idSaAuth.setIdSoggettoProprietario(idSoggettoAuth);
  3431.                     idSaAuth.setNome(archivePortaApplicativa.getPortaApplicativa().getServiziApplicativiAutorizzati().getServizioApplicativo(i).getNome());
  3432.                     if(this.importerEngine.existsServizioApplicativo(idSaAuth) == false ){
  3433.                         throw new Exception("Applicativo ["+idSaAuth+"] indicato nel controllo degli accessi non esistente");
  3434.                     }  
  3435.                 }
  3436.             }
  3437.            
  3438.             // servizi applicativi erogatori
  3439.             if(archivePortaApplicativa.getPortaApplicativa().getServizioApplicativoList()!=null && archivePortaApplicativa.getPortaApplicativa().sizeServizioApplicativoList()>0){
  3440.                 for (int i = 0; i < archivePortaApplicativa.getPortaApplicativa().sizeServizioApplicativoList(); i++) {
  3441.                     IDServizioApplicativo idSaErogatore = new IDServizioApplicativo();
  3442.                     idSaErogatore.setIdSoggettoProprietario(idSoggettoErogatore);
  3443.                     idSaErogatore.setNome(archivePortaApplicativa.getPortaApplicativa().getServizioApplicativo(i).getNome());
  3444.                     if(this.importerEngine.existsServizioApplicativo(idSaErogatore) == false ){
  3445.                         throw new Exception("Servizio Applicativo ["+idSaErogatore+"] (erogatore) non esistente");
  3446.                     }  
  3447.                 }
  3448.             }
  3449.            
  3450.             // token validazione
  3451.             if(archivePortaApplicativa.getPortaApplicativa().getGestioneToken()!=null &&
  3452.                     archivePortaApplicativa.getPortaApplicativa().getGestioneToken().getPolicy()!=null &&
  3453.                     !"".equals(archivePortaApplicativa.getPortaApplicativa().getGestioneToken().getPolicy())) {
  3454.                 if(this.importerEngine.existsGenericProperties_validation(archivePortaApplicativa.getPortaApplicativa().getGestioneToken().getPolicy()) == false) {
  3455.                     throw new Exception("Token Policy Validazione ["+archivePortaApplicativa.getPortaApplicativa().getGestioneToken().getPolicy()+"] indicato nel controllo degli accessi non esistente");
  3456.                 }
  3457.             }
  3458.            
  3459.             // plugin
  3460.             if(this.checkExistsPluginConfigurazione) {
  3461.                
  3462.                 if(archivePortaApplicativa.getPortaApplicativa()!=null && StringUtils.isNotEmpty(archivePortaApplicativa.getPortaApplicativa().getAutenticazione())) {
  3463.                     TipoAutenticazione tipo = TipoAutenticazione.toEnumConstant(archivePortaApplicativa.getPortaApplicativa().getAutenticazione(), false);
  3464.                     if(tipo==null) {
  3465.                         if(this.importerEngine.existsPluginClasse(TipoPlugin.AUTENTICAZIONE.getValue(), archivePortaApplicativa.getPortaApplicativa().getAutenticazione()) == false ){
  3466.                             throw new Exception("Plugin '"+TipoPlugin.AUTENTICAZIONE.getValue()+"' ["+archivePortaApplicativa.getPortaApplicativa().getAutenticazione()+"] non esistente nel registro");
  3467.                         }
  3468.                     }
  3469.                 }
  3470.                 if(archivePortaApplicativa.getPortaApplicativa()!=null && StringUtils.isNotEmpty(archivePortaApplicativa.getPortaApplicativa().getAutorizzazione())) {
  3471.                     TipoAutorizzazione tipo = TipoAutorizzazione.toEnumConstant(archivePortaApplicativa.getPortaApplicativa().getAutorizzazione(), false);
  3472.                     if(tipo==null) {
  3473.                         if(this.importerEngine.existsPluginClasse(TipoPlugin.AUTORIZZAZIONE.getValue(), archivePortaApplicativa.getPortaApplicativa().getAutorizzazione()) == false ){
  3474.                             throw new Exception("Plugin '"+TipoPlugin.AUTORIZZAZIONE.getValue()+"' ["+archivePortaApplicativa.getPortaApplicativa().getAutorizzazione()+"] non esistente nel registro");
  3475.                         }
  3476.                     }
  3477.                 }
  3478.                 if(archivePortaApplicativa.getPortaApplicativa()!=null && StringUtils.isNotEmpty(archivePortaApplicativa.getPortaApplicativa().getAutorizzazioneContenuto())) {
  3479.                     if(!CostantiConfigurazione.AUTORIZZAZIONE_CONTENUTO_BUILT_IN.equals(archivePortaApplicativa.getPortaApplicativa().getAutorizzazioneContenuto())) {
  3480.                         if(this.importerEngine.existsPluginClasse(TipoPlugin.AUTORIZZAZIONE_CONTENUTI.getValue(), archivePortaApplicativa.getPortaApplicativa().getAutorizzazioneContenuto()) == false ){
  3481.                             throw new Exception("Plugin '"+TipoPlugin.AUTORIZZAZIONE_CONTENUTI.getValue()+"' ["+archivePortaApplicativa.getPortaApplicativa().getAutorizzazioneContenuto()+"] non esistente nel registro");
  3482.                         }
  3483.                     }
  3484.                 }
  3485.                 if(archivePortaApplicativa.getPortaApplicativa()!=null && archivePortaApplicativa.getPortaApplicativa().getBehaviour()!=null && archivePortaApplicativa.getPortaApplicativa().getBehaviour().getNome()!=null) {
  3486.                     TipoBehaviour behaviourType = TipoBehaviour.toEnumConstant(archivePortaApplicativa.getPortaApplicativa().getBehaviour().getNome());
  3487.                     if(TipoBehaviour.CUSTOM.equals(behaviourType)){
  3488.                         if(this.importerEngine.existsPluginClasse(TipoPlugin.BEHAVIOUR.getValue(), archivePortaApplicativa.getPortaApplicativa().getBehaviour().getNome()) == false ){
  3489.                             throw new Exception("Plugin '"+TipoPlugin.BEHAVIOUR.getValue()+"' ["+archivePortaApplicativa.getPortaApplicativa().getBehaviour().getNome()+"] non esistente nel registro");
  3490.                         }
  3491.                     }
  3492.                 }
  3493. //              // TODO:
  3494. //              TipoPlugin.INTEGRAZIONE;
  3495. //              TipoPlugin.MESSAGE_HANDLER;
  3496.                
  3497.             }
  3498.            
  3499.            
  3500.             // --- compatibilita' elementi riferiti ---
  3501.             String protocolloAssociatoSoggettoProprietario = this.protocolFactoryManager.getProtocolByOrganizationType(idSoggettoProprietario.getTipo());
  3502.             // erogatore
  3503.             String protocolloAssociatoSoggettoErogatore = this.protocolFactoryManager.getProtocolByOrganizationType(idSoggettoErogatore.getTipo());
  3504.             if(protocolloAssociatoSoggettoProprietario.equals(protocolloAssociatoSoggettoErogatore)==false){
  3505.                 throw new Exception("SoggettoErogatore ["+idSoggettoErogatore+"] (protocollo:"+protocolloAssociatoSoggettoErogatore+
  3506.                         ") non utilizzabile in una porta applicativa appartenete al soggetto ["+idSoggettoProprietario+"] (protocollo:"+protocolloAssociatoSoggettoProprietario+")");
  3507.             }
  3508.             // accordo di servizio parte specifica
  3509.             if(idServizio!=null) {
  3510.                 String protocolloAssociatoAccordoParteSpecifica = this.protocolFactoryManager.getProtocolByServiceType(idServizio.getTipo());
  3511.                 if(protocolloAssociatoSoggettoProprietario.equals(protocolloAssociatoAccordoParteSpecifica)==false){
  3512.                     throw new Exception("AccordoServizioParteSpecifica ["+idServizio+"] (protocollo:"+protocolloAssociatoAccordoParteSpecifica+
  3513.                             ") con servizio non utilizzabile in una porta applicativa appartenete al soggetto ["+idSoggettoProprietario+"] (protocollo:"+protocolloAssociatoSoggettoProprietario+")");
  3514.                 }
  3515.                 String protocolloAssociatoSoggettoAccordoParteSpecifica = this.protocolFactoryManager.getProtocolByOrganizationType(idServizio.getSoggettoErogatore().getTipo());
  3516.                 if(protocolloAssociatoSoggettoProprietario.equals(protocolloAssociatoSoggettoAccordoParteSpecifica)==false){
  3517.                     throw new Exception("AccordoServizioParteSpecifica ["+idServizio+"] (protocollo:"+protocolloAssociatoSoggettoAccordoParteSpecifica+
  3518.                             ") con soggetto non utilizzabile in una porta applicativa appartenete al soggetto ["+idSoggettoProprietario+"] (protocollo:"+protocolloAssociatoSoggettoProprietario+")");
  3519.                 }
  3520.             }
  3521.            
  3522.            
  3523.             // ---- visibilita' oggetto riferiti ---
  3524.             org.openspcoop2.core.config.Soggetto soggetto = this.importerEngine.getSoggettoConfigurazione(idSoggettoProprietario);
  3525.             if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  3526.                 if(this.userLogin.equals(soggetto.getSuperUser())==false){
  3527.                     throw new Exception("Il soggetto proprietario ["+idSoggettoProprietario+"] non è visibile/utilizzabile dall'utente collegato ("+this.userLogin+")");
  3528.                 }
  3529.             }
  3530.             Soggetto soggettoErogatore = null;
  3531.             AccordoServizioParteSpecifica accordoServizioParteSpecifica = null;
  3532.             if(idSoggettoErogatore!=null){
  3533.                 soggettoErogatore = this.importerEngine.getSoggettoRegistro(idSoggettoErogatore);
  3534.                 if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  3535.                     if(this.userLogin.equals(soggettoErogatore.getSuperUser())==false){
  3536.                         throw new Exception("Il soggetto erogatore riferito nella PA ["+idSoggettoErogatore+"] non è visibile/utilizzabile dall'utente collegato ("+this.userLogin+")");
  3537.                     }
  3538.                 }
  3539.             }
  3540.             if(idServizio!=null){
  3541.                 accordoServizioParteSpecifica = this.importerEngine.getAccordoServizioParteSpecifica(idServizio);
  3542.                 if(this.importerEngine.isVisioneOggettiGlobale(this.userLogin)==false){
  3543.                     if(this.userLogin.equals(accordoServizioParteSpecifica.getSuperUser())==false){
  3544.                         throw new Exception("Il servizio riferito nella PA ["+idServizio+"] non è visibile/utilizzabile dall'utente collegato ("+this.userLogin+")");
  3545.                     }
  3546.                 }
  3547.             }
  3548.            
  3549.            
  3550.             // --- set dati obbligatori nel db ----
  3551.            
  3552.             //pa.setSuperUser(this.userLogin);
  3553.             // L'oggetto non contiene informazione di visibilita, la eredita dal soggetto
  3554.            
  3555.             if(pa.getSoggettoVirtuale()!=null){
  3556.                 pa.getSoggettoVirtuale().setId(soggettoErogatore.getId());
  3557.             }
  3558.             if(idServizio!=null){
  3559.                 pa.getServizio().setId(accordoServizioParteSpecifica.getId());
  3560.             }
  3561.            
  3562.            
  3563.            
  3564.             // --- ora registrazione
  3565.             pa.setOraRegistrazione(DateManager.getDate());
  3566.            
  3567.            
  3568.             // --- set dati obbligatori nel db ----
  3569.             org.openspcoop2.core.config.driver.utils.XMLDataConverter.
  3570.                 impostaInformazioniConfigurazione_PortaApplicativa(pa);
  3571.            
  3572.             // --- correzione nomi provider per backward compatibility ----
  3573.             MerlinProvider.correctProviderName(pa.getMessageSecurity());
  3574.            
  3575.            
  3576.             // --- upload ---
  3577.             if(this.importerEngine.existsPortaApplicativa(idPortaApplicativa)){
  3578.                
  3579.                 org.openspcoop2.core.config.PortaApplicativa old = this.importerEngine.getPortaApplicativa(idPortaApplicativa);
  3580.                 pa.setId(old.getId());
  3581.                 IDPortaApplicativa oldIDPortaApplicativaForUpdate = new IDPortaApplicativa();
  3582.                 oldIDPortaApplicativaForUpdate.setNome(old.getNome());
  3583.                 pa.setOldIDPortaApplicativaForUpdate(oldIDPortaApplicativaForUpdate);
  3584.                
  3585.                 // visibilita' oggetto stesso per update
  3586.                 // L'oggetto non contiene informazione di visibilita, la eredita dal soggetto

  3587.                 // update
  3588.                 this.importerEngine.updatePortaApplicativa(pa);
  3589.                 detail.setState(ArchiveStatoImport.UPDATED);
  3590.             }
  3591.             // --- create ---
  3592.             else{
  3593.                 this.importerEngine.createPortaApplicativa(pa);
  3594.                 detail.setState(ArchiveStatoImport.CREATED);
  3595.             }
  3596.                

  3597.            
  3598.         }          
  3599.         catch(Exception e){
  3600.             this.log.error("Errore durante l'import della porta applicativa ["+idPortaApplicativa+"]: "+e.getMessage(),e);
  3601.             detail.setState(ArchiveStatoImport.ERROR);
  3602.             detail.setException(e);
  3603.         }
  3604.     }
  3605.    
  3606.    
  3607.    
  3608.    
  3609.     public void importControlloTraffico_configurazione(org.openspcoop2.core.controllo_traffico.ConfigurazioneGenerale configurazione,
  3610.             ArchiveEsitoImportDetailConfigurazione<org.openspcoop2.core.controllo_traffico.ConfigurazioneGenerale> detail){    
  3611.         try{
  3612.             // --- check abilitazione ---
  3613.             if(this.importConfigurazione==false){
  3614.                 detail.setState(ArchiveStatoImport.IMPORT_CONFIG_NOT_ENABLED);
  3615.                 return;
  3616.             }
  3617.            
  3618.             // update
  3619.             this.importerEngine.updateControlloTraffico_configurazione(configurazione);
  3620.             detail.setState(ArchiveStatoImport.UPDATED);
  3621.         }          
  3622.         catch(Exception e){
  3623.             this.log.error("Errore durante l'import della configurazione di controllo del traffico: "+e.getMessage(),e);
  3624.             detail.setState(ArchiveStatoImport.ERROR);
  3625.             detail.setException(e);
  3626.         }
  3627.     }
  3628.    
  3629.    
  3630.     public void importControlloTraffico_configurationPolicy(ArchiveConfigurationPolicy archivePolicy,ArchiveEsitoImportDetail detail){
  3631.        
  3632.         String nomePolicy = archivePolicy.getNomePolicy();
  3633.         try{
  3634.            
  3635.             // --- check abilitazione ---
  3636.             if(this.importPolicyConfigurazione==false){
  3637.                 detail.setState(ArchiveStatoImport.IMPORT_POLICY_CONFIG_NOT_ENABLED);
  3638.                 return;
  3639.             }
  3640.            
  3641.             // --- check esistenza ---
  3642.             if(this.updateAbilitato==false){
  3643.                 if(this.importerEngine.existsControlloTraffico_configurationPolicy(nomePolicy)){
  3644.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  3645.                     return;
  3646.                 }
  3647.             }
  3648.            
  3649.                
  3650.             // --- check elementi riferiti ---
  3651.             // non esistenti
  3652.            
  3653.            
  3654.             // --- compatibilita' elementi riferiti ---
  3655.             // non esistenti
  3656.            
  3657.            
  3658.             // ---- visibilita' oggetto riferiti ---
  3659.             // non esistenti
  3660.            
  3661.            
  3662.             // --- set dati obbligatori nel db ----
  3663.             // non esistenti
  3664.            
  3665.            
  3666.             // --- ora registrazione
  3667.             // non esistenti
  3668.            
  3669.            
  3670.             // --- upload ---
  3671.             boolean create = false;
  3672.             if(this.importerEngine.existsControlloTraffico_configurationPolicy(nomePolicy)){
  3673.                
  3674.                 ConfigurazionePolicy old = this.importerEngine.getControlloTraffico_configurationPolicy(nomePolicy);
  3675.                 archivePolicy.getPolicy().setId(old.getId());
  3676.                
  3677.                 // visibilita' oggetto stesso per update
  3678.                 // non esistenti

  3679.                 // update
  3680.                 this.importerEngine.updateControlloTraffico_configurationPolicy(archivePolicy.getPolicy());
  3681.                 create = false;
  3682.             }
  3683.             // --- create ---
  3684.             else{
  3685.                 this.importerEngine.createControlloTraffico_configurationPolicy(archivePolicy.getPolicy());
  3686.                 create = true;
  3687.             }
  3688.                
  3689.            
  3690.             // --- info ---
  3691.             if(create){
  3692.                 detail.setState(ArchiveStatoImport.CREATED);
  3693.             }else{
  3694.                 detail.setState(ArchiveStatoImport.UPDATED);
  3695.             }
  3696.         }          
  3697.         catch(Exception e){
  3698.             this.log.error("Errore durante l'import della configurazione della policy ["+nomePolicy+"]: "+e.getMessage(),e);
  3699.             detail.setState(ArchiveStatoImport.ERROR);
  3700.             detail.setException(e);
  3701.         }
  3702.     }
  3703.    
  3704.    
  3705.     public void importControlloTraffico_activePolicy(ArchiveActivePolicy archivePolicy,ArchiveEsitoImportDetail detail,HashMap<String, String> instanceSerialIdsForPolicy){
  3706.        
  3707.         AttivazionePolicy attivazionePolicy = archivePolicy.getPolicy();
  3708.         String aliasPolicy = archivePolicy.getAliasPolicy();
  3709.         RuoloPolicy ruoloPorta = archivePolicy.getRuoloPorta();
  3710.         String nomePorta = archivePolicy.getNomePorta();
  3711.        
  3712.         String tipoPolicy = "configurazione";
  3713.         if(ruoloPorta!=null && nomePorta!=null) {
  3714.             tipoPolicy = ruoloPorta.toString()+" "+nomePorta;
  3715.         }

  3716.         try{
  3717.             boolean policyGlobale = archivePolicy.isPolicyGlobale();
  3718.                        
  3719.             // --- check abilitazione ---
  3720.             if(policyGlobale && this.importPolicyConfigurazione==false){ // se non e' globale la policy di attivazione va aggiunta sempre poiche' associata all'erogazione o alla fruizione
  3721.                 detail.setState(ArchiveStatoImport.IMPORT_POLICY_CONFIG_NOT_ENABLED);
  3722.                 return;
  3723.             }
  3724.            
  3725.             // --- check esistenza ---
  3726.             if(this.updateAbilitato==false){
  3727.                 if(this.importerEngine.existsControlloTraffico_activePolicy(ruoloPorta, nomePorta, aliasPolicy)){
  3728.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  3729.                     return;
  3730.                 }
  3731.             }
  3732.            
  3733.                
  3734.             // --- check elementi riferiti ---
  3735.            
  3736.             if(attivazionePolicy==null) {
  3737.                 throw new Exception("Configurazione della policy non definita");
  3738.             }
  3739.            
  3740.             // policy
  3741.             if(this.importerEngine.existsControlloTraffico_configurationPolicy(attivazionePolicy.getIdPolicy()) == false ){
  3742.                 throw new Exception("Configurazione della policy ["+attivazionePolicy.getIdPolicy()+"] non esistente nel registro");
  3743.             }
  3744.            
  3745.            
  3746.             // --- compatibilita' elementi riferiti ---
  3747.            
  3748.             // plugin
  3749.             if(this.checkExistsPluginConfigurazione) {
  3750.                
  3751.                 if(attivazionePolicy!=null && attivazionePolicy.getFiltro()!=null && attivazionePolicy.getFiltro().isEnabled() &&
  3752.                         attivazionePolicy.getFiltro().isInformazioneApplicativaEnabled() &&
  3753.                         StringUtils.isNotEmpty(attivazionePolicy.getFiltro().getInformazioneApplicativaTipo())) {
  3754.                     TipoFiltroApplicativo tipoFiltro = TipoFiltroApplicativo.toEnumConstant(attivazionePolicy.getFiltro().getInformazioneApplicativaTipo(), false);
  3755.                     if(TipoFiltroApplicativo.PLUGIN_BASED.equals(tipoFiltro)) {
  3756.                         if(this.importerEngine.existsPluginClasse(TipoPlugin.RATE_LIMITING.getValue(), attivazionePolicy.getFiltro().getInformazioneApplicativaNome()) == false ){
  3757.                             throw new Exception("Plugin '"+TipoPlugin.RATE_LIMITING.getValue()+"' ["+attivazionePolicy.getFiltro().getInformazioneApplicativaNome()+"] non esistente nel registro");
  3758.                         }
  3759.                     }
  3760.                 }
  3761.                 if(attivazionePolicy!=null && attivazionePolicy.getGroupBy()!=null && attivazionePolicy.getGroupBy().isEnabled() &&
  3762.                         attivazionePolicy.getGroupBy().isInformazioneApplicativaEnabled() &&
  3763.                         StringUtils.isNotEmpty(attivazionePolicy.getGroupBy().getInformazioneApplicativaTipo())) {
  3764.                     TipoFiltroApplicativo tipoFiltro = TipoFiltroApplicativo.toEnumConstant(attivazionePolicy.getGroupBy().getInformazioneApplicativaTipo(), false);
  3765.                     if(TipoFiltroApplicativo.PLUGIN_BASED.equals(tipoFiltro)) {
  3766.                         if(this.importerEngine.existsPluginClasse(TipoPlugin.RATE_LIMITING.getValue(), attivazionePolicy.getGroupBy().getInformazioneApplicativaNome()) == false ){
  3767.                             throw new Exception("Plugin '"+TipoPlugin.RATE_LIMITING.getValue()+"' ["+attivazionePolicy.getGroupBy().getInformazioneApplicativaNome()+"] non esistente nel registro");
  3768.                         }
  3769.                     }
  3770.                 }
  3771.                
  3772.             }
  3773.            
  3774.            
  3775.             // ---- visibilita' oggetto riferiti ---
  3776.             // non esistenti
  3777.            
  3778.            
  3779.             // --- set dati obbligatori nel db ----
  3780.             // non esistenti
  3781.            
  3782.            
  3783.             // --- ora registrazione
  3784.             // non esistenti
  3785.            
  3786.            
  3787.             // --- upload ---
  3788.             boolean create = false;
  3789.             if(this.importerEngine.existsControlloTraffico_activePolicy(ruoloPorta, nomePorta, aliasPolicy)){
  3790.                
  3791.                 AttivazionePolicy old = this.importerEngine.getControlloTraffico_activePolicy(ruoloPorta, nomePorta, aliasPolicy);
  3792.                 attivazionePolicy.setId(old.getId());
  3793.                 attivazionePolicy.setOldIdActivePolicy(new IdActivePolicy());
  3794.                 attivazionePolicy.getOldIdActivePolicy().setNome(old.getIdActivePolicy());
  3795.                 if(old.getIdPolicy().equals(attivazionePolicy.getIdPolicy())) {
  3796.                     attivazionePolicy.setIdActivePolicy(old.getIdActivePolicy()); // uso lo stesso id dinamico già calcolato sul sistema se non è cambiata la policy
  3797.                 }
  3798.                 else {
  3799.                     // ricalcolo
  3800.                     attivazionePolicy.setIdActivePolicy(this.buildIdActivePolicy(instanceSerialIdsForPolicy, attivazionePolicy.getIdPolicy()));
  3801.                 }
  3802.                 attivazionePolicy.setPosizione(old.getPosizione()); // in caso di aggiornamento non devo influenzare la posizione
  3803.                
  3804.                 // visibilita' oggetto stesso per update
  3805.                 // non esistenti

  3806.                 // update
  3807.                 this.importerEngine.updateControlloTraffico_activePolicy(attivazionePolicy);
  3808.                 create = false;
  3809.             }
  3810.             // --- create ---
  3811.             else{
  3812.                 // calcolo in maniera dinamica l'id
  3813.                 attivazionePolicy.setIdActivePolicy(this.buildIdActivePolicy(instanceSerialIdsForPolicy, attivazionePolicy.getIdPolicy()));
  3814.                
  3815.                 this.importerEngine.createControlloTraffico_activePolicy(attivazionePolicy,this.log);
  3816.                 create = true;
  3817.             }
  3818.                
  3819.            
  3820.             // --- info ---
  3821.             if(create){
  3822.                 detail.setState(ArchiveStatoImport.CREATED);
  3823.             }else{
  3824.                 detail.setState(ArchiveStatoImport.UPDATED);
  3825.             }
  3826.         }          
  3827.         catch(Exception e){
  3828.             this.log.error("Errore durante l'import dell'attivazione della policy ["+aliasPolicy+"] ("+tipoPolicy+"): "+e.getMessage(),e);
  3829.             detail.setState(ArchiveStatoImport.ERROR);
  3830.             detail.setException(e);
  3831.         }
  3832.     }
  3833.     private String buildIdActivePolicy(HashMap<String, String> instanceSerialIdsForPolicy, String idPolicy) throws RegistryException {
  3834.         String serialId = null;
  3835.         if(instanceSerialIdsForPolicy.containsKey(idPolicy)) {
  3836.             serialId = instanceSerialIdsForPolicy.remove(idPolicy);
  3837.             serialId = ControlloTrafficoDriverUtils.incrementPolicyInstanceSerialId(serialId);
  3838.             instanceSerialIdsForPolicy.put(idPolicy, serialId);
  3839.         }
  3840.         else {
  3841.             serialId = this.importerEngine.getNextPolicyInstanceSerialId(idPolicy, this.log);
  3842.             instanceSerialIdsForPolicy.put(idPolicy, serialId);
  3843.         }
  3844.         String idActive = ControlloTrafficoDriverUtils.buildIdActivePolicy(idPolicy, serialId);
  3845.         return idActive;
  3846.     }
  3847.    
  3848.    
  3849.     public void importAllarme(ArchiveAllarme archiveAllarme,ArchiveEsitoImportDetail detail,HashMap<String, String> instanceSerialIdsForAlarm){
  3850.        
  3851.         Allarme allarme = archiveAllarme.getAllarme();
  3852.         String aliasAllarme = archiveAllarme.getAlias();
  3853.         RuoloPorta ruoloPorta = archiveAllarme.getRuoloPorta();
  3854.         String nomePorta = archiveAllarme.getNomePorta();
  3855.        
  3856.         String tipoAllarme = "configurazione";
  3857.         if(ruoloPorta!=null && nomePorta!=null) {
  3858.             tipoAllarme = ruoloPorta.toString()+" "+nomePorta;
  3859.         }

  3860.         try{
  3861.             boolean allarmeGlobale = archiveAllarme.isAllarmeGlobale();
  3862.                        
  3863.             // --- check abilitazione ---
  3864.             if(allarmeGlobale && this.importPolicyConfigurazione==false){ // se non e' globale l'allarme va aggiunto sempre poiche' associata all'erogazione o alla fruizione
  3865.                 detail.setState(ArchiveStatoImport.IMPORT_POLICY_CONFIG_NOT_ENABLED);
  3866.                 return;
  3867.             }
  3868.            
  3869.             // --- check esistenza ---
  3870.             if(this.updateAbilitato==false){
  3871.                 if(this.importerEngine.existsAllarme(ruoloPorta, nomePorta, aliasAllarme)){
  3872.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  3873.                     return;
  3874.                 }
  3875.             }
  3876.            
  3877.                
  3878.             // --- check elementi riferiti ---
  3879.            
  3880.             // plugin
  3881.             if(this.importerEngine.existsPluginClasse(TipoPlugin.ALLARME.getValue(), allarme.getTipo()) == false ){
  3882.                 throw new Exception("Plugin '"+TipoPlugin.ALLARME.getValue()+"' ["+allarme.getTipo()+"] non esistente nel registro");
  3883.             }
  3884.            
  3885.            
  3886.             // --- compatibilita' elementi riferiti ---
  3887.             // non esistenti
  3888.            
  3889.            
  3890.             // ---- visibilita' oggetto riferiti ---
  3891.             // non esistenti
  3892.            
  3893.            
  3894.             // --- set dati obbligatori nel db ----
  3895.             // non esistenti
  3896.            
  3897.            
  3898.             // --- ora registrazione
  3899.             // non esistenti
  3900.            
  3901.            
  3902.             // --- upload ---
  3903.             boolean create = false;
  3904.             if(this.importerEngine.existsAllarme(ruoloPorta, nomePorta, aliasAllarme)){
  3905.                
  3906.                 Allarme old = this.importerEngine.getAllarme(ruoloPorta, nomePorta, aliasAllarme);
  3907.                 allarme.setId(old.getId());
  3908. //              allarme.setOldIdActivePolicy(new IdActivePolicy());
  3909. //              allarme.getOldIdActivePolicy().setNome(old.getIdActivePolicy());
  3910. //              if(old.getIdPolicy().equals(allarme.getIdPolicy())) {
  3911.                 allarme.setNome(old.getNome()); // uso lo stesso id dinamico già calcolato sul sistema se non è cambiato il tipo di plugin
  3912. //              }
  3913. //              else {
  3914. //                  // ricalcolo
  3915. //                  allarme.setIdActivePolicy(this.buildIdActivePolicy(instanceSerialIdsForAlarm, allarme.getIdPolicy()));
  3916. //              }
  3917.                
  3918.                 if(allarme.sizeAllarmeParametroList()>0) {
  3919.                     if(old.sizeAllarmeParametroList()>0) {
  3920.                         for (AllarmeParametro param : allarme.getAllarmeParametroList()) {
  3921.                             for (AllarmeParametro oldParam : old.getAllarmeParametroList()) {
  3922.                                 if(oldParam.getIdParametro().equals(param.getIdParametro())) {
  3923.                                     param.setId(oldParam.getId());
  3924.                                     break;
  3925.                                 }
  3926.                             }
  3927.                         }
  3928.                     }
  3929.                 }
  3930.                
  3931.                 // visibilita' oggetto stesso per update
  3932.                 // non esistenti

  3933.                 // update
  3934.                 this.importerEngine.updateAllarme(allarme, this.log);
  3935.                 create = false;
  3936.             }
  3937.             // --- create ---
  3938.             else{
  3939.                 // calcolo in maniera dinamica l'id
  3940.                 allarme.setNome(this.buildIdAllarme(instanceSerialIdsForAlarm, allarme.getTipo()));
  3941.                
  3942.                 this.importerEngine.createAllarme(allarme, this.log);
  3943.                 create = true;
  3944.             }
  3945.                
  3946.            
  3947.             // --- info ---
  3948.             if(create){
  3949.                 detail.setState(ArchiveStatoImport.CREATED);
  3950.             }else{
  3951.                 detail.setState(ArchiveStatoImport.UPDATED);
  3952.             }
  3953.         }          
  3954.         catch(Exception e){
  3955.             this.log.error("Errore durante l'import dell'allarme ["+aliasAllarme+"] ("+tipoAllarme+"): "+e.getMessage(),e);
  3956.             detail.setState(ArchiveStatoImport.ERROR);
  3957.             detail.setException(e);
  3958.         }
  3959.     }
  3960.     private String buildIdAllarme(HashMap<String, String> instanceSerialIdsForAlarm, String tipoPlugin) throws RegistryException {
  3961.         String serialId = null;
  3962.         if(instanceSerialIdsForAlarm.containsKey(tipoPlugin)) {
  3963.             serialId = instanceSerialIdsForAlarm.remove(tipoPlugin);
  3964.             serialId = AllarmiDriverUtils.incrementAlarmInstanceSerialId(serialId);
  3965.             instanceSerialIdsForAlarm.put(tipoPlugin, serialId);
  3966.         }
  3967.         else {
  3968.             serialId = this.importerEngine.getNextAlarmInstanceSerialId(tipoPlugin, this.log);
  3969.             instanceSerialIdsForAlarm.put(tipoPlugin, serialId);
  3970.         }
  3971.         String idActive = AllarmiDriverUtils.buildIdAlarm(tipoPlugin, serialId);
  3972.         return idActive;
  3973.     }
  3974.    
  3975.    
  3976.     public void importTokenPolicy(ArchiveTokenPolicy archivePolicy,ArchiveEsitoImportDetail detail){
  3977.         _importGenericProperties("Token Policy", archivePolicy, detail);
  3978.     }
  3979.     public void importAttributeAuthority(ArchiveAttributeAuthority archiveAA,ArchiveEsitoImportDetail detail){
  3980.         _importGenericProperties("Attribute Authority", archiveAA, detail);
  3981.     }
  3982.     public void _importGenericProperties(String oggetto, AbstractArchiveGenericProperties archiveGenericProperties,ArchiveEsitoImportDetail detail){
  3983.        
  3984.         if(archiveGenericProperties==null) {
  3985.             detail.setState(ArchiveStatoImport.ERROR);
  3986.             detail.setException(new Exception("archiveGenericProperties is null"));
  3987.             return;
  3988.         }
  3989.        
  3990.         String nomePolicy = archiveGenericProperties.getNomePolicy();
  3991.         String tipologiaPolicy = archiveGenericProperties.getTipologiaPolicy();
  3992.         try{
  3993.            
  3994.             // --- check abilitazione ---
  3995.             if(this.importPolicyConfigurazione==false){
  3996.                 detail.setState(ArchiveStatoImport.IMPORT_POLICY_CONFIG_NOT_ENABLED);
  3997.                 return;
  3998.             }
  3999.            
  4000.             // --- check esistenza ---
  4001.             if(this.updateAbilitato==false){
  4002.                 if(this.importerEngine.existsGenericProperties(tipologiaPolicy, nomePolicy)){
  4003.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  4004.                     return;
  4005.                 }
  4006.             }
  4007.            
  4008.                
  4009.             // --- check elementi riferiti ---
  4010.             // non esistenti
  4011.            
  4012.            
  4013.             // --- compatibilita' elementi riferiti ---

  4014.             // plugin
  4015.             if(this.checkExistsPluginConfigurazione) {
  4016.                
  4017.                 boolean tokenValidazione = CostantiConfigurazione.GENERIC_PROPERTIES_TOKEN_TIPOLOGIA_VALIDATION.equals(archiveGenericProperties.getTipologiaPolicy());
  4018.                 boolean tokenNegoziazione = CostantiConfigurazione.GENERIC_PROPERTIES_TOKEN_TIPOLOGIA_RETRIEVE.equals(archiveGenericProperties.getTipologiaPolicy());
  4019.                 boolean attributeAuthority = CostantiConfigurazione.GENERIC_PROPERTIES_ATTRIBUTE_AUTHORITY.equals(archiveGenericProperties.getTipologiaPolicy());
  4020.                 List<String> tokenName = new ArrayList<>();
  4021.                 TipoPlugin tipoPlugin = null;
  4022.                 if(tokenValidazione) {
  4023.                     tokenName.add(CostantiConfigurazione.POLICY_VALIDAZIONE_CLAIMS_PARSER_PLUGIN_TYPE);
  4024.                     tokenName.add(CostantiConfigurazione.POLICY_INTROSPECTION_CLAIMS_PARSER_PLUGIN_TYPE);
  4025.                     tokenName.add(CostantiConfigurazione.POLICY_USER_INFO_CLAIMS_PARSER_PLUGIN_TYPE);
  4026.                     tipoPlugin = TipoPlugin.TOKEN_VALIDAZIONE;
  4027.                 }
  4028.                 else if(tokenNegoziazione) {
  4029.                     tokenName.add(CostantiConfigurazione.POLICY_RETRIEVE_TOKEN_PARSER_PLUGIN_TYPE);
  4030.                     tipoPlugin = TipoPlugin.TOKEN_NEGOZIAZIONE;
  4031.                 }
  4032.                 else if(attributeAuthority) {
  4033.                     tokenName.add(CostantiConfigurazione.AA_RESPONSE_PARSER_PLUGIN_TYPE);
  4034.                     tipoPlugin = TipoPlugin.ATTRIBUTE_AUTHORITY;
  4035.                 }
  4036.                 if(!tokenName.isEmpty()) {
  4037.                     if(archiveGenericProperties!=null && archiveGenericProperties.getPolicy()!=null && archiveGenericProperties.getPolicy().sizePropertyList()>0) {
  4038.                         for (int i = 0; i < archiveGenericProperties.getPolicy().sizePropertyList(); i++) {
  4039.                             Property p = archiveGenericProperties.getPolicy().getProperty(i);
  4040.                             if(tokenName.contains(p.getNome())) {
  4041.                                 String gpName = p.getValore();
  4042.                                 if(gpName!=null && StringUtils.isNotEmpty(gpName) && !CostantiConfigurazione.POLICY_ID_NON_DEFINITA.equals(gpName)) {
  4043.                                     if(this.importerEngine.existsPluginClasse(tipoPlugin.getValue(), gpName) == false ){
  4044.                                         throw new Exception("Plugin '"+tipoPlugin.getValue()+"' ["+p.getValore()+"] non esistente nel registro");
  4045.                                     }  
  4046.                                 }
  4047.                             }
  4048.                         }
  4049.                     }
  4050.                 }
  4051.                
  4052.                 // ulteriore per token dynamic discovery
  4053.                 tokenName.clear();
  4054.                 if(tokenValidazione) {
  4055.                     tokenName.add(CostantiConfigurazione.POLICY_DYNAMIC_DISCOVERY_CLAIMS_PARSER_PLUGIN_TYPE);
  4056.                     tipoPlugin = TipoPlugin.TOKEN_DYNAMIC_DISCOVERY;
  4057.                 }
  4058.                 if(!tokenName.isEmpty()) {
  4059.                     if(archiveGenericProperties!=null && archiveGenericProperties.getPolicy()!=null && archiveGenericProperties.getPolicy().sizePropertyList()>0) {
  4060.                         for (int i = 0; i < archiveGenericProperties.getPolicy().sizePropertyList(); i++) {
  4061.                             Property p = archiveGenericProperties.getPolicy().getProperty(i);
  4062.                             if(tokenName.contains(p.getNome())) {
  4063.                                 String gpName = p.getValore();
  4064.                                 if(gpName!=null && StringUtils.isNotEmpty(gpName) && !CostantiConfigurazione.POLICY_ID_NON_DEFINITA.equals(gpName)) {
  4065.                                     if(this.importerEngine.existsPluginClasse(tipoPlugin.getValue(), gpName) == false ){
  4066.                                         throw new Exception("Plugin '"+tipoPlugin.getValue()+"' ["+p.getValore()+"] non esistente nel registro");
  4067.                                     }  
  4068.                                 }
  4069.                             }
  4070.                         }
  4071.                     }
  4072.                 }
  4073.             }
  4074.            
  4075.            
  4076.             // ---- visibilita' oggetto riferiti ---
  4077.             // non esistenti
  4078.            
  4079.            
  4080.             // --- set dati obbligatori nel db ----
  4081.             // non esistenti
  4082.            
  4083.            
  4084.             // --- ora registrazione
  4085.             // non esistenti
  4086.            
  4087.            
  4088.             // --- upload ---
  4089.             boolean create = false;
  4090.             if(this.importerEngine.existsGenericProperties(tipologiaPolicy, nomePolicy)){
  4091.                
  4092.                 GenericProperties old = this.importerEngine.getGenericProperties(tipologiaPolicy, nomePolicy);
  4093.                 archiveGenericProperties.getPolicy().setId(old.getId());
  4094.                
  4095.                 // visibilita' oggetto stesso per update
  4096.                 // non esistenti

  4097.                 // update
  4098.                 this.importerEngine.updateGenericProperties(archiveGenericProperties.getPolicy());
  4099.                 create = false;
  4100.             }
  4101.             // --- create ---
  4102.             else{
  4103.                 this.importerEngine.createGenericProperties(archiveGenericProperties.getPolicy());
  4104.                 create = true;
  4105.             }
  4106.                
  4107.            
  4108.             // --- info ---
  4109.             if(create){
  4110.                 detail.setState(ArchiveStatoImport.CREATED);
  4111.             }else{
  4112.                 detail.setState(ArchiveStatoImport.UPDATED);
  4113.             }
  4114.         }          
  4115.         catch(Exception e){
  4116.             this.log.error("Errore durante l'import della configurazione '"+oggetto+"' ["+nomePolicy+"] (tipo: '"+tipologiaPolicy+"'): "+e.getMessage(),e);
  4117.             detail.setState(ArchiveStatoImport.ERROR);
  4118.             detail.setException(e);
  4119.         }
  4120.     }
  4121.    
  4122.     public void importPluginArchivio(ArchivePluginArchivio archivePlugin,ArchiveEsitoImportDetail detail){
  4123.        
  4124.         String nome = archivePlugin.getNome();
  4125.         try{
  4126.            
  4127.             // --- check abilitazione ---
  4128.             if(this.importPluginConfigurazione==false){
  4129.                 detail.setState(ArchiveStatoImport.IMPORT_PLUGIN_CONFIG_NOT_ENABLED);
  4130.                 return;
  4131.             }
  4132.            
  4133.             // --- check esistenza ---
  4134.             if(this.updateAbilitato==false){
  4135.                 if(this.importerEngine.existsPluginArchivio(nome)){
  4136.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  4137.                     return;
  4138.                 }
  4139.             }
  4140.            
  4141.                
  4142.             // --- check elementi riferiti ---
  4143.             // non esistenti
  4144.            
  4145.            
  4146.             // --- compatibilita' elementi riferiti ---
  4147.             // non esistenti
  4148.            
  4149.            
  4150.             // ---- visibilita' oggetto riferiti ---
  4151.             // non esistenti
  4152.            
  4153.            
  4154.             // --- set dati obbligatori nel db ----
  4155.             // non esistenti
  4156.            
  4157.            
  4158.             // --- ora registrazione
  4159.             // non esistenti
  4160.            
  4161.            
  4162.             // --- upload ---
  4163.             boolean create = false;
  4164.             if(this.importerEngine.existsPluginArchivio(nome)){
  4165.                
  4166.                 RegistroPlugin old = this.importerEngine.getPluginArchivio(nome);
  4167.                 archivePlugin.getPlugin().setId(old.getId());
  4168.                 archivePlugin.getPlugin().setOldNome(old.getNome());
  4169.                
  4170.                 archivePlugin.getPlugin().setPosizione(old.getPosizione()); // in caso di aggiornamento non devo influenzare la posizione
  4171.                
  4172.                 // visibilita' oggetto stesso per update
  4173.                 // non esistenti

  4174.                 // update
  4175.                 this.importerEngine.updatePluginArchivio(archivePlugin.getPlugin());
  4176.                 create = false;
  4177.             }
  4178.             // --- create ---
  4179.             else{
  4180.                 this.importerEngine.createPluginArchivio(archivePlugin.getPlugin());
  4181.                 create = true;
  4182.             }
  4183.                
  4184.            
  4185.             // --- info ---
  4186.             if(create){
  4187.                 detail.setState(ArchiveStatoImport.CREATED);
  4188.             }else{
  4189.                 detail.setState(ArchiveStatoImport.UPDATED);
  4190.             }
  4191.         }          
  4192.         catch(Exception e){
  4193.             this.log.error("Errore durante l'import dell'archivio dei plugin ["+nome+"]: "+e.getMessage(),e);
  4194.             detail.setState(ArchiveStatoImport.ERROR);
  4195.             detail.setException(e);
  4196.         }
  4197.     }
  4198.    
  4199.     public void importPluginClasse(ArchivePluginClasse archivePluginClasse,ArchiveEsitoImportDetail detail){
  4200.        
  4201.         String tipoPlugin = archivePluginClasse.getTipoPlugin();
  4202.         String tipo = archivePluginClasse.getTipo();
  4203.         try{
  4204.            
  4205.             // --- check abilitazione ---
  4206.             if(this.importPluginConfigurazione==false){
  4207.                 detail.setState(ArchiveStatoImport.IMPORT_PLUGIN_CONFIG_NOT_ENABLED);
  4208.                 return;
  4209.             }
  4210.            
  4211.             // --- check esistenza ---
  4212.             if(this.updateAbilitato==false){
  4213.                 if(this.importerEngine.existsPluginClasse(tipoPlugin, tipo)){
  4214.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  4215.                     return;
  4216.                 }
  4217.             }
  4218.            
  4219.                
  4220.             // --- check elementi riferiti ---
  4221.             // non esistenti
  4222.            
  4223.            
  4224.             // --- compatibilita' elementi riferiti ---
  4225.             // non esistenti
  4226.            
  4227.            
  4228.             // ---- visibilita' oggetto riferiti ---
  4229.             // non esistenti
  4230.            
  4231.            
  4232.             // --- set dati obbligatori nel db ----
  4233.             // non esistenti
  4234.            
  4235.            
  4236.             // --- ora registrazione
  4237.             // non esistenti
  4238.            
  4239.            
  4240.             // --- upload ---
  4241.             boolean create = false;
  4242.             if(this.importerEngine.existsPluginClasse(tipoPlugin, tipo)){
  4243.                
  4244.                 Plugin old = this.importerEngine.getPluginClasse(tipoPlugin, tipo);
  4245.                 archivePluginClasse.getPlugin().setId(old.getId());
  4246.                 IdPlugin oldIdPlugin = new IdPlugin();
  4247.                 oldIdPlugin.setClassName(old.getClassName());
  4248.                 oldIdPlugin.setLabel(old.getLabel());
  4249.                 oldIdPlugin.setTipo(old.getTipo());
  4250.                 oldIdPlugin.setTipoPlugin(old.getTipoPlugin());
  4251.                 archivePluginClasse.getPlugin().setOldIdPlugin(oldIdPlugin);
  4252.                
  4253.                 // visibilita' oggetto stesso per update
  4254.                 // non esistenti

  4255.                 // update
  4256.                 this.importerEngine.updatePluginClasse(archivePluginClasse.getPlugin());
  4257.                 create = false;
  4258.             }
  4259.             // --- create ---
  4260.             else{
  4261.                 this.importerEngine.createPluginClasse(archivePluginClasse.getPlugin());
  4262.                 create = true;
  4263.             }
  4264.                
  4265.            
  4266.             // --- info ---
  4267.             if(create){
  4268.                 detail.setState(ArchiveStatoImport.CREATED);
  4269.             }else{
  4270.                 detail.setState(ArchiveStatoImport.UPDATED);
  4271.             }
  4272.         }          
  4273.         catch(Exception e){
  4274.             this.log.error("Errore durante l'import del plugin ["+tipo+"] (tipo-plugin: '"+tipoPlugin+"'): "+e.getMessage(),e);
  4275.             detail.setState(ArchiveStatoImport.ERROR);
  4276.             detail.setException(e);
  4277.         }
  4278.     }

  4279.     public void importConfigurazione_UrlInvocazioneRegola(ArchiveUrlInvocazioneRegola archiveRegola,ArchiveEsitoImportDetail detail){
  4280.        
  4281.         String nome = archiveRegola.getNome();
  4282.         try{
  4283.            
  4284.             // --- check abilitazione ---
  4285.             if(this.importConfigurazione==false){
  4286.                 detail.setState(ArchiveStatoImport.IMPORT_CONFIG_NOT_ENABLED);
  4287.                 return;
  4288.             }
  4289.            
  4290.             // --- check esistenza ---
  4291.             if(this.updateAbilitato==false){
  4292.                 if(this.importerEngine.existsUrlInvocazioneRegola(nome)){
  4293.                     detail.setState(ArchiveStatoImport.UPDATE_NOT_ENABLED);
  4294.                     return;
  4295.                 }
  4296.             }
  4297.            
  4298.                
  4299.             // --- check elementi riferiti ---
  4300.             // non esistenti
  4301.            
  4302.            
  4303.             // --- compatibilita' elementi riferiti ---
  4304.             // non esistenti
  4305.            
  4306.            
  4307.             // ---- visibilita' oggetto riferiti ---
  4308.             // non esistenti
  4309.            
  4310.            
  4311.             // --- set dati obbligatori nel db ----
  4312.             // non esistenti
  4313.            
  4314.            
  4315.             // --- ora registrazione
  4316.             // non esistenti
  4317.            
  4318.            
  4319.             // --- upload ---
  4320.             boolean create = false;
  4321.             if(this.importerEngine.existsUrlInvocazioneRegola(nome)){
  4322.                
  4323.                 ConfigurazioneUrlInvocazioneRegola old = this.importerEngine.getUrlInvocazioneRegola(nome);
  4324.                 archiveRegola.getRegola().setId(old.getId());
  4325.                 archiveRegola.getRegola().setOldNome(old.getNome());
  4326.                
  4327.                 archiveRegola.getRegola().setPosizione(old.getPosizione()); // in caso di aggiornamento non devo influenzare la posizione
  4328.                
  4329.                 // visibilita' oggetto stesso per update
  4330.                 // non esistenti

  4331.                 // update
  4332.                 this.importerEngine.updateUrlInvocazioneRegola(archiveRegola.getRegola());
  4333.                 create = false;
  4334.             }
  4335.             // --- create ---
  4336.             else{
  4337.                 this.importerEngine.createUrlInvocazioneRegola(archiveRegola.getRegola());
  4338.                 create = true;
  4339.             }
  4340.                
  4341.            
  4342.             // --- info ---
  4343.             if(create){
  4344.                 detail.setState(ArchiveStatoImport.CREATED);
  4345.             }else{
  4346.                 detail.setState(ArchiveStatoImport.UPDATED);
  4347.             }
  4348.         }          
  4349.         catch(Exception e){
  4350.             this.log.error("Errore durante l'import della regola di proxy pass ["+nome+"]: "+e.getMessage(),e);
  4351.             detail.setState(ArchiveStatoImport.ERROR);
  4352.             detail.setException(e);
  4353.         }
  4354.     }
  4355.    
  4356.     public void importConfigurazione_UrlInvocazione(ConfigurazioneUrlInvocazione configurazionePdD, ArchiveEsitoImportDetailConfigurazione<ConfigurazioneUrlInvocazione> detail){      
  4357.         try{
  4358.             // --- check abilitazione ---
  4359.             if(this.importConfigurazione==false){
  4360.                 detail.setState(ArchiveStatoImport.IMPORT_CONFIG_NOT_ENABLED);
  4361.                 return;
  4362.             }
  4363.            
  4364.             // update
  4365.             this.importerEngine.updateConfigurazione_UrlInvocazione(configurazionePdD);
  4366.             detail.setState(ArchiveStatoImport.UPDATED);
  4367.         }          
  4368.         catch(Exception e){
  4369.             this.log.error("Errore durante l'import della configurazione dell'url di invocazione: "+e.getMessage(),e);
  4370.             detail.setState(ArchiveStatoImport.ERROR);
  4371.             detail.setException(e);
  4372.         }
  4373.     }
  4374.    
  4375.     public void importConfigurazione(Configurazione configurazionePdD, ArchiveEsitoImportDetailConfigurazione<Configurazione> detail){      
  4376.         try{
  4377.             // --- check abilitazione ---
  4378.             if(this.importConfigurazione==false){
  4379.                 detail.setState(ArchiveStatoImport.IMPORT_CONFIG_NOT_ENABLED);
  4380.                 return;
  4381.             }
  4382.            
  4383.             // update
  4384.             this.importerEngine.updateConfigurazione(configurazionePdD);
  4385.             detail.setState(ArchiveStatoImport.UPDATED);
  4386.         }          
  4387.         catch(Exception e){
  4388.             this.log.error("Errore durante l'import della configurazione: "+e.getMessage(),e);
  4389.             detail.setState(ArchiveStatoImport.ERROR);
  4390.             detail.setException(e);
  4391.         }
  4392.     }
  4393. }