SPCoopArchiveImport.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.spcoop.archive;

  21. import it.gov.spcoop.sica.dao.driver.XMLUtils;

  22. import org.slf4j.Logger;

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

  25. import org.openspcoop2.core.config.Connettore;
  26. import org.openspcoop2.core.config.InvocazioneServizio;
  27. import org.openspcoop2.core.config.PortaApplicativa;
  28. import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
  29. import org.openspcoop2.core.config.PortaDelegata;
  30. import org.openspcoop2.core.config.RispostaAsincrona;
  31. import org.openspcoop2.core.config.ServizioApplicativo;
  32. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  33. import org.openspcoop2.core.config.constants.InvocazioneServizioTipoAutenticazione;
  34. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  35. import org.openspcoop2.core.config.constants.TipoAutenticazione;
  36. import org.openspcoop2.core.config.constants.TipoAutorizzazione;
  37. import org.openspcoop2.core.config.constants.TipologiaErogazione;
  38. import org.openspcoop2.core.config.constants.TipologiaFruizione;
  39. import org.openspcoop2.core.constants.CostantiDB;
  40. import org.openspcoop2.core.constants.TipiConnettore;
  41. import org.openspcoop2.core.id.IDServizio;
  42. import org.openspcoop2.core.id.IDSoggetto;
  43. import org.openspcoop2.core.mapping.MappingErogazionePortaApplicativa;
  44. import org.openspcoop2.core.mapping.MappingFruizionePortaDelegata;
  45. import org.openspcoop2.core.registry.AccordoCooperazione;
  46. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  47. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  48. import org.openspcoop2.core.registry.Fruitore;
  49. import org.openspcoop2.core.registry.Soggetto;
  50. import org.openspcoop2.core.registry.constants.StatiAccordo;
  51. import org.openspcoop2.message.constants.ServiceBinding;
  52. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  53. import org.openspcoop2.protocol.sdk.ProtocolException;
  54. import org.openspcoop2.protocol.sdk.archive.Archive;
  55. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoCooperazione;
  56. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioComposto;
  57. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioParteComune;
  58. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioParteSpecifica;
  59. import org.openspcoop2.protocol.sdk.archive.ArchiveFruitore;
  60. import org.openspcoop2.protocol.sdk.archive.ArchiveIdCorrelazione;
  61. import org.openspcoop2.protocol.sdk.archive.ArchivePortaApplicativa;
  62. import org.openspcoop2.protocol.sdk.archive.ArchivePortaDelegata;
  63. import org.openspcoop2.protocol.sdk.archive.ArchiveServizioApplicativo;
  64. import org.openspcoop2.protocol.sdk.config.ProtocolImplementation;
  65. import org.openspcoop2.protocol.sdk.config.ProtocolSubscription;
  66. import org.openspcoop2.protocol.sdk.registry.ProtocolFiltroRicercaSoggetti;
  67. import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
  68. import org.openspcoop2.protocol.sdk.registry.RegistryNotFound;
  69. import org.openspcoop2.protocol.spcoop.sica.SICAtoOpenSPCoopContext;
  70. import org.openspcoop2.protocol.spcoop.sica.SICAtoOpenSPCoopUtilities;

  71. /**
  72.  * SPCoopArchiveImport
  73.  *
  74.  * @author Poli Andrea (apoli@link.it)
  75.  * @author $Author$
  76.  * @version $Rev$, $Date$
  77.  */
  78. public class SPCoopArchiveImport {

  79.     private IProtocolFactory<?> protocolFactory = null;
  80.     private Logger logger = null;
  81.     public SPCoopArchiveImport(IProtocolFactory<?> protocolFactory){
  82.         this.protocolFactory = protocolFactory;
  83.         this.logger = this.protocolFactory.getLogger();
  84.     }
  85.    
  86.     public Archive buildAccordoServizioParteComune(byte[]archive,
  87.             IRegistryReader registryReader,boolean validationDocuments) throws ProtocolException, SPCoopConvertToPackageCNIPAException{
  88.        
  89.         try{
  90.        
  91.             SICAtoOpenSPCoopContext sicaContext = new SICAtoOpenSPCoopContext();
  92.            
  93.            
  94.             // *** Trasformazione in package CNIPA ***
  95.             XMLUtils daoUtilities = new XMLUtils(sicaContext,this.logger);
  96.             it.gov.spcoop.sica.dao.AccordoServizioParteComune aspcSICA = null;
  97.             try{
  98.                 aspcSICA = daoUtilities.getAccordoServizioParteComune(archive);
  99.             }catch(Exception e){
  100.                 throw new SPCoopConvertToPackageCNIPAException("Conversione dell'archivio in package CNIPA non riuscita: "+e.getMessage(),e);
  101.             }
  102.            
  103.                                
  104.             // *** Verifica informazioni presenti nel package ***
  105.             if(aspcSICA.getManifesto().getNome()==null){
  106.                 throw new ProtocolException("Riscontrato un archivio che possiede un manifesto senza nome");
  107.             }
  108.            
  109.             // soggetto referente
  110.             String soggettoReferente = null;
  111.             if(aspcSICA.getManifesto().getParteComune().getPubblicatore()!=null) {
  112.                 soggettoReferente = aspcSICA.getManifesto().getParteComune().getPubblicatore().toString();
  113.             }
  114.             if(soggettoReferente!=null){
  115.                 String codiceIPA = SICAtoOpenSPCoopUtilities.removeURI_IDSoggettoSica(soggettoReferente);
  116.                 if(registryReader.existsSoggettoByCodiceIPA(codiceIPA)==false){
  117.                     throw new ProtocolException("Il soggetto referente con Codice IPA ["+codiceIPA+"] non esiste.");
  118.                 }
  119.             }
  120.            
  121.            
  122.             // *** Verifica documenti wsdl/wsbl presenti all'interno del package ***
  123.             if(validationDocuments){
  124.                 SPCoopArchiveImportUtils.validazioneContenuti(aspcSICA);
  125.             }
  126.            
  127.                        
  128.             // *** impostazione mapping soggetto con codice IPA ***
  129.             SPCoopArchiveImportUtils.setIDSoggettoFromCodiceIPA(aspcSICA, sicaContext, registryReader);
  130.            
  131.            
  132.             // *** Trasformazione in oggetto OpenSPCoop2 ***
  133.             AccordoServizioParteComune aspcOpenSPCoop2 = null;
  134.             try{
  135.                 aspcOpenSPCoop2 = SICAtoOpenSPCoopUtilities.accordoServizioParteComune_sicaToOpenspcoop(registryReader, aspcSICA, sicaContext, this.logger);
  136.                
  137.                 Archive archiveObject = new Archive();
  138.                
  139.                 ArchiveIdCorrelazione idCorrelazione = new ArchiveIdCorrelazione("CnipaPackageASPC");
  140.                
  141.                 ArchiveAccordoServizioParteComune archiveASPC = new ArchiveAccordoServizioParteComune(aspcOpenSPCoop2,idCorrelazione,true);
  142.                 archiveObject.getAccordiServizioParteComune().add(archiveASPC);

  143.                 return archiveObject;
  144.                
  145.             }catch(Exception e){
  146.                 throw new ProtocolException("Conversione dell'archivio, da formato CNIPA a formato OpenSPCoop2, non riuscita: "+e.getMessage(),e);
  147.             }
  148.            
  149.         }catch(SPCoopConvertToPackageCNIPAException convert){
  150.             throw convert;
  151.         }catch(Exception e){
  152.             throw new ProtocolException("Conversione archivio non riuscita: "+e.getMessage(),e);
  153.         }
  154.        
  155.     }
  156.    
  157.     public Archive buildAccordoServizioComposto(byte[]archive,
  158.             IRegistryReader registryReader, boolean validationDocuments) throws ProtocolException, SPCoopConvertToPackageCNIPAException{
  159.        
  160.         try{
  161.        
  162.             SICAtoOpenSPCoopContext sicaContext = new SICAtoOpenSPCoopContext();
  163.            
  164.            
  165.             // *** Trasformazione in package CNIPA ***
  166.             XMLUtils daoUtilities = new XMLUtils(sicaContext,this.logger);
  167.             it.gov.spcoop.sica.dao.AccordoServizioComposto asCompostoSICA = null;
  168.             try{
  169.                 asCompostoSICA = daoUtilities.getAccordoServizioComposto(archive);
  170.             }catch(Exception e){
  171.                 throw new SPCoopConvertToPackageCNIPAException("Conversione dell'archivio in package CNIPA non riuscita: "+e.getMessage(),e);
  172.             }
  173.            
  174.            
  175.             // *** Verifica informazioni presenti nel package ***
  176.             if(asCompostoSICA.getManifesto().getNome()==null){
  177.                 throw new ProtocolException("Riscontrato un archivio che possiede un manifesto senza nome");
  178.             }          
  179.            
  180.             // soggetto referente
  181.             String soggettoReferente = null;
  182.             if(asCompostoSICA.getManifesto().getPubblicatore()!=null) {
  183.                 soggettoReferente = asCompostoSICA.getManifesto().getPubblicatore().toString();
  184.             }
  185.             if(soggettoReferente!=null){
  186.                 String codiceIPA = SICAtoOpenSPCoopUtilities.removeURI_IDSoggettoSica(soggettoReferente);
  187.                 if(registryReader.existsSoggettoByCodiceIPA(codiceIPA)==false){
  188.                     throw new ProtocolException("Il soggetto referente con Codice IPA ["+codiceIPA+"] non esiste.");
  189.                 }
  190.             }
  191.            
  192.            
  193.             // *** Verifica documenti wsdl/wsbl presenti all'interno del package ***
  194.             if(validationDocuments){
  195.                 SPCoopArchiveImportUtils.validazioneContenuti(asCompostoSICA);
  196.             }
  197.            
  198.            
  199.             // *** impostazione mapping soggetto con codice IPA ***
  200.             SPCoopArchiveImportUtils.setIDSoggettoFromCodiceIPA(asCompostoSICA, sicaContext, registryReader);
  201.             SPCoopArchiveImportUtils.setIDServizioFromURI_APS(asCompostoSICA, sicaContext, registryReader);
  202.            
  203.                        
  204.             // *** Trasformazione in oggetto OpenSPCoop2 ***
  205.             AccordoServizioParteComune asCompostoOpenSPCoop2 = null;
  206.             try{
  207.                 asCompostoOpenSPCoop2 = SICAtoOpenSPCoopUtilities.accordoServizioComposto_sicaToOpenspcoop(registryReader, asCompostoSICA, sicaContext, this.logger);
  208.                
  209.                 Archive archiveObject = new Archive();
  210.                
  211.                 ArchiveIdCorrelazione idCorrelazione = new ArchiveIdCorrelazione("CnipaPackageASC");
  212.                
  213.                 ArchiveAccordoServizioComposto archiveASC = new ArchiveAccordoServizioComposto(asCompostoOpenSPCoop2,idCorrelazione,true);
  214.                 archiveObject.getAccordiServizioComposto().add(archiveASC);
  215.                
  216.                 return archiveObject;
  217.                
  218.             }catch(Exception e){
  219.                 throw new ProtocolException("Conversione dell'archivio, da formato CNIPA a formato OpenSPCoop2, non riuscita: "+e.getMessage(),e);
  220.             }
  221.            
  222.         }catch(SPCoopConvertToPackageCNIPAException convert){
  223.             throw convert;
  224.         }catch(Exception e){
  225.             throw new ProtocolException("Conversione archivio non riuscita: "+e.getMessage(),e);
  226.         }
  227.        
  228.     }
  229.    
  230.    
  231.     public Archive buildAccordoServizioParteSpecifica(byte[]archive,
  232.             IRegistryReader registryReader, boolean validationDocuments) throws ProtocolException, SPCoopConvertToPackageCNIPAException{
  233.        
  234.         try{
  235.            
  236.             SICAtoOpenSPCoopContext sicaContext = new SICAtoOpenSPCoopContext();
  237.            
  238.            
  239.             // *** Trasformazione in package CNIPA ***
  240.             XMLUtils daoUtilities = new XMLUtils(sicaContext,this.logger);
  241.             it.gov.spcoop.sica.dao.AccordoServizioParteSpecifica aspsSICA = null;
  242.             try{
  243.                 aspsSICA = daoUtilities.getAccordoServizioParteSpecifica(archive);
  244.             }catch(Exception e){
  245.                 throw new SPCoopConvertToPackageCNIPAException("Conversione dell'archivio in package CNIPA non riuscita: "+e.getMessage(),e);
  246.             }
  247.            
  248.            
  249.             // *** Verifica informazioni presenti nel package ***
  250.             if(aspsSICA.getManifesto().getNome()==null){
  251.                 throw new ProtocolException("Riscontrato un archivio che possiede un manifesto senza nome");
  252.             }
  253.            
  254.             // soggetto erogatore
  255.             String soggettoErogatore = null;
  256.             if(aspsSICA.getManifesto().getParteSpecifica().getErogatore()!=null) {
  257.                 soggettoErogatore = aspsSICA.getManifesto().getParteSpecifica().getErogatore().toString();
  258.             }
  259.             if(soggettoErogatore!=null){
  260.                 String codiceIPA = SICAtoOpenSPCoopUtilities.removeURI_IDSoggettoSica(soggettoErogatore);
  261.                 if(registryReader.existsSoggettoByCodiceIPA(codiceIPA)==false){
  262.                     throw new ProtocolException("Il soggetto referente con Codice IPA ["+codiceIPA+"] non esiste.");
  263.                 }
  264.             }
  265.                
  266.            
  267.             // *** Verifica documenti presenti all'interno del package ***
  268.             if(validationDocuments){
  269.                 SPCoopArchiveImportUtils.validazioneContenuti(aspsSICA);
  270.             }
  271.            
  272.                        
  273.             // *** impostazione mapping soggetto con codice IPA ***
  274.             SPCoopArchiveImportUtils.setIDSoggettoFromCodiceIPA(aspsSICA, sicaContext, registryReader);
  275.            
  276.            
  277.             // *** Trasformazione in oggetto OpenSPCoop2 ***
  278.             try{
  279.                 AccordoServizioParteSpecifica aspsOpenSPCoop2 = SICAtoOpenSPCoopUtilities.accordoServizioParteSpecifica_sicaToOpenspcoop(registryReader, aspsSICA, sicaContext, this.logger);
  280.                
  281.                 Archive archiveObject = new Archive();
  282.                
  283.                 ArchiveIdCorrelazione idCorrelazione = new ArchiveIdCorrelazione("CnipaPackageASPS");
  284.                
  285.                 ArchiveAccordoServizioParteSpecifica archiveASPS = new ArchiveAccordoServizioParteSpecifica(aspsOpenSPCoop2,idCorrelazione, true);
  286.                 archiveObject.getAccordiServizioParteSpecifica().add(archiveASPS);
  287.                                
  288.                 return archiveObject;
  289.                
  290.             }catch(Exception e){
  291.                 throw new ProtocolException("Conversione dell'archivio, da formato CNIPA a formato OpenSPCoop2, non riuscita: "+e.getMessage(),e);
  292.             }

  293.                
  294.         }catch(SPCoopConvertToPackageCNIPAException convert){
  295.             throw convert;
  296.         }catch(Exception e){
  297.             throw new ProtocolException("Conversione archivio non riuscita: "+e.getMessage(),e);
  298.         }
  299.        
  300.     }
  301.    
  302.     public void finalizeAccordoServizioParteSpecifica(Archive archiveObject,
  303.             IRegistryReader registryReader, boolean validationDocuments) throws ProtocolException, SPCoopConvertToPackageCNIPAException{
  304.        
  305.         try{
  306.             AccordoServizioParteSpecifica aspsOpenSPCoop2 = null;
  307.             ArchiveIdCorrelazione idCorrelazione = null;
  308.             if(archiveObject.getAccordiServizioParteSpecifica()!=null && archiveObject.getAccordiServizioParteSpecifica().size()>0) {
  309.                 aspsOpenSPCoop2 = archiveObject.getAccordiServizioParteSpecifica().get(0).getAccordoServizioParteSpecifica();
  310.                 idCorrelazione = archiveObject.getAccordiServizioParteSpecifica().get(0).getIdCorrelazione();
  311.             }
  312.             else {
  313.                 return;
  314.             }
  315.            
  316.            
  317.             boolean informazioniComplete = true;
  318.             if(aspsOpenSPCoop2.getTipoSoggettoErogatore()==null || aspsOpenSPCoop2.getNomeSoggettoErogatore()==null) {
  319.                 informazioniComplete = false;
  320.             }
  321.             if(aspsOpenSPCoop2.getVersione()==null) {
  322.                 informazioniComplete = false;
  323.             }
  324.             if(aspsOpenSPCoop2.getAccordoServizioParteComune()==null) {
  325.                 informazioniComplete = false;
  326.             }
  327.            
  328.             ArchiveAccordoServizioParteSpecifica archiveASPS = new ArchiveAccordoServizioParteSpecifica(aspsOpenSPCoop2,idCorrelazione,!informazioniComplete);
  329.            
  330.             if(informazioniComplete) {
  331.            
  332.                 // Devo creare una erogazione o fruizione
  333.                 IDServizio idServizio = archiveASPS.getIdAccordoServizioParteSpecifica();
  334.                 IDSoggetto idSoggettoErogatore = archiveASPS.getIdSoggettoErogatore();
  335.                 Soggetto soggetto = registryReader.getSoggetto(idSoggettoErogatore);
  336.                 String portaDominio = soggetto.getPortaDominio();
  337.                 boolean operativo = false;
  338.                 List<String> pddOperative = null;
  339.                 try {
  340.                     pddOperative = registryReader.findIdPorteDominio(true);
  341.                 }catch(RegistryNotFound notFound) {}
  342.                 if(portaDominio!=null) {
  343.                     if(pddOperative!=null && !pddOperative.isEmpty()) {
  344.                         for (String pdd : pddOperative) {
  345.                             if(portaDominio.equals(pdd)) {
  346.                                 operativo = true;
  347.                                 break;
  348.                             }
  349.                         }
  350.                     }
  351.                 }
  352.                
  353.                 if(operativo) {
  354.                    
  355.                     // creo Porta Applicativa
  356.                    
  357.                     ProtocolImplementation implementationDefault = this.protocolFactory.createProtocolIntegrationConfiguration().
  358.                             createDefaultImplementation(ServiceBinding.SOAP, idServizio);
  359.                    
  360.                     PortaApplicativa portaApplicativa = implementationDefault.getPortaApplicativa();
  361.                     portaApplicativa.setIdSoggetto(soggetto.getId());
  362.                     portaApplicativa.setStato(StatoFunzionalita.DISABILITATO);
  363.                     // Per non creare un buco di sicurezza per default, abilito l'autorizzazione dei soggetti
  364.                     portaApplicativa.setAutenticazione(TipoAutenticazione.DISABILITATO.getValue());
  365.                     portaApplicativa.setAutorizzazione(TipoAutorizzazione.AUTHENTICATED.getValue());
  366.                    
  367.                     // Viene creata in automatico
  368.                     MappingErogazionePortaApplicativa mappingErogazione = implementationDefault.getMapping();
  369.                    
  370.                     ServizioApplicativo sa = new ServizioApplicativo();
  371.                     sa.setNome(portaApplicativa.getNome());
  372.                     sa.setTipologiaFruizione(TipologiaFruizione.DISABILITATO.getValue());
  373.                     sa.setTipologiaErogazione(TipologiaErogazione.TRASPARENTE.getValue());
  374.                     sa.setIdSoggetto(soggetto.getId());
  375.                     sa.setTipoSoggettoProprietario(portaApplicativa.getTipoSoggettoProprietario());
  376.                     sa.setNomeSoggettoProprietario(portaApplicativa.getNomeSoggettoProprietario());
  377.                        
  378.                     RispostaAsincrona rispostaAsinc = new RispostaAsincrona();
  379.                     rispostaAsinc.setAutenticazione(InvocazioneServizioTipoAutenticazione.NONE);
  380.                     rispostaAsinc.setGetMessage(CostantiConfigurazione.DISABILITATO);
  381.                     sa.setRispostaAsincrona(rispostaAsinc);
  382.                        
  383.                     InvocazioneServizio invServizio = new InvocazioneServizio();
  384.                     invServizio.setAutenticazione(InvocazioneServizioTipoAutenticazione.NONE);
  385.                     invServizio.setGetMessage(CostantiConfigurazione.DISABILITATO);
  386.                     Connettore connettore = new Connettore();
  387.                     connettore.setTipo(TipiConnettore.HTTP.getNome());
  388.                     org.openspcoop2.core.config.Property prop = new org.openspcoop2.core.config.Property();
  389.                     prop.setNome(CostantiDB.CONNETTORE_HTTP_LOCATION);
  390.                     prop.setValore("http://undefined");
  391.                     connettore.addProperty(prop);
  392.                     invServizio.setConnettore(connettore);
  393.                     sa.setInvocazioneServizio(invServizio);
  394.                                
  395.                     PortaApplicativaServizioApplicativo paSA = new PortaApplicativaServizioApplicativo();
  396.                     paSA.setNome(sa.getNome());
  397.                     portaApplicativa.addServizioApplicativo(paSA);
  398.            
  399.                     if(archiveASPS.getMappingPorteApplicativeAssociate()==null) {
  400.                         archiveASPS.setMappingPorteApplicativeAssociate(new ArrayList<>());
  401.                     }
  402.                     archiveASPS.getMappingPorteApplicativeAssociate().add(mappingErogazione);
  403.                    
  404.                     ArchiveServizioApplicativo archiveSA = new ArchiveServizioApplicativo(sa, idCorrelazione, false);
  405.                     archiveObject.getServiziApplicativi().add(archiveSA);  
  406.                    
  407.                     ArchivePortaApplicativa archivePA = new ArchivePortaApplicativa(portaApplicativa, idCorrelazione,false);
  408.                     archiveObject.getPorteApplicative().add(archivePA);
  409.                 }
  410.                 else {
  411.                    
  412.                     // creo Porta Delegata
  413.                    
  414.                     IDSoggetto idFruitore = null;
  415.                     if(pddOperative==null) {
  416.                         throw new Exception("Non esistono pdd operative");
  417.                     }
  418.                     for (String pddOperativa : pddOperative) {
  419.                         ProtocolFiltroRicercaSoggetti filtro = new ProtocolFiltroRicercaSoggetti();
  420.                         filtro.setTipo("spc");
  421.                         filtro.setNomePdd(pddOperativa);
  422.                         List<IDSoggetto> idSoggetti = null;
  423.                         try {
  424.                             idSoggetti = registryReader.findIdSoggetti(filtro);
  425.                         }catch(RegistryNotFound notFound) {}
  426.                         if(idSoggetti!=null && !idSoggetti.isEmpty()) {
  427.                             idFruitore = idSoggetti.get(0);
  428.                         }
  429.                     }
  430.                     if(idFruitore==null) {
  431.                         throw new Exception("Non esistone un soggetto interno al dominio");
  432.                     }
  433.                     Soggetto soggettoFruitore = registryReader.getSoggetto(idFruitore);
  434.                                                            
  435.                     ProtocolSubscription subscriptionDefault = this.protocolFactory.createProtocolIntegrationConfiguration().
  436.                             createDefaultSubscription(ServiceBinding.SOAP, idFruitore, idServizio);
  437.                    
  438.                     PortaDelegata portaDelegata = subscriptionDefault.getPortaDelegata();
  439.                     portaDelegata.setIdSoggetto(soggettoFruitore.getId());
  440.                     portaDelegata.setStato(StatoFunzionalita.DISABILITATO);
  441.                     // Per non creare un buco di sicurezza per default, abilito l'autenticazione degli applicativi
  442.                     portaDelegata.setAutenticazione(TipoAutenticazione.SSL.getValue());
  443.                    
  444.                     // Viene creata in automatico
  445.                     MappingFruizionePortaDelegata mappingFruizione = subscriptionDefault.getMapping();

  446.                     Fruitore fruitore = new Fruitore();
  447.                     fruitore.setTipo(idFruitore.getTipo());
  448.                     fruitore.setNome(idFruitore.getNome());
  449.                     org.openspcoop2.core.registry.Connettore connettore = new org.openspcoop2.core.registry.Connettore();
  450.                     connettore.setTipo(TipiConnettore.HTTP.getNome());
  451.                     org.openspcoop2.core.registry.Property prop = new org.openspcoop2.core.registry.Property();
  452.                     prop.setNome(CostantiDB.CONNETTORE_HTTP_LOCATION);
  453.                     prop.setValore("http://undefined");
  454.                     connettore.addProperty(prop);
  455.                     fruitore.setStatoPackage(StatiAccordo.operativo.name());
  456.                     fruitore.setConnettore(connettore);
  457.                                        
  458.                     ArchivePortaDelegata archivePD = new ArchivePortaDelegata(portaDelegata, idCorrelazione, false);
  459.                     archiveObject.getPorteDelegate().add(archivePD);
  460.                    
  461.                     ArchiveFruitore archiveFruitore = new ArchiveFruitore(idServizio, fruitore, idCorrelazione, false);
  462.                     archiveObject.getAccordiFruitori().add(archiveFruitore);
  463.                    
  464.                     if(archiveFruitore.getMappingPorteDelegateAssociate()==null) {
  465.                         archiveFruitore.setMappingPorteDelegateAssociate(new ArrayList<>());
  466.                     }
  467.                     archiveFruitore.getMappingPorteDelegateAssociate().add(mappingFruizione);
  468.                 }
  469.             }
  470.                
  471.         }catch(SPCoopConvertToPackageCNIPAException convert){
  472.             throw convert;
  473.         }catch(Exception e){
  474.             throw new ProtocolException("Conversione archivio non riuscita: "+e.getMessage(),e);
  475.         }
  476.        
  477.     }
  478.    
  479.     public Archive buildAccordoCooperazione(byte[]archive,
  480.             IRegistryReader registryReader) throws ProtocolException, SPCoopConvertToPackageCNIPAException{
  481.        
  482.         try{
  483.        
  484.             SICAtoOpenSPCoopContext sicaContext = new SICAtoOpenSPCoopContext();
  485.            
  486.            
  487.             // *** Trasformazione in package CNIPA ***
  488.             XMLUtils daoUtilities = new XMLUtils(sicaContext,this.logger);
  489.             it.gov.spcoop.sica.dao.AccordoCooperazione acSICA = null;
  490.             try{
  491.                 acSICA = daoUtilities.getAccordoCooperazione(archive);
  492.             }catch(Exception e){
  493.                 throw new SPCoopConvertToPackageCNIPAException("Conversione dell'archivio in package CNIPA non riuscita: "+e.getMessage(),e);
  494.             }
  495.            
  496.            
  497.             // *** Verifica informazioni presenti nel package ***
  498.             if(acSICA.getManifesto().getNome()==null){
  499.                 throw new ProtocolException("Riscontrato un archivio che possiede un manifesto senza nome");
  500.             }
  501.            
  502.             // soggetto coordinatore
  503.             String soggettoCoordinatore = null;
  504.             if(acSICA.getManifesto().getCoordinatore()!=null) {
  505.                 soggettoCoordinatore = acSICA.getManifesto().getCoordinatore().toString();
  506.             }
  507.             if(soggettoCoordinatore!=null){
  508.                 String codiceIPA = SICAtoOpenSPCoopUtilities.removeURI_IDSoggettoSica(soggettoCoordinatore);
  509.                 if(registryReader.existsSoggettoByCodiceIPA(codiceIPA)==false){
  510.                     throw new ProtocolException("Il soggetto coordinatore con Codice IPA ["+codiceIPA+"] non esiste.");
  511.                 }
  512.             }
  513.            
  514.             // soggetti partecipanti
  515.             if(acSICA.getManifesto()!=null && acSICA.getManifesto().getElencoPartecipanti()!=null){
  516.                 for(int i=0;i<acSICA.getManifesto().getElencoPartecipanti().sizePartecipanteList();i++){
  517.                     String partecipante = null;
  518.                     if(acSICA.getManifesto().getElencoPartecipanti().getPartecipante(i)!=null) {
  519.                         partecipante = acSICA.getManifesto().getElencoPartecipanti().getPartecipante(i).toString();
  520.                     }
  521.                     if(partecipante!=null) {
  522.                         String codiceIPA = SICAtoOpenSPCoopUtilities.removeURI_IDSoggettoSica(partecipante);
  523.                         if(registryReader.existsSoggettoByCodiceIPA(codiceIPA)==false){
  524.                             throw new ProtocolException("Il soggetto partecipante con Codice IPA ["+codiceIPA+"] non esiste.");
  525.                         }
  526.                     }
  527.                 }
  528.             }
  529.                                
  530.                        
  531.             // *** impostazione mapping soggetto con codice IPA ***
  532.             SPCoopArchiveImportUtils.setIDSoggettoFromCodiceIPA(acSICA, sicaContext, registryReader);
  533.            
  534.            
  535.             // *** Trasformazione in oggetto OpenSPCoop2 ***
  536.             AccordoCooperazione acOpenSPCoop2 = null;
  537.             try{
  538.                 acOpenSPCoop2 = SICAtoOpenSPCoopUtilities.accordoCooperazione_sicaToOpenspcoop(registryReader, acSICA, sicaContext, this.logger);
  539.                
  540.                 Archive archiveObject = new Archive();
  541.                
  542.                 ArchiveIdCorrelazione idCorrelazione = new ArchiveIdCorrelazione("CnipaPackageAC");
  543.                
  544.                 ArchiveAccordoCooperazione archiveAC = new ArchiveAccordoCooperazione(acOpenSPCoop2,idCorrelazione,true);
  545.                 archiveObject.getAccordiCooperazione().add(archiveAC);
  546.                
  547.                 return archiveObject;
  548.                
  549.             }catch(Exception e){
  550.                 throw new ProtocolException("Conversione dell'archivio, da formato CNIPA a formato OpenSPCoop2, non riuscita: "+e.getMessage(),e);
  551.             }
  552.            
  553.         }catch(SPCoopConvertToPackageCNIPAException convert){
  554.             throw convert;
  555.         }catch(Exception e){
  556.             throw new ProtocolException("Conversione archivio non riuscita: "+e.getMessage(),e);
  557.         }
  558.        
  559.     }
  560.    
  561. }