ArchiveValidator.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.Enumeration;
  23. import java.util.HashMap;
  24. import java.util.List;
  25. import java.util.Map;

  26. import org.openspcoop2.core.id.IDSoggetto;
  27. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  28. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  29. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  30. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  31. import org.openspcoop2.protocol.sdk.archive.Archive;
  32. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioParteSpecifica;
  33. import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
  34. import org.openspcoop2.utils.resources.MapReader;

  35. /**
  36.  *  ArchiveValidator
  37.  *
  38.  * @author Poli Andrea (apoli@link.it)
  39.  * @author $Author$
  40.  * @version $Rev$, $Date$
  41.  */
  42. public class ArchiveValidator {

  43.    
  44.     private IRegistryReader registryReader;
  45.    
  46.     public ArchiveValidator(IRegistryReader registryReader){
  47.         this.registryReader = registryReader;
  48.     }
  49.    
  50.    
  51.    
  52.     public void validateArchive(Archive archive, String protocolloEffettivo,
  53.             boolean validazioneDocumenti, ImportInformationMissingCollection importInformationMissingCollection,
  54.             String userLogin, boolean checkCorrelazioneAsincrona, boolean delete) throws Exception,ImportInformationMissingException{
  55.         try{
  56.            
  57.             IProtocolFactory<?> protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(protocolloEffettivo);
  58.            
  59.             validateAndFillImportInformationMissing(archive, protocolFactory,
  60.                     importInformationMissingCollection, validazioneDocumenti, userLogin,
  61.                     checkCorrelazioneAsincrona, delete);
  62.                            
  63.         }catch(ImportInformationMissingException e){
  64.             throw e;
  65.         }catch(Exception e){
  66.             throw e;
  67.         }
  68.     }
  69.    
  70.     private void validateAndFillImportInformationMissing(Archive archive,IProtocolFactory<?> protocolFactory,
  71.             ImportInformationMissingCollection importInformationMissingCollection, boolean validazioneDocumenti, String userLogin,
  72.             boolean checkCorrelazioneAsincrona, boolean delete) throws Exception,ImportInformationMissingException{
  73.        
  74.         ImporterInformationMissingUtils importerInformationMissingUtils =
  75.                 new ImporterInformationMissingUtils(importInformationMissingCollection, this.registryReader, validazioneDocumenti, protocolFactory, userLogin, archive);
  76.        
  77.         // Soggetto Default
  78.         Map<String, IDSoggetto> mapIdSoggettoDefault = new HashMap<>();
  79.         Map<String, Boolean> mapAPIconReferente = new HashMap<>();
  80.         ProtocolFactoryManager protocolFactoryManager = ProtocolFactoryManager.getInstance();
  81.         if(protocolFactoryManager==null) {
  82.             throw new Exception("ProtocolFactoryManager not initialized");
  83.         }
  84.         Enumeration<String> pEnum = protocolFactoryManager.getProtocolFactories().keys();
  85.         if(pEnum!=null) {
  86.             while (pEnum.hasMoreElements()) {
  87.                 String protocollo = (String) pEnum.nextElement();
  88.                
  89.                 MapReader<String, String> mapTipoSoggettoDefault = protocolFactoryManager.getDefaultOrganizationTypes();
  90.                 if(mapTipoSoggettoDefault==null || mapTipoSoggettoDefault.size()<=0) {
  91.                     throw new Exception("TipiSoggetto di default non trovato per il protocollo '"+protocollo+"'");
  92.                 }
  93.                
  94.                 String tipoSoggettoDefault = mapTipoSoggettoDefault.get(protocollo);
  95.                 if(tipoSoggettoDefault==null) {
  96.                     throw new Exception("TipoSoggetto di default non trovato per il protocollo '"+protocollo+"'");
  97.                 }
  98.                
  99.                 IDSoggetto soggettoDefaultProtocollo = this.registryReader.getIdSoggettoDefault(tipoSoggettoDefault);
  100.                 if(soggettoDefaultProtocollo==null) {
  101.                     throw new Exception("IDSoggetto di default non trovato per il protocollo '"+protocollo+"'");
  102.                 }
  103.                 mapIdSoggettoDefault.put(protocollo, soggettoDefaultProtocollo);
  104.                                
  105.                 IProtocolFactory<?> pf = protocolFactoryManager.getProtocolFactoryByName(protocollo);
  106.                 boolean supportoReferente = false;
  107.                 if(pf!=null) {
  108.                     supportoReferente = pf.createProtocolConfiguration().isSupportoSoggettoReferenteAccordiParteComune();
  109.                 }
  110.                 mapAPIconReferente.put(protocollo, supportoReferente);
  111.             }
  112.         }
  113.        
  114.        
  115.         // ArchiveInformationMissing
  116.         if(archive.getInformationMissing()!=null){
  117.             importerInformationMissingUtils.validateAndFillInformationMissing(archive.getInformationMissing(),delete);
  118.            
  119.             // Templates Names
  120. //          ImporterInformationMissingSetter.replaceTemplatesNames(archive);
  121.             // NO!! Senno tutti i riferimenti con EMPTY saltano!!!! Va fatto per ultimo.
  122.         }
  123.            
  124.         // ServiziApplicativi
  125.         for (int i = 0; i < archive.getServiziApplicativi().size(); i++) {
  126.             importerInformationMissingUtils.validateAndFillServizioApplicativo(archive.getServiziApplicativi().get(i));
  127.         }
  128.        
  129.         // PorteDelegate
  130.         for (int i = 0; i < archive.getPorteDelegate().size(); i++) {
  131.             importerInformationMissingUtils.validateAndFillPortaDelegata(archive.getPorteDelegate().get(i));
  132.         }
  133.        
  134.         // PorteApplicative
  135.         for (int i = 0; i < archive.getPorteApplicative().size(); i++) {
  136.             importerInformationMissingUtils.validateAndFillPortaApplicativa(archive.getPorteApplicative().get(i));
  137.         }
  138.        
  139.         // Accordi di Cooperazione
  140.         for (int i = 0; i < archive.getAccordiCooperazione().size(); i++) {
  141.             importerInformationMissingUtils.validateAndFillAccordoCooperazione(archive.getAccordiCooperazione().get(i));
  142.         }
  143.                
  144.         // Accordi di Servizio Parte Comune
  145.         for (int i = 0; i < archive.getAccordiServizioParteComune().size(); i++) {
  146.             importerInformationMissingUtils.validateAndFillAccordoServizioParteComune(archive.getAccordiServizioParteComune().get(i),
  147.                     checkCorrelazioneAsincrona);
  148.         }
  149.        
  150.         // Accordi di Servizio Parte Specifica
  151.         // Divisione tra parte specifica "normale" e "composta".
  152.         // In particolare non si prendono tutti i composti, ma solo quelli che richiedono prima il caricamento dell'accordo di servizio composto presente in questo archivio.
  153.         List<ArchiveAccordoServizioParteSpecifica> listServiziImplementanoAccordiServizioCompostoPresentiArchivio = new ArrayList<ArchiveAccordoServizioParteSpecifica>();
  154.         for (int i = 0; i < archive.getAccordiServizioParteSpecifica().size(); i++) {
  155.             ArchiveAccordoServizioParteSpecifica archiveServizio = archive.getAccordiServizioParteSpecifica().get(i);
  156.             String uriAccordoServizioParteComune = archiveServizio.getAccordoServizioParteSpecifica().getAccordoServizioParteComune();
  157.             boolean found = false;
  158.             for (int j = 0; j < archive.getAccordiServizioComposto().size(); j++) {
  159.                 AccordoServizioParteComune as = archive.getAccordiServizioComposto().get(j).getAccordoServizioParteComune();
  160.                 String uri = IDAccordoFactory.getInstance().getUriFromAccordo(as);
  161.                 if(uriAccordoServizioParteComune.equals(uri)){
  162.                     found = true;
  163.                     listServiziImplementanoAccordiServizioCompostoPresentiArchivio.add(archiveServizio);
  164.                     break;
  165.                 }
  166.             }
  167.             if(!found) {
  168.                 importerInformationMissingUtils.validateAndFillAccordoServizioParteSpecifica(archive.getAccordiServizioParteSpecifica().get(i),
  169.                         mapIdSoggettoDefault,
  170.                         mapAPIconReferente);
  171.             }
  172.         }

  173.         // Accordi di Servizio Composti
  174.         for (int i = 0; i < archive.getAccordiServizioComposto().size(); i++) {
  175.             importerInformationMissingUtils.validateAndFillAccordoServizioParteComune(archive.getAccordiServizioComposto().get(i),
  176.                     checkCorrelazioneAsincrona);
  177.         }
  178.        
  179.         // Accordi di Servizio Parte Specifica Composti
  180.         for (ArchiveAccordoServizioParteSpecifica archiveAccordoServizioParteSpecifica : listServiziImplementanoAccordiServizioCompostoPresentiArchivio) {
  181.             importerInformationMissingUtils.validateAndFillAccordoServizioParteSpecifica(archiveAccordoServizioParteSpecifica,
  182.                     mapIdSoggettoDefault,
  183.                     mapAPIconReferente);
  184.         }
  185.        
  186.         // Fruizioni
  187.         for (int i = 0; i < archive.getAccordiFruitori().size(); i++) {
  188.             importerInformationMissingUtils.validateAndFillFruitore(archive.getAccordiFruitori().get(i));
  189.         }
  190.            
  191.         // Templates Names
  192.         ImporterInformationMissingSetter.replaceTemplatesNames(archive, this.registryReader);
  193.     }
  194.    
  195. }