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

  25. import javax.xml.namespace.QName;

  26. import org.openspcoop2.core.config.Credenziali;
  27. import org.openspcoop2.core.config.InvocazioneServizio;
  28. import org.openspcoop2.core.config.PortaApplicativa;
  29. import org.openspcoop2.core.config.PortaDelegata;
  30. import org.openspcoop2.core.config.ServizioApplicativo;
  31. import org.openspcoop2.core.id.IDAccordo;
  32. import org.openspcoop2.core.id.IDAccordoCooperazione;
  33. import org.openspcoop2.core.id.IDServizio;
  34. import org.openspcoop2.core.id.IDSoggetto;
  35. import org.openspcoop2.core.registry.AccordoCooperazione;
  36. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  37. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  38. import org.openspcoop2.core.registry.Connettore;
  39. import org.openspcoop2.core.registry.Fruitore;
  40. import org.openspcoop2.core.registry.IdSoggetto;
  41. import org.openspcoop2.core.registry.Operation;
  42. import org.openspcoop2.core.registry.PortType;
  43. import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
  44. import org.openspcoop2.core.registry.constants.TipologiaServizio;
  45. import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
  46. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  47. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  48. import org.openspcoop2.message.xml.MessageXMLUtils;
  49. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  50. import org.openspcoop2.protocol.engine.constants.Costanti;
  51. import org.openspcoop2.protocol.information_missing.ConditionType;
  52. import org.openspcoop2.protocol.information_missing.ConditionsType;
  53. import org.openspcoop2.protocol.information_missing.Openspcoop2;
  54. import org.openspcoop2.protocol.information_missing.Operazione;
  55. import org.openspcoop2.protocol.information_missing.ProprietaRequisitoInput;
  56. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  57. import org.openspcoop2.protocol.sdk.ProtocolException;
  58. import org.openspcoop2.protocol.sdk.archive.Archive;
  59. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoCooperazione;
  60. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioComposto;
  61. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioParteComune;
  62. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioParteSpecifica;
  63. import org.openspcoop2.protocol.sdk.archive.ArchiveFruitore;
  64. import org.openspcoop2.protocol.sdk.archive.ArchivePortaApplicativa;
  65. import org.openspcoop2.protocol.sdk.archive.ArchivePortaDelegata;
  66. import org.openspcoop2.protocol.sdk.archive.ArchiveServizioApplicativo;
  67. import org.openspcoop2.protocol.sdk.archive.ArchiveSoggetto;
  68. import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
  69. import org.openspcoop2.protocol.sdk.validator.IValidazioneDocumenti;
  70. import org.openspcoop2.protocol.sdk.validator.ValidazioneResult;
  71. import org.openspcoop2.utils.wsdl.DefinitionWrapper;
  72. import org.openspcoop2.utils.xml.AbstractXMLUtils;
  73. import org.w3c.dom.Document;

  74. /**
  75.  * ImporterInformationMissingUtils
  76.  *
  77.  * @author Andrea Poli (apoli@link.it)
  78.  * @author $Author$
  79.  * @version $Rev$, $Date$
  80.  */
  81. public class ImporterInformationMissingUtils {

  82.     private IDAccordoCooperazioneFactory idAccordoCooperazioneFactory = null;
  83.     private IDAccordoFactory idAccordoFactory = null;
  84.     private IDServizioFactory idServizioFactory = null;
  85.     private ImportInformationMissingCollection importInformationMissingCollection = null;
  86.     private boolean validateDocuments = false;
  87.     private IProtocolFactory<?> protocolFactory;
  88.     private IValidazioneDocumenti validatoreDocumenti;
  89.     private AbstractXMLUtils xmlUtils;
  90.     private IRegistryReader registryReader;
  91.     private Archive archive;
  92.     private ProtocolFactoryManager protocolFactoryManager;
  93.    
  94.     public ImporterInformationMissingUtils(ImportInformationMissingCollection importInformationMissingCollection,IRegistryReader registryReader,
  95.             boolean validateDocuments,IProtocolFactory<?> protocolFactory, String userLogin, Archive archive) throws Exception{
  96.         this.idAccordoCooperazioneFactory = IDAccordoCooperazioneFactory.getInstance();
  97.         this.idAccordoFactory = IDAccordoFactory.getInstance();
  98.         this.idServizioFactory = IDServizioFactory.getInstance();
  99.         this.importInformationMissingCollection = importInformationMissingCollection;
  100.         this.validateDocuments = validateDocuments;
  101.         this.protocolFactory = protocolFactory;
  102.         this.validatoreDocumenti = this.protocolFactory.createValidazioneDocumenti();
  103.         this.xmlUtils = MessageXMLUtils.DEFAULT;
  104.         this.registryReader = registryReader;
  105.         this.archive = archive;
  106.         this.protocolFactoryManager = ProtocolFactoryManager.getInstance();
  107.     }
  108.    
  109.    
  110.    
  111.     public void validateAndFillInformationMissing(Openspcoop2 archiveInformationMissingWizard, boolean delete) throws Exception{
  112.        
  113.         ImportInformationMissingException infoException = null;
  114.         String objectId = null;
  115.         String objectIdDescription = null;
  116.         ImportInformationMissing importInformationMissing = null;
  117.         boolean throwException = false;
  118.         try{
  119.        
  120.             // -------- requisiti --------------
  121.             if(!throwException && archiveInformationMissingWizard.getWizard()!=null &&
  122.                     archiveInformationMissingWizard.getWizard().getRequisiti()!=null &&
  123.                             archiveInformationMissingWizard.getWizard().getRequisiti().getInput()!=null &&
  124.                             archiveInformationMissingWizard.getWizard().getRequisiti().getInput().sizeProprietaList()>0) {
  125.                
  126.                 boolean existsRequisitiInput = false;
  127.                 for (ProprietaRequisitoInput pInput : archiveInformationMissingWizard.getWizard().getRequisiti().getInput().getProprietaList()) {
  128.                     if(!delete || pInput.isUseInDelete()) {
  129.                         existsRequisitiInput = true;
  130.                         break;
  131.                     }
  132.                 }
  133.                
  134.                 if(existsRequisitiInput) {
  135.                
  136.                     // *** object id ***
  137.                    
  138.                     importInformationMissing = null;
  139.                     objectId = Costanti.REQUISITI_INPUT_RACCOLTI;
  140.                     objectIdDescription = archiveInformationMissingWizard.getWizard().getRequisiti().getInput().getDescrizione();  
  141.                     if(this.importInformationMissingCollection!=null){
  142.                         importInformationMissing = this.importInformationMissingCollection.get(objectId);
  143.                     }
  144.                    
  145.                     // *** campi da verificare ***
  146.                     if(importInformationMissing==null || importInformationMissing.getRequisitiInput()==null || importInformationMissing.getRequisitiInput().isEmpty()){
  147.                         infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  148.                         infoException.setMissingRequisitiInfoInput(true);
  149.                         infoException.setMissingRequisitiInfoInputObject(archiveInformationMissingWizard.getWizard().getRequisiti().getInput());
  150.                         throwException = true;
  151.                     }
  152.                        
  153.                     if(throwException) {
  154.                         throw infoException;
  155.                     }
  156.                
  157.                 }
  158.                
  159.             }
  160.            
  161.             HashMap<String, String> requisitiInput = null;
  162.             if(this.importInformationMissingCollection!=null && this.importInformationMissingCollection.exists(org.openspcoop2.protocol.engine.constants.Costanti.REQUISITI_INPUT_RACCOLTI)) {
  163.                 ImportInformationMissing miss = this.importInformationMissingCollection.get(org.openspcoop2.protocol.engine.constants.Costanti.REQUISITI_INPUT_RACCOLTI);
  164.                 if(miss!=null) {
  165.                     requisitiInput = miss.getRequisitiInput();
  166.                 }
  167.             }
  168.            
  169.            
  170.            
  171.             int indexInputPage = 0;
  172.            
  173.             for (Operazione  archiveInformationMissing: archiveInformationMissingWizard.getOperazioneList()) {
  174.            
  175.                 indexInputPage ++;
  176.                
  177.                 if(throwException) {
  178.                     break;
  179.                 }
  180.            
  181.                
  182.                 // -------- Accordi di Servizio Parte Comune (Gestione Referente nei protocolli che non lo supportano) --------
  183.                 ImporterInformationMissingSetter.setInformationMissingReferenteAPI(this.archive, this.registryReader);
  184.                
  185.                
  186.                
  187.                 // -------- soggetto --------------
  188.                
  189.                 if(!throwException && archiveInformationMissing.sizeSoggettoList()>0){
  190.                     for (int i = 0; i < archiveInformationMissing.sizeSoggettoList(); i++) {
  191.                         org.openspcoop2.protocol.information_missing.Soggetto soggettoMissingInfo =
  192.                                 archiveInformationMissing.getSoggetto(i);
  193.                
  194.                         if(soggettoMissingInfo.getConditions()!=null) {
  195.                             if(checkConditions(soggettoMissingInfo.getConditions(),requisitiInput)==false) {
  196.                                 continue;
  197.                             }
  198.                         }
  199.                        
  200.                        
  201.                         // *** object id ***
  202.                        
  203.                         importInformationMissing = null;
  204.                         objectId = "[[InformationMissingSoggetto-"+indexInputPage+"-"+i+"]]";
  205.                         objectIdDescription = soggettoMissingInfo.getDescrizione();
  206.                         if(this.importInformationMissingCollection!=null){
  207.                             importInformationMissing = this.importInformationMissingCollection.get(objectId);
  208.                         }
  209.                        
  210.                         // *** campi da verificare ***
  211.                         boolean updateInfo = false;
  212.                         switch (soggettoMissingInfo.getTipo()) {
  213.                         case RIFERIMENTO:
  214.                             if(importInformationMissing!=null && importInformationMissing.getSoggetto()!=null){
  215.                                 if(!this.registryReader.existsSoggetto(importInformationMissing.getSoggetto())){
  216.                                     // verifico che non esista nell'archivio che sto importanto
  217.                                     boolean found = false;
  218.                                     if(this.archive.getSoggetti()!=null && this.archive.getSoggetti().size()>0){
  219.                                         for (int j = 0; j < this.archive.getSoggetti().size(); j++) {
  220.                                             ArchiveSoggetto archiveSoggetto = this.archive.getSoggetti().get(j);
  221.                                             if(archiveSoggetto.getIdSoggetto().equals(importInformationMissing.getSoggetto())){
  222.                                                 found = true;
  223.                                                 break;
  224.                                             }
  225.                                         }
  226.                                     }
  227.                                     if(!found){
  228.                                         throw new ProtocolException("Il Soggetto "+importInformationMissing.getSoggetto().toString()+" non esiste (indicato in ImportInformationMissing parameter??)");
  229.                                     }
  230.                                 }
  231.                                 updateInfo = true;
  232.                             }else{
  233.                                 infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  234.                                 infoException.setMissingInfoSoggetto(true);
  235.                                 if(soggettoMissingInfo.getTipoPdd()!=null)
  236.                                     infoException.setMissingInfoSoggetto_tipoPdD(soggettoMissingInfo.getTipoPdd().getValue());
  237.                                 throwException = true;
  238.                             }  
  239.                             break;
  240.                         case CONNETTORE:
  241.                             if(delete==false) {
  242.                                 if(importInformationMissing!=null && importInformationMissing.getInvocazioneServizio()!=null){
  243.                                     updateInfo = true;
  244.                                 }
  245.                                 else{
  246.                                     infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  247.                                     infoException.setMissingInfoInvocazioneServizio(true);
  248.                                     if(soggettoMissingInfo.getTipoPdd()!=null)
  249.                                         infoException.setMissingInfoSoggetto_tipoPdD(soggettoMissingInfo.getTipoPdd().getValue());  
  250.                                     throwException = true;
  251.                                 }
  252.                             }
  253.                             break;
  254.                         }
  255.                         if(infoException!=null) {
  256.                             infoException.setMissingInfoProtocollo(soggettoMissingInfo.getProtocollo());
  257.                             infoException.setMissingInfoHeader(soggettoMissingInfo.getHeader());
  258.                             infoException.setMissingInfoFooter(soggettoMissingInfo.getFooter());
  259.                             infoException.setMissingInfoDefault(soggettoMissingInfo.getDefault());
  260.                         }
  261.                        
  262.                         if(!throwException && updateInfo){
  263.                             // Se non sono state lanciate eccezioni a questo punto posso usare le informazioni salvate di information missing per riempire
  264.                             // le informazioni mancanti negli altri archivi, altrimenti poi i metodi sottostanti lanceranno le relative informazioni
  265.                             // di information missing
  266.                             IDSoggetto importInformationMissing_soggetto = null;
  267.                             Connettore importInformationMissing_connettore = null;
  268.                             if(importInformationMissing!=null){
  269.                                 importInformationMissing_soggetto = importInformationMissing.getSoggetto();
  270.                                 importInformationMissing_connettore = importInformationMissing.getConnettore();
  271.                             }
  272.                             ImporterInformationMissingSetter.setInformationMissingSoggetto(this.archive, soggettoMissingInfo,
  273.                                     importInformationMissing_soggetto, importInformationMissing_connettore);
  274.                         }
  275.                         else{
  276.                             break;
  277.                         }
  278.                        
  279.                     }
  280.                 }
  281.                
  282.                 // -------- input --------------
  283.                
  284.                 if(!throwException && archiveInformationMissing.sizeInputList()>0){
  285.                     for (int i = 0; i < archiveInformationMissing.sizeInputList(); i++) {
  286.                         org.openspcoop2.protocol.information_missing.Input inputMissingInfo =
  287.                                 archiveInformationMissing.getInput(i);
  288.                         if(delete) {
  289.                             boolean foundPropertyUseInDelete = false;
  290.                             for (int j = 0; j < inputMissingInfo.sizeProprietaList(); j++) {
  291.                                 if(inputMissingInfo.getProprieta(j).isUseInDelete()) {
  292.                                     foundPropertyUseInDelete = true;
  293.                                     break;
  294.                                 }
  295.                             }
  296.                             if(!foundPropertyUseInDelete) {
  297.                                 continue;
  298.                             }
  299.                         }
  300.                
  301.                         if(inputMissingInfo.getConditions()!=null) {
  302.                             if(checkConditions(inputMissingInfo.getConditions(),requisitiInput)==false) {
  303.                                 continue;
  304.                             }
  305.                         }
  306.                        
  307.                         // *** object id ***
  308.                        
  309.                         importInformationMissing = null;
  310.                         objectId = "[[InformationMissingInput-"+indexInputPage+"-"+i+"]]";
  311.                         objectIdDescription = inputMissingInfo.getDescrizione();    
  312.                         if(this.importInformationMissingCollection!=null){
  313.                             importInformationMissing = this.importInformationMissingCollection.get(objectId);
  314.                         }
  315.                        
  316.                         // *** campi da verificare ***
  317.                         if(importInformationMissing==null || importInformationMissing.getInputPlaceholder()==null){
  318.                             infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  319.                             infoException.setMissingInfoInput(true);
  320.                             infoException.setMissingInfoInputObject(inputMissingInfo);
  321.                             throwException = true;
  322.                         }
  323.                            
  324.                         if(throwException) {
  325.                             break;
  326.                         }
  327.                        
  328.                     }
  329.                 }
  330.                
  331.                 // -------- servizioApplicativo --------------
  332.                        
  333.                 if(!throwException && archiveInformationMissing.sizeServizioApplicativoList()>0){
  334.                     for (int i = 0; i < archiveInformationMissing.sizeServizioApplicativoList(); i++) {
  335.                         org.openspcoop2.protocol.information_missing.ServizioApplicativo saMissingInfo =
  336.                                 archiveInformationMissing.getServizioApplicativo(i);
  337.                        
  338.                         if(saMissingInfo.getConditions()!=null) {
  339.                             if(checkConditions(saMissingInfo.getConditions(),requisitiInput)==false) {
  340.                                 continue;
  341.                             }
  342.                         }
  343.                        
  344.                         // *** object id ***
  345.                        
  346.                         importInformationMissing = null;
  347.                         objectId = "[[InformationMissingServizioApplicativo-"+indexInputPage+"-"+i+"]]";
  348.                         objectIdDescription = saMissingInfo.getDescrizione();  
  349.                         if(this.importInformationMissingCollection!=null){
  350.                             importInformationMissing = this.importInformationMissingCollection.get(objectId);
  351.                         }
  352.                        
  353.                         // *** campi da verificare ***
  354.                         boolean updateInfo = false;
  355.                         switch (saMissingInfo.getTipo()) {
  356.                         case RIFERIMENTO:
  357.                             // nop; non gestito (Da realizzare per assegnare lo stesso servizio applicativo a piu' porte)
  358.                             break;
  359.                         case CONNETTORE:
  360.                             if(delete==false) {
  361.                                 if(importInformationMissing!=null && importInformationMissing.getInvocazioneServizio()!=null){
  362.                                     updateInfo = true;
  363.                                 }
  364.                                 else{
  365.                                     infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  366.                                     infoException.setMissingInfoInvocazioneServizio(true);
  367.                                     throwException = true;
  368.                                 }
  369.                             }
  370.                             break;
  371.                         case CREDENZIALI_ACCESSO_PDD:
  372.                             if(delete==false) {
  373.                                 if(importInformationMissing!=null && importInformationMissing.getCredenziali()!=null){
  374.                                     updateInfo = true;
  375.                                 }
  376.                                 else{
  377.                                     infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  378.                                     infoException.setMissingInfoCredenziali(true);
  379.                                     throwException = true;
  380.                                 }
  381.                             }
  382.                             break;
  383.                         case ALLINEA_CREDENZIALI_PD:
  384.                             if(delete==false) {
  385.                                 updateInfo = true;
  386.                             }
  387.                             break;
  388.                         }
  389.                         if(infoException!=null) {
  390.                             infoException.setMissingInfoProtocollo(saMissingInfo.getProtocollo());
  391.                             infoException.setMissingInfoHeader(saMissingInfo.getHeader());
  392.                             infoException.setMissingInfoFooter(saMissingInfo.getFooter());
  393.                             infoException.setMissingInfoDefault(saMissingInfo.getDefault());
  394.                         }
  395.                        
  396.                         if(!throwException && updateInfo){
  397.                             // Se non sono state lanciate eccezioni a questo punto posso usare le informazioni salvate di information missing per riempire
  398.                             // le informazioni mancanti negli altri archivi, altrimenti poi i metodi sottostanti lanceranno le relative informazioni
  399.                             // di information missing
  400.                             InvocazioneServizio importInformationMissing_invocazioneServizio = null;
  401.                             Credenziali importInformationMissing_credenziali = null;
  402.                             if(importInformationMissing!=null){
  403.                                 importInformationMissing_invocazioneServizio = importInformationMissing.getInvocazioneServizio();
  404.                                 importInformationMissing_credenziali = importInformationMissing.getCredenziali();
  405.                             }
  406.                             ImporterInformationMissingSetter.setInformationMissingServizioApplicativo(this.archive, saMissingInfo,
  407.                                     importInformationMissing_invocazioneServizio,importInformationMissing_credenziali);
  408.                         }
  409.                         else{
  410.                             break;
  411.                         }
  412.                     }          
  413.                 }
  414.                
  415.                 // -------- accordiCooperazione --------------
  416.                
  417.                 if(!throwException && archiveInformationMissing.sizeAccordoCooperazioneList()>0){
  418.                     for (int i = 0; i < archiveInformationMissing.sizeAccordoCooperazioneList(); i++) {
  419.                         org.openspcoop2.protocol.information_missing.AccordoCooperazione acMissingInfo =
  420.                                 archiveInformationMissing.getAccordoCooperazione(i);
  421.                        
  422.                         if(acMissingInfo.getConditions()!=null) {
  423.                             if(checkConditions(acMissingInfo.getConditions(),requisitiInput)==false) {
  424.                                 continue;
  425.                             }
  426.                         }
  427.                        
  428.                         // *** object id ***
  429.                        
  430.                         importInformationMissing = null;
  431.                         objectId = "[[InformationMissingAccordoCooperazione-"+indexInputPage+"-"+i+"]]";
  432.                         objectIdDescription = acMissingInfo.getDescrizione();  
  433.                         if(this.importInformationMissingCollection!=null){
  434.                             importInformationMissing = this.importInformationMissingCollection.get(objectId);
  435.                         }
  436.                        
  437.                         // *** campi da verificare ***
  438.                         boolean updateInfo = false;
  439.                         switch (acMissingInfo.getTipo()) {
  440.                         case RIFERIMENTO:
  441.                             if(importInformationMissing!=null && importInformationMissing.getIdAccordoCooperazione()!=null){
  442.                                 updateInfo = true;
  443.                             }
  444.                             else{
  445.                                 infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  446.                                 infoException.setMissingInfoAccordoCooperazione(true);
  447.                                 throwException = true;
  448.                             }
  449.                             break;
  450.                         case STATO_ARCHIVIO:
  451.                             if(delete==false) {
  452.                                 updateInfo = true;
  453.                             }
  454.                             break;
  455.                         }
  456.                         if(infoException!=null) {
  457.                             infoException.setMissingInfoProtocollo(acMissingInfo.getProtocollo());
  458.                             infoException.setMissingInfoHeader(acMissingInfo.getHeader());
  459.                             infoException.setMissingInfoFooter(acMissingInfo.getFooter());
  460.                             infoException.setMissingInfoDefault(acMissingInfo.getDefault());
  461.                         }
  462.                        
  463.                         if(!throwException && updateInfo){
  464.                             // Se non sono state lanciate eccezioni a questo punto posso usare le informazioni salvate di information missing per riempire
  465.                             // le informazioni mancanti negli altri archivi, altrimenti poi i metodi sottostanti lanceranno le relative informazioni
  466.                             // di information missing
  467.                             IDAccordoCooperazione importInformationMissing_idAccordoCooperazione = null;
  468.                             if(importInformationMissing!=null){
  469.                                 importInformationMissing_idAccordoCooperazione = importInformationMissing.getIdAccordoCooperazione();
  470.                             }
  471.                             ImporterInformationMissingSetter.setInformationMissingAccordoCooperazione(this.archive, acMissingInfo,
  472.                                     importInformationMissing_idAccordoCooperazione);
  473.                         }
  474.                         else{
  475.                             break;
  476.                         }
  477.                     }          
  478.                 }
  479.                
  480.                
  481.                 // -------- accordiServizioParteComune --------------
  482.                
  483.                 if(!throwException && archiveInformationMissing.sizeAccordoServizioParteComuneList()>0){
  484.                     for (int i = 0; i < archiveInformationMissing.sizeAccordoServizioParteComuneList(); i++) {
  485.                         org.openspcoop2.protocol.information_missing.AccordoServizioParteComune asMissingInfo =
  486.                                 archiveInformationMissing.getAccordoServizioParteComune(i);
  487.                        
  488.                         if(asMissingInfo.getConditions()!=null) {
  489.                             if(checkConditions(asMissingInfo.getConditions(),requisitiInput)==false) {
  490.                                 continue;
  491.                             }
  492.                         }
  493.                        
  494.                         // *** object id ***
  495.                        
  496.                         importInformationMissing = null;
  497.                         objectId = "[[InformationMissingAccordoServizioParteComune-"+indexInputPage+"-"+i+"]]";
  498.                         objectIdDescription = asMissingInfo.getDescrizione();  
  499.                         if(this.importInformationMissingCollection!=null){
  500.                             importInformationMissing = this.importInformationMissingCollection.get(objectId);
  501.                         }
  502.                        
  503.                         // *** campi da verificare ***
  504.                         boolean updateInfo = false;
  505.                         switch (asMissingInfo.getTipo()) {
  506.                         case RIFERIMENTO:
  507.                             if(importInformationMissing!=null && importInformationMissing.getIdAccordoServizioParteComune()!=null){
  508.                                 updateInfo = true;
  509.                             }
  510.                             else{
  511.                                 infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  512.                                 infoException.setMissingInfoAccordoServizioParteComune(true);
  513.                                 throwException = true;
  514.                             }
  515.                             break;
  516.                         case STATO_ARCHIVIO:
  517.                             if(delete==false) {
  518.                                 updateInfo = true;
  519.                             }
  520.                             break;
  521.                         }
  522.                         if(infoException!=null) {
  523.                             infoException.setMissingInfoProtocollo(asMissingInfo.getProtocollo());
  524.                             infoException.setMissingInfoHeader(asMissingInfo.getHeader());
  525.                             infoException.setMissingInfoFooter(asMissingInfo.getFooter());
  526.                             infoException.setMissingInfoDefault(asMissingInfo.getDefault());
  527.                         }
  528.                        
  529.                         if(!throwException && updateInfo){
  530.                             // Se non sono state lanciate eccezioni a questo punto posso usare le informazioni salvate di information missing per riempire
  531.                             // le informazioni mancanti negli altri archivi, altrimenti poi i metodi sottostanti lanceranno le relative informazioni
  532.                             // di information missing
  533.                             IDAccordo importInformationMissing_idAccordo = null;
  534.                             if(importInformationMissing!=null){
  535.                                 importInformationMissing_idAccordo = importInformationMissing.getIdAccordoServizioParteComune();
  536.                             }
  537.                             ImporterInformationMissingSetter.setInformationMissingAccordoServizioParteComune(this.archive, asMissingInfo,
  538.                                     importInformationMissing_idAccordo);
  539.                         }
  540.                         else{
  541.                             break;
  542.                         }
  543.                     }          
  544.                 }
  545.                
  546.                
  547.                 // -------- accordoServizioParteSpecifica --------------
  548.                
  549.                 if(!throwException && archiveInformationMissing.sizeAccordoServizioParteSpecificaList()>0){
  550.                     for (int i = 0; i < archiveInformationMissing.sizeAccordoServizioParteSpecificaList(); i++) {
  551.                         org.openspcoop2.protocol.information_missing.AccordoServizioParteSpecifica aspsMissingInfo =
  552.                                 archiveInformationMissing.getAccordoServizioParteSpecifica(i);
  553.                        
  554.                         if(aspsMissingInfo.getConditions()!=null) {
  555.                             if(checkConditions(aspsMissingInfo.getConditions(),requisitiInput)==false) {
  556.                                 continue;
  557.                             }
  558.                         }
  559.                        
  560.                         // *** object id ***
  561.                        
  562.                         importInformationMissing = null;
  563.                         objectId = "[[InformationMissingAPS-"+indexInputPage+"-"+i+"]]";
  564.                         objectIdDescription = aspsMissingInfo.getDescrizione();
  565.                         if(this.importInformationMissingCollection!=null){
  566.                             importInformationMissing = this.importInformationMissingCollection.get(objectId);
  567.                         }
  568.                        
  569.                         // *** campi da verificare ***
  570.                         boolean updateInfo = false;
  571.                         switch (aspsMissingInfo.getTipo()) {
  572.                         case CONNETTORE:
  573.                             if(delete==false) {
  574.                                 if(importInformationMissing!=null && importInformationMissing.getConnettore()!=null){
  575.                                     updateInfo = true;
  576.                                 }
  577.                                 else{
  578.                                     infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  579.                                     infoException.setMissingInfoConnettore(true);
  580.                                     throwException = true;
  581.                                 }
  582.                             }
  583.                             break;
  584.                         case STATO_ARCHIVIO:
  585.                             if(delete==false) {
  586.                                 updateInfo = true;
  587.                             }
  588.                             break;
  589.                         }
  590.                         if(infoException!=null) {
  591.                             infoException.setMissingInfoProtocollo(aspsMissingInfo.getProtocollo());
  592.                             infoException.setMissingInfoHeader(aspsMissingInfo.getHeader());
  593.                             infoException.setMissingInfoFooter(aspsMissingInfo.getFooter());
  594.                             infoException.setMissingInfoDefault(aspsMissingInfo.getDefault());
  595.                         }
  596.                        
  597.                         if(!throwException && updateInfo){
  598.                             // Se non sono state lanciate eccezioni a questo punto posso usare le informazioni salvate di information missing per riempire
  599.                             // le informazioni mancanti negli altri archivi, altrimenti poi i metodi sottostanti lanceranno le relative informazioni
  600.                             // di information missing
  601.                             Connettore importInformationMissing_connettore = null;
  602.                             if(importInformationMissing!=null){
  603.                                 importInformationMissing_connettore = importInformationMissing.getConnettore();
  604.                             }
  605.                             ImporterInformationMissingSetter.setInformationMissingAccordoServizioParteSpecifica(this.archive, aspsMissingInfo,
  606.                                     importInformationMissing_connettore);
  607.                         }
  608.                         else{
  609.                             break;
  610.                         }
  611.                     }          
  612.                 }
  613.    
  614.                 // -------- accordiServizioComposto --------------
  615.                
  616.                 if(!throwException && archiveInformationMissing.sizeAccordoServizioCompostoList()>0){
  617.                     for (int i = 0; i < archiveInformationMissing.sizeAccordoServizioCompostoList(); i++) {
  618.                         org.openspcoop2.protocol.information_missing.AccordoServizioParteComune asMissingInfo =
  619.                                 archiveInformationMissing.getAccordoServizioComposto(i);
  620.                        
  621.                         if(asMissingInfo.getConditions()!=null) {
  622.                             if(checkConditions(asMissingInfo.getConditions(),requisitiInput)==false) {
  623.                                 continue;
  624.                             }
  625.                         }
  626.                        
  627.                         // *** object id ***
  628.                        
  629.                         importInformationMissing = null;
  630.                         objectId = "[[InformationMissingAccordoServizioComposto-"+indexInputPage+"-"+i+"]]";
  631.                         objectIdDescription = asMissingInfo.getDescrizione();  
  632.                         if(this.importInformationMissingCollection!=null){
  633.                             importInformationMissing = this.importInformationMissingCollection.get(objectId);
  634.                         }
  635.                        
  636.                         // *** campi da verificare ***
  637.                         boolean updateInfo = false;
  638.                         switch (asMissingInfo.getTipo()) {
  639.                         case RIFERIMENTO:
  640.                             if(importInformationMissing!=null && importInformationMissing.getIdAccordoServizioParteComune()!=null){
  641.                                 updateInfo = true;
  642.                             }
  643.                             else{
  644.                                 infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  645.                                 infoException.setMissingInfoAccordoServizioParteComune(true);
  646.                                 throwException = true;
  647.                             }
  648.                             break;
  649.                         case STATO_ARCHIVIO:
  650.                             if(delete==false) {
  651.                                 updateInfo = true;
  652.                             }
  653.                             break;
  654.                         }
  655.                         if(infoException!=null) {
  656.                             infoException.setMissingInfoProtocollo(asMissingInfo.getProtocollo());
  657.                             infoException.setMissingInfoHeader(asMissingInfo.getHeader());
  658.                             infoException.setMissingInfoFooter(asMissingInfo.getFooter());
  659.                             infoException.setMissingInfoDefault(asMissingInfo.getDefault());
  660.                         }
  661.                        
  662.                         if(!throwException && updateInfo){
  663.                             // Se non sono state lanciate eccezioni a questo punto posso usare le informazioni salvate di information missing per riempire
  664.                             // le informazioni mancanti negli altri archivi, altrimenti poi i metodi sottostanti lanceranno le relative informazioni
  665.                             // di information missing
  666.                             IDAccordo importInformationMissing_idAccordo = null;
  667.                             if(importInformationMissing!=null){
  668.                                 importInformationMissing_idAccordo = importInformationMissing.getIdAccordoServizioParteComune();
  669.                             }
  670.                             ImporterInformationMissingSetter.setInformationMissingAccordoServizioComposto(this.archive, asMissingInfo,
  671.                                     importInformationMissing_idAccordo);
  672.                         }
  673.                         else{
  674.                             break;
  675.                         }
  676.                     }          
  677.                 }
  678.                
  679.                 // -------- fruitori --------------
  680.                
  681.                 if(!throwException && archiveInformationMissing.sizeFruitoreList()>0){
  682.                     for (int i = 0; i < archiveInformationMissing.sizeFruitoreList(); i++) {
  683.                         org.openspcoop2.protocol.information_missing.Fruitore fruitoreMissingInfo =
  684.                                 archiveInformationMissing.getFruitore(i);
  685.                        
  686.                         if(fruitoreMissingInfo.getConditions()!=null) {
  687.                             if(checkConditions(fruitoreMissingInfo.getConditions(),requisitiInput)==false) {
  688.                                 continue;
  689.                             }
  690.                         }
  691.                        
  692.                         // *** object id ***
  693.                        
  694.                         importInformationMissing = null;
  695.                         objectId = "[[InformationMissingFruitore-"+indexInputPage+"-"+i+"]]";
  696.                         objectIdDescription = fruitoreMissingInfo.getDescrizione();
  697.                         if(this.importInformationMissingCollection!=null){
  698.                             importInformationMissing = this.importInformationMissingCollection.get(objectId);
  699.                         }
  700.                        
  701.                         // *** campi da verificare ***
  702.                         boolean updateInfo = false;
  703.                         switch (fruitoreMissingInfo.getTipo()) {
  704.                         case CONNETTORE:
  705.                             if(delete==false) {
  706.                                 if(importInformationMissing!=null && importInformationMissing.getConnettore()!=null){
  707.                                     updateInfo = true;
  708.                                 }
  709.                                 else{
  710.                                     infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  711.                                     infoException.setMissingInfoConnettore(true);
  712.                                     throwException = true;
  713.                                 }
  714.                             }
  715.                             break;
  716.                         case STATO_ARCHIVIO:
  717.                             if(delete==false) {
  718.                                 updateInfo = true;
  719.                             }
  720.                             break;
  721.                         }
  722.                         if(infoException!=null) {
  723.                             infoException.setMissingInfoProtocollo(fruitoreMissingInfo.getProtocollo());
  724.                             infoException.setMissingInfoHeader(fruitoreMissingInfo.getHeader());
  725.                             infoException.setMissingInfoFooter(fruitoreMissingInfo.getFooter());
  726.                             infoException.setMissingInfoDefault(fruitoreMissingInfo.getDefault());
  727.                         }
  728.                        
  729.                         if(!throwException && updateInfo){
  730.                             // Se non sono state lanciate eccezioni a questo punto posso usare le informazioni salvate di information missing per riempire
  731.                             // le informazioni mancanti negli altri archivi, altrimenti poi i metodi sottostanti lanceranno le relative informazioni
  732.                             // di information missing
  733.                             Connettore importInformationMissing_connettore = null;
  734.                             if(importInformationMissing!=null){
  735.                                 importInformationMissing_connettore = importInformationMissing.getConnettore();
  736.                             }
  737.                             ImporterInformationMissingSetter.setInformationMissingFruitore(this.archive, fruitoreMissingInfo,
  738.                                     importInformationMissing_connettore);
  739.                         }
  740.                         else{
  741.                             break;
  742.                         }
  743.                     }          
  744.                 }
  745.                
  746.                 // -------- porte delegate --------------
  747.                
  748.                 if(!throwException && archiveInformationMissing.sizePortaDelegataList()>0){
  749.                     for (int i = 0; i < archiveInformationMissing.sizePortaDelegataList(); i++) {
  750.                         org.openspcoop2.protocol.information_missing.PortaDelegata portaMissingInfo =
  751.                                 archiveInformationMissing.getPortaDelegata(i);
  752.                        
  753.                         if(portaMissingInfo.getConditions()!=null) {
  754.                             if(checkConditions(portaMissingInfo.getConditions(),requisitiInput)==false) {
  755.                                 continue;
  756.                             }
  757.                         }
  758.                        
  759.                         // *** object id ***
  760.                        
  761.                         importInformationMissing = null;
  762.                         objectId = "[[InformationMissingPortaDelegata-"+indexInputPage+"-"+i+"]]";
  763.                         objectIdDescription = portaMissingInfo.getDescrizione();    
  764.                         if(this.importInformationMissingCollection!=null){
  765.                             importInformationMissing = this.importInformationMissingCollection.get(objectId);
  766.                         }
  767.                        
  768.                         // *** campi da verificare ***
  769.                         boolean updateInfo = false;
  770.                         switch (portaMissingInfo.getTipo()) {
  771.                         case STATO:
  772.                             if(delete==false) {
  773.                                 updateInfo = true;
  774.                             }
  775.                             break;
  776.                         }
  777.                         if(infoException!=null) {
  778.                             infoException.setMissingInfoProtocollo(portaMissingInfo.getProtocollo());
  779.                             infoException.setMissingInfoHeader(portaMissingInfo.getHeader());
  780.                             infoException.setMissingInfoFooter(portaMissingInfo.getFooter());
  781.                             infoException.setMissingInfoDefault(portaMissingInfo.getDefault());
  782.                         }
  783.                        
  784.                         if(!throwException && updateInfo){
  785.                             // Se non sono state lanciate eccezioni a questo punto posso usare le informazioni salvate di information missing per riempire
  786.                             // le informazioni mancanti negli altri archivi, altrimenti poi i metodi sottostanti lanceranno le relative informazioni
  787.                             // di information missing
  788.                             ImporterInformationMissingSetter.setInformationMissingPortaDelegata(this.archive, portaMissingInfo);
  789.                         }
  790.                         else{
  791.                             break;
  792.                         }
  793.                     }          
  794.                 }
  795.                
  796.                 // -------- porte applicative --------------
  797.                
  798.                 if(!throwException && archiveInformationMissing.sizePortaApplicativaList()>0){
  799.                     for (int i = 0; i < archiveInformationMissing.sizePortaApplicativaList(); i++) {
  800.                         org.openspcoop2.protocol.information_missing.PortaApplicativa portaMissingInfo =
  801.                                 archiveInformationMissing.getPortaApplicativa(i);
  802.                        
  803.                         if(portaMissingInfo.getConditions()!=null) {
  804.                             if(checkConditions(portaMissingInfo.getConditions(),requisitiInput)==false) {
  805.                                 continue;
  806.                             }
  807.                         }
  808.                        
  809.                         // *** object id ***
  810.                        
  811.                         importInformationMissing = null;
  812.                         objectId = "[[InformationMissingPortaApplicativa-"+indexInputPage+"-"+i+"]]";
  813.                         objectIdDescription = portaMissingInfo.getDescrizione();    
  814.                         if(this.importInformationMissingCollection!=null){
  815.                             importInformationMissing = this.importInformationMissingCollection.get(objectId);
  816.                         }
  817.                        
  818.                         // *** campi da verificare ***
  819.                         boolean updateInfo = false;
  820.                         switch (portaMissingInfo.getTipo()) {
  821.                         case STATO:
  822.                             if(delete==false) {
  823.                                 updateInfo = true;
  824.                             }
  825.                             break;
  826.                         }
  827.                         if(infoException!=null) {
  828.                             infoException.setMissingInfoProtocollo(portaMissingInfo.getProtocollo());
  829.                             infoException.setMissingInfoHeader(portaMissingInfo.getHeader());
  830.                             infoException.setMissingInfoFooter(portaMissingInfo.getFooter());
  831.                             infoException.setMissingInfoDefault(portaMissingInfo.getDefault());
  832.                         }
  833.                        
  834.                         if(!throwException && updateInfo){
  835.                             // Se non sono state lanciate eccezioni a questo punto posso usare le informazioni salvate di information missing per riempire
  836.                             // le informazioni mancanti negli altri archivi, altrimenti poi i metodi sottostanti lanceranno le relative informazioni
  837.                             // di information missing
  838.                             ImporterInformationMissingSetter.setInformationMissingPortaApplicativa(this.archive, portaMissingInfo);
  839.                         }
  840.                         else{
  841.                             break;
  842.                         }
  843.                     }          
  844.                 }
  845.            
  846.             }
  847.                
  848.             // se e' stata rilevata una mancanza sollevo eccezione
  849.             if(throwException){
  850.                 throw infoException;
  851.             }
  852.                        
  853.         }catch(ImportInformationMissingException e){
  854.             throw e;
  855.         }catch(Exception e){
  856.             throw new Exception(objectIdDescription+" validazione fallita: "+e.getMessage(),e);
  857.         }
  858.     }
  859.    
  860.     public static boolean checkConditions(ConditionsType conditions, HashMap<String, String> map) {
  861.         if(conditions==null) {
  862.             return false;
  863.         }
  864.         boolean result = _checkConditions(conditions, map);
  865.         if(conditions!=null && conditions.isNot()) {
  866.             return !result;
  867.         }
  868.         else {
  869.             return result;
  870.         }
  871.     }
  872.     private static boolean _checkConditions(ConditionsType conditions, HashMap<String, String> map) {
  873.         boolean and = conditions!=null && conditions.isAnd();
  874.         if(conditions!=null && conditions.sizeProprietaList()>0) {
  875.             for (ConditionType cType : conditions.getProprietaList()) {
  876.                 if(map==null || map.isEmpty() || map.containsKey(cType.getNome())==false) {
  877.                     if(cType.isNot()==false && and) {
  878.                         return false;
  879.                     }
  880.                 }
  881.                 String value = null;
  882.                 if(map!=null){
  883.                     value = map.get(cType.getNome());
  884.                 }
  885.                
  886.                 if(value==null) {
  887.                     if(and) {
  888.                         return false;
  889.                     }
  890.                     else {
  891.                         continue; // vedo il prossimo, al massimo in fondo torno false se non sono and
  892.                     }
  893.                 }
  894.                
  895.                 if(cType.isNot()) {
  896.                     if(cType.getValore().equals(value)) {
  897.                         if(and) {
  898.                             return false;
  899.                         }
  900.                     }
  901.                     else {
  902.                         if(and==false) {
  903.                             return true;
  904.                         }
  905.                     }
  906.                 }
  907.                 else {
  908.                     if(cType.getValore().equals(value)==false) {
  909.                         if(and) {
  910.                             return false;
  911.                         }
  912.                     }
  913.                     else {
  914.                         if(and==false) {
  915.                             return true;
  916.                         }
  917.                     }
  918.                 }
  919.                
  920.             }
  921.         }
  922.         if(and) {
  923.             return true;
  924.         }
  925.         else {
  926.             return false;
  927.         }
  928.     }
  929.    
  930.    
  931.     public void validateAndFillServizioApplicativo(ArchiveServizioApplicativo archiveServizioApplicativo) throws Exception{
  932.        
  933.         // *** object id ***
  934.        
  935.         ServizioApplicativo sa = archiveServizioApplicativo.getServizioApplicativo();
  936.         String uri = sa.getNome();
  937.         if(sa.getTipoSoggettoProprietario()!=null && sa.getNomeSoggettoProprietario()!=null){
  938.             uri = uri +":"+sa.getTipoSoggettoProprietario()+"/"+sa.getNomeSoggettoProprietario();
  939.         }
  940.         String objectId = "[[SA]]"+uri;
  941.         String objectIdDescription = "Servizio Applicativo ["+uri+"]";      
  942.         ImportInformationMissing importInformationMissing = null;
  943.         if(this.importInformationMissingCollection!=null){
  944.             importInformationMissing = this.importInformationMissingCollection.get(objectId);
  945.         }
  946.        
  947.         try{
  948.            
  949.             // *** campi da verificare ***
  950.            
  951.             String tipoSoggettoProprietario = sa.getTipoSoggettoProprietario();
  952.             String nomeSoggettoProprietario = sa.getNomeSoggettoProprietario();
  953.             if(tipoSoggettoProprietario==null || nomeSoggettoProprietario==null){
  954.                
  955.                 // provo ad utilizzare le informazioni eventualmente presenti nell'oggetto importInformationMissing
  956.                 // se non sono presenti nemmeno in tale oggetto, sollevo eccezione
  957.                 ImportInformationMissingException infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  958.                 boolean throwException = false;
  959.                
  960.                 // soggetto
  961.                 if(tipoSoggettoProprietario==null || nomeSoggettoProprietario==null){
  962.                     if(importInformationMissing!=null && importInformationMissing.getSoggetto()!=null){
  963.                         if(!this.registryReader.existsSoggetto(importInformationMissing.getSoggetto())){
  964.                             // verifico che non esista nell'archivio che sto importanto
  965.                             boolean found = false;
  966.                             if(this.archive.getSoggetti()!=null && this.archive.getSoggetti().size()>0){
  967.                                 for (int i = 0; i < this.archive.getSoggetti().size(); i++) {
  968.                                     ArchiveSoggetto archiveSoggetto = this.archive.getSoggetti().get(i);
  969.                                     if(archiveSoggetto.getIdSoggetto().equals(importInformationMissing.getSoggetto())){
  970.                                         found = true;
  971.                                         break;
  972.                                     }
  973.                                 }
  974.                             }
  975.                             if(!found){
  976.                                 throw new ProtocolException("Il Soggetto "+importInformationMissing.getSoggetto().toString()+" non esiste (indicato in ImportInformationMissing parameter??)");
  977.                             }
  978.                         }
  979.                         sa.setTipoSoggettoProprietario(importInformationMissing.getSoggetto().getTipo());
  980.                         sa.setNomeSoggettoProprietario(importInformationMissing.getSoggetto().getNome());
  981.                     }else{
  982.                         infoException.setMissingInfoSoggetto(true);
  983.                         throwException = true;
  984.                     }
  985.                 }
  986.                                
  987.                 // se e' stata rilevata una mancanza sollevo eccezione
  988.                 if(throwException)
  989.                     throw infoException;
  990.             }
  991.            
  992.            
  993.             // *** Verifica documenti presenti all'interno dell'archivio ***

  994.             // non esistono
  995.                        
  996.         }catch(ImportInformationMissingException e){
  997.             throw e;
  998.         }catch(Exception e){
  999.             throw new Exception(objectIdDescription+" validazione fallita: "+e.getMessage(),e);
  1000.         }
  1001.     }
  1002.    
  1003.    
  1004.    
  1005.     public void validateAndFillPortaDelegata(ArchivePortaDelegata archivePortaDelegata) throws Exception{
  1006.        
  1007.         // *** object id ***
  1008.        
  1009.         PortaDelegata pd = archivePortaDelegata.getPortaDelegata();
  1010.         String uri = pd.getNome();
  1011.         if(pd.getTipoSoggettoProprietario()!=null && pd.getNomeSoggettoProprietario()!=null){
  1012.             uri = uri +":"+pd.getTipoSoggettoProprietario()+"/"+pd.getNomeSoggettoProprietario();
  1013.         }
  1014.         String objectId = "[[PD]]"+uri;
  1015.         String objectIdDescription = "PortaDelegata ["+uri+"]";    
  1016.         ImportInformationMissing importInformationMissing = null;
  1017.         if(this.importInformationMissingCollection!=null){
  1018.             importInformationMissing = this.importInformationMissingCollection.get(objectId);
  1019.         }
  1020.        
  1021.         try{
  1022.            
  1023.             // *** campi da verificare ***
  1024.            
  1025.             String tipoSoggettoProprietario = pd.getTipoSoggettoProprietario();
  1026.             String nomeSoggettoProprietario = pd.getNomeSoggettoProprietario();
  1027.             if(tipoSoggettoProprietario==null || nomeSoggettoProprietario==null){
  1028.                
  1029.                 // provo ad utilizzare le informazioni eventualmente presenti nell'oggetto importInformationMissing
  1030.                 // se non sono presenti nemmeno in tale oggetto, sollevo eccezione
  1031.                 ImportInformationMissingException infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  1032.                 boolean throwException = false;
  1033.                
  1034.                 // soggetto
  1035.                 if(tipoSoggettoProprietario==null || nomeSoggettoProprietario==null){
  1036.                     if(importInformationMissing!=null && importInformationMissing.getSoggetto()!=null){
  1037.                         if(!this.registryReader.existsSoggetto(importInformationMissing.getSoggetto())){
  1038.                             // verifico che non esista nell'archivio che sto importanto
  1039.                             boolean found = false;
  1040.                             if(this.archive.getSoggetti()!=null && this.archive.getSoggetti().size()>0){
  1041.                                 for (int i = 0; i < this.archive.getSoggetti().size(); i++) {
  1042.                                     ArchiveSoggetto archiveSoggetto = this.archive.getSoggetti().get(i);
  1043.                                     if(archiveSoggetto.getIdSoggetto().equals(importInformationMissing.getSoggetto())){
  1044.                                         found = true;
  1045.                                         break;
  1046.                                     }
  1047.                                 }
  1048.                             }
  1049.                             if(!found){
  1050.                                 throw new ProtocolException("Il Soggetto "+importInformationMissing.getSoggetto().toString()+" non esiste (indicato in ImportInformationMissing parameter??)");
  1051.                             }
  1052.                         }
  1053.                         pd.setTipoSoggettoProprietario(importInformationMissing.getSoggetto().getTipo());
  1054.                         pd.setNomeSoggettoProprietario(importInformationMissing.getSoggetto().getNome());
  1055.                     }else{
  1056.                         infoException.setMissingInfoSoggetto(true);
  1057.                         throwException = true;
  1058.                     }
  1059.                 }
  1060.                                
  1061.                 // se e' stata rilevata una mancanza sollevo eccezione
  1062.                 if(throwException)
  1063.                     throw infoException;
  1064.             }
  1065.            
  1066.            
  1067.             // *** Verifica documenti presenti all'interno dell'archivio ***

  1068.             // non esistono
  1069.                        
  1070.         }catch(ImportInformationMissingException e){
  1071.             throw e;
  1072.         }catch(Exception e){
  1073.             throw new Exception(objectIdDescription+" validazione fallita: "+e.getMessage(),e);
  1074.         }
  1075.     }
  1076.    
  1077.    
  1078.    
  1079.    
  1080.     public void validateAndFillPortaApplicativa(ArchivePortaApplicativa archivePortaApplicativa) throws Exception{
  1081.        
  1082.         // *** object id ***
  1083.        
  1084.         PortaApplicativa pa = archivePortaApplicativa.getPortaApplicativa();
  1085.         String uri = pa.getNome();
  1086.         if(pa.getTipoSoggettoProprietario()!=null && pa.getNomeSoggettoProprietario()!=null){
  1087.             uri = uri +":"+pa.getTipoSoggettoProprietario()+"/"+pa.getNomeSoggettoProprietario();
  1088.         }
  1089.         String objectId = "[[PD]]"+uri;
  1090.         String objectIdDescription = "PortaApplicativa ["+uri+"]";      
  1091.         ImportInformationMissing importInformationMissing = null;
  1092.         if(this.importInformationMissingCollection!=null){
  1093.             importInformationMissing = this.importInformationMissingCollection.get(objectId);
  1094.         }
  1095.        
  1096.         try{
  1097.            
  1098.             // *** campi da verificare ***
  1099.            
  1100.             String tipoSoggettoProprietario = pa.getTipoSoggettoProprietario();
  1101.             String nomeSoggettoProprietario = pa.getNomeSoggettoProprietario();
  1102.             if(tipoSoggettoProprietario==null || nomeSoggettoProprietario==null){
  1103.                
  1104.                 // provo ad utilizzare le informazioni eventualmente presenti nell'oggetto importInformationMissing
  1105.                 // se non sono presenti nemmeno in tale oggetto, sollevo eccezione
  1106.                 ImportInformationMissingException infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  1107.                 boolean throwException = false;
  1108.                
  1109.                 // soggetto
  1110.                 if(tipoSoggettoProprietario==null || nomeSoggettoProprietario==null){
  1111.                     if(importInformationMissing!=null && importInformationMissing.getSoggetto()!=null){
  1112.                         if(!this.registryReader.existsSoggetto(importInformationMissing.getSoggetto())){
  1113.                             // verifico che non esista nell'archivio che sto importanto
  1114.                             boolean found = false;
  1115.                             if(this.archive.getSoggetti()!=null && this.archive.getSoggetti().size()>0){
  1116.                                 for (int i = 0; i < this.archive.getSoggetti().size(); i++) {
  1117.                                     ArchiveSoggetto archiveSoggetto = this.archive.getSoggetti().get(i);
  1118.                                     if(archiveSoggetto.getIdSoggetto().equals(importInformationMissing.getSoggetto())){
  1119.                                         found = true;
  1120.                                         break;
  1121.                                     }
  1122.                                 }
  1123.                             }
  1124.                             if(!found){
  1125.                                 throw new ProtocolException("Il Soggetto "+importInformationMissing.getSoggetto().toString()+" non esiste (indicato in ImportInformationMissing parameter??)");
  1126.                             }
  1127.                         }
  1128.                         pa.setTipoSoggettoProprietario(importInformationMissing.getSoggetto().getTipo());
  1129.                         pa.setNomeSoggettoProprietario(importInformationMissing.getSoggetto().getNome());
  1130.                     }else{
  1131.                         infoException.setMissingInfoSoggetto(true);
  1132.                         throwException = true;
  1133.                     }
  1134.                 }
  1135.                                
  1136.                 // se e' stata rilevata una mancanza sollevo eccezione
  1137.                 if(throwException)
  1138.                     throw infoException;
  1139.             }
  1140.            
  1141.            
  1142.             // *** Verifica documenti presenti all'interno dell'archivio ***

  1143.             // non esistono
  1144.                        
  1145.         }catch(ImportInformationMissingException e){
  1146.             throw e;
  1147.         }catch(Exception e){
  1148.             throw new Exception(objectIdDescription+" validazione fallita: "+e.getMessage(),e);
  1149.         }
  1150.     }
  1151.    
  1152.    
  1153.    
  1154.     public void validateAndFillAccordoCooperazione(ArchiveAccordoCooperazione archiveAccordoCooperazione) throws Exception{
  1155.        
  1156.         // *** object id ***
  1157.        
  1158.         AccordoCooperazione ac = archiveAccordoCooperazione.getAccordoCooperazione();
  1159.         String uri = this.idAccordoCooperazioneFactory.getUriFromAccordo(ac);
  1160.         String objectId = "[[AC]]"+uri;
  1161.         String objectIdDescription = "Accordo di Cooperazione ["+uri+"]";      
  1162.         ImportInformationMissing importInformationMissing = null;
  1163.         if(this.importInformationMissingCollection!=null){
  1164.             importInformationMissing = this.importInformationMissingCollection.get(objectId);
  1165.         }
  1166.        
  1167.         try{
  1168.            
  1169.             // *** campi da verificare ***
  1170.            
  1171.             IdSoggetto acSoggettoReferente = ac.getSoggettoReferente();
  1172.             Integer versione = ac.getVersione();
  1173.             if( (acSoggettoReferente==null || acSoggettoReferente.getTipo()==null || acSoggettoReferente.getNome()==null)
  1174.                     ||
  1175.                     versione==null){
  1176.                
  1177.                 // provo ad utilizzare le informazioni eventualmente presenti nell'oggetto importInformationMissing
  1178.                 // se non sono presenti nemmeno in tale oggetto, sollevo eccezione
  1179.                 ImportInformationMissingException infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  1180.                 boolean throwException = false;
  1181.                
  1182.                 // soggetto
  1183.                 if(acSoggettoReferente==null || acSoggettoReferente.getTipo()==null || acSoggettoReferente.getNome()==null){
  1184.                     if(importInformationMissing!=null && importInformationMissing.getSoggetto()!=null){
  1185.                         if(!this.registryReader.existsSoggetto(importInformationMissing.getSoggetto())){
  1186.                             // verifico che non esista nell'archivio che sto importanto
  1187.                             boolean found = false;
  1188.                             if(this.archive.getSoggetti()!=null && this.archive.getSoggetti().size()>0){
  1189.                                 for (int i = 0; i < this.archive.getSoggetti().size(); i++) {
  1190.                                     ArchiveSoggetto archiveSoggetto = this.archive.getSoggetti().get(i);
  1191.                                     if(archiveSoggetto.getIdSoggetto().equals(importInformationMissing.getSoggetto())){
  1192.                                         found = true;
  1193.                                         break;
  1194.                                     }
  1195.                                 }
  1196.                             }
  1197.                             if(!found){
  1198.                                 throw new ProtocolException("Il Soggetto "+importInformationMissing.getSoggetto().toString()+" non esiste (indicato in ImportInformationMissing parameter??)");
  1199.                             }
  1200.                         }
  1201.                         IdSoggetto acSoggettoReferenteNew = new IdSoggetto();
  1202.                         acSoggettoReferenteNew.setTipo(importInformationMissing.getSoggetto().getTipo());
  1203.                         acSoggettoReferenteNew.setNome(importInformationMissing.getSoggetto().getNome());
  1204.                         ac.setSoggettoReferente(acSoggettoReferenteNew);
  1205.                     }else{
  1206.                         infoException.setMissingInfoSoggetto(true);
  1207.                         throwException = true;
  1208.                     }
  1209.                 }
  1210.                
  1211.                 // versione
  1212.                 if(versione==null){
  1213.                     if(importInformationMissing!=null && importInformationMissing.getVersione()!=null){
  1214.                         ac.setVersione(importInformationMissing.getVersione());
  1215.                     }else{
  1216.                         infoException.setMissingInfoVersione(true);
  1217.                         throwException = true;
  1218.                     }
  1219.                 }
  1220.                                
  1221.                 // se e' stata rilevata una mancanza sollevo eccezione
  1222.                 if(throwException)
  1223.                     throw infoException;
  1224.             }
  1225.            
  1226.            
  1227.             // *** Verifica documenti presenti all'interno dell'archivio ***
  1228.            
  1229.             if(this.validateDocuments){
  1230.                
  1231.                 ValidazioneResult result = this.validatoreDocumenti.validaDocumenti(ac);
  1232.                 if(result.isEsito()==false){
  1233.                     if(result.getException()!=null)
  1234.                         throw new Exception(result.getMessaggioErrore(),result.getException());
  1235.                     else
  1236.                         throw new Exception(result.getMessaggioErrore());
  1237.                 }
  1238.                
  1239.             }
  1240.            
  1241.                        
  1242.         }catch(ImportInformationMissingException e){
  1243.             throw e;
  1244.         }catch(Exception e){
  1245.             throw new Exception(objectIdDescription+" validazione fallita: "+e.getMessage(),e);
  1246.         }
  1247.     }
  1248.    
  1249.     public void validateAndFillAccordoServizioParteComune(ArchiveAccordoServizioParteComune archiveAspc,boolean checkCorrelazioneAsincrona) throws Exception{
  1250.         this.validateAndFillAccordoServizioEngine(archiveAspc.getAccordoServizioParteComune(),checkCorrelazioneAsincrona);
  1251.     }
  1252.     public void validateAndFillAccordoServizioParteComune(ArchiveAccordoServizioComposto archiveAsc,boolean checkCorrelazioneAsincrona) throws Exception{
  1253.         this.validateAndFillAccordoServizioEngine(archiveAsc.getAccordoServizioParteComune(),checkCorrelazioneAsincrona);
  1254.     }
  1255.     private void validateAndFillAccordoServizioEngine(AccordoServizioParteComune aspc,boolean checkCorrelazioneAsincrona) throws Exception{
  1256.        
  1257.         // *** object id ***
  1258.        
  1259.         String uri = this.idAccordoFactory.getUriFromAccordo(aspc);
  1260.         String tipoAccordo = "[[ASPC]]";
  1261.         if(aspc.getServizioComposto()!=null){
  1262.             tipoAccordo = "[[ASC]]";
  1263.         }
  1264.         String objectId = tipoAccordo+uri;
  1265.         String objectIdDescription = "Accordo di Servizio Parte Comune ["+uri+"]";
  1266.         if(aspc.getServizioComposto()!=null){
  1267.             objectIdDescription = "Accordo di Servizio Composto ["+uri+"]";
  1268.             if(aspc.getServizioComposto().getAccordoCooperazione()!=null && !"".equals(aspc.getServizioComposto().getAccordoCooperazione().trim())){
  1269.                 objectIdDescription = objectIdDescription + " (rifAccordo: "+aspc.getServizioComposto().getAccordoCooperazione()+")";
  1270.             }
  1271.         }
  1272.         ImportInformationMissing importInformationMissing = null;
  1273.         if(this.importInformationMissingCollection!=null){
  1274.             importInformationMissing = this.importInformationMissingCollection.get(objectId);
  1275.         }
  1276.        
  1277.        
  1278.         try{
  1279.        
  1280.             // *** campi da verificare ***
  1281.            
  1282.             IdSoggetto aspcSoggettoReferente = aspc.getSoggettoReferente();
  1283.             Integer versione = aspc.getVersione();
  1284.             boolean informazioniProfiloServiziPresenti = this.isInformazioniProfiloServiziPresenti(aspc,checkCorrelazioneAsincrona);
  1285.             String uriAccordoCooperazione = null;
  1286.             if(aspc.getServizioComposto()!=null){
  1287.                 if(aspc.getServizioComposto().getAccordoCooperazione()!=null && !"".equals(aspc.getServizioComposto().getAccordoCooperazione().trim())){
  1288.                     uriAccordoCooperazione = aspc.getServizioComposto().getAccordoCooperazione();
  1289.                 }
  1290.             }
  1291.                
  1292.             if( (aspcSoggettoReferente==null || aspcSoggettoReferente.getTipo()==null || aspcSoggettoReferente.getNome()==null)
  1293.                     ||
  1294.                     versione==null
  1295.                     ||
  1296.                     !informazioniProfiloServiziPresenti
  1297.                     ||
  1298.                     ( (aspc.getServizioComposto()!=null) && (uriAccordoCooperazione==null) )
  1299.                 ){
  1300.                
  1301.                 // provo ad utilizzare le informazioni eventualmente presenti nell'oggetto importInformationMissing
  1302.                 // se non sono presenti nemmeno in tale oggetto, sollevo eccezione
  1303.                 ImportInformationMissingException infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  1304.                 boolean throwException = false;
  1305.                
  1306.                 // soggetto
  1307.                 if(aspcSoggettoReferente==null || aspcSoggettoReferente.getTipo()==null || aspcSoggettoReferente.getNome()==null){
  1308.                     if(importInformationMissing!=null && importInformationMissing.getSoggetto()!=null){
  1309.                         if(!this.registryReader.existsSoggetto(importInformationMissing.getSoggetto())){
  1310.                             // verifico che non esista nell'archivio che sto importanto
  1311.                             boolean found = false;
  1312.                             if(this.archive.getSoggetti()!=null && this.archive.getSoggetti().size()>0){
  1313.                                 for (int i = 0; i < this.archive.getSoggetti().size(); i++) {
  1314.                                     ArchiveSoggetto archiveSoggetto = this.archive.getSoggetti().get(i);
  1315.                                     if(archiveSoggetto.getIdSoggetto().equals(importInformationMissing.getSoggetto())){
  1316.                                         found = true;
  1317.                                         break;
  1318.                                     }
  1319.                                 }
  1320.                             }
  1321.                             if(!found){
  1322.                                 throw new ProtocolException("Il Soggetto "+importInformationMissing.getSoggetto().toString()+" non esiste (indicato in ImportInformationMissing parameter??)");
  1323.                             }
  1324.                         }
  1325.                         IdSoggetto aspcSoggettoReferenteNew = new IdSoggetto();
  1326.                         aspcSoggettoReferenteNew.setTipo(importInformationMissing.getSoggetto().getTipo());
  1327.                         aspcSoggettoReferenteNew.setNome(importInformationMissing.getSoggetto().getNome());
  1328.                         aspc.setSoggettoReferente(aspcSoggettoReferenteNew);
  1329.                     }else{
  1330.                         infoException.setMissingInfoSoggetto(true);
  1331.                         throwException = true;
  1332.                     }
  1333.                 }
  1334.                
  1335.                 // versione
  1336.                 if(versione==null){
  1337.                     if(importInformationMissing!=null && importInformationMissing.getVersione()!=null){
  1338.                         aspc.setVersione(importInformationMissing.getVersione());
  1339.                     }else{
  1340.                         infoException.setMissingInfoVersione(true);
  1341.                         throwException = true;
  1342.                     }
  1343.                 }
  1344.                
  1345.                 // info sui servizi
  1346.                 if(!informazioniProfiloServiziPresenti){
  1347.                     if(importInformationMissing!=null && importInformationMissing.sizePortTypeList()>0){
  1348.                         for(int i=0; i<importInformationMissing.sizePortTypeList(); i++){
  1349.                             aspc.addPortType(importInformationMissing.getPortType(i));
  1350.                         }
  1351.                     }
  1352.                     // ricalcolo se adesso tutte le informazioni sono valide
  1353.                     informazioniProfiloServiziPresenti = this.isInformazioniProfiloServiziPresenti(aspc,checkCorrelazioneAsincrona);
  1354.                     if(!informazioniProfiloServiziPresenti){
  1355.                         infoException.setMissingInfoProfiliServizi(true);
  1356.                         // elimino tanto verranno ricreati dall'interfaccia
  1357.                         while(aspc.sizePortTypeList()>0){
  1358.                             aspc.removePortType(0);
  1359.                         }
  1360.                         infoException.setObject(aspc);
  1361.                         infoException.setClassObject(aspc.getClass());
  1362.                         throwException = true;
  1363.                     }
  1364.                 }
  1365.                                
  1366.                 // accordoCooperazione
  1367.                 if( (aspc.getServizioComposto()!=null) && (uriAccordoCooperazione==null) ){
  1368.                     if(importInformationMissing!=null && importInformationMissing.getIdAccordoCooperazione()!=null){
  1369.                         aspc.getServizioComposto().setAccordoCooperazione(this.idAccordoCooperazioneFactory.getUriFromIDAccordo(importInformationMissing.getIdAccordoCooperazione()));
  1370.                     }else{
  1371.                         infoException.setMissingInfoAccordoCooperazione(true);
  1372.                         throwException = true;
  1373.                     }
  1374.                 }
  1375.                                
  1376.                 // se e' stata rilevata una mancanza sollevo eccezione
  1377.                 if(throwException)
  1378.                     throw infoException;
  1379.             }
  1380.            
  1381.            
  1382.             // *** Verifica documenti presenti all'interno del package ***
  1383.            
  1384.             if(this.validateDocuments){
  1385.                
  1386.                 ValidazioneResult result = this.validatoreDocumenti.validaSpecificaInterfaccia(aspc);
  1387.                 if(result.isEsito()==false){
  1388.                     if(result.getException()!=null)
  1389.                         throw new Exception(result.getMessaggioErrore(),result.getException());
  1390.                     else
  1391.                         throw new Exception(result.getMessaggioErrore());
  1392.                 }
  1393.                
  1394.                 result = this.validatoreDocumenti.validaSpecificaConversazione(aspc);
  1395.                 if(result.isEsito()==false){
  1396.                     if(result.getException()!=null)
  1397.                         throw new Exception(result.getMessaggioErrore(),result.getException());
  1398.                     else
  1399.                         throw new Exception(result.getMessaggioErrore());
  1400.                 }
  1401.                
  1402.                 result = this.validatoreDocumenti.validaDocumenti(aspc);
  1403.                 if(result.isEsito()==false){
  1404.                     if(result.getException()!=null)
  1405.                         throw new Exception(result.getMessaggioErrore(),result.getException());
  1406.                     else
  1407.                         throw new Exception(result.getMessaggioErrore());
  1408.                 }
  1409.                
  1410.             }
  1411.            
  1412.         }catch(ImportInformationMissingException e){
  1413.             throw e;
  1414.         }catch(Exception e){
  1415.             throw new Exception(objectIdDescription+" validazione fallita: "+e.getMessage(),e);
  1416.         }

  1417.     }
  1418.    
  1419.     private boolean  isInformazioniProfiloServiziPresenti(AccordoServizioParteComune aspc,boolean checkCorrelazioneAsincrona){
  1420.         if(aspc==null){
  1421.             return false;
  1422.         }
  1423.        
  1424.         if(aspc.getProfiloCollaborazione()==null && aspc.sizePortTypeList()<=0){
  1425.             return false;
  1426.         }
  1427.        
  1428.         if(aspc.sizePortTypeList()>0){
  1429.             for (int i = 0; i < aspc.sizePortTypeList(); i++) {
  1430.                 PortType pt = aspc.getPortType(i);
  1431.                 if(pt==null){
  1432.                     return false;
  1433.                 }
  1434.                 //String profiloCollaborazionePT = pt.getProfiloCollaborazione();
  1435.                 if(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT.equals(pt.getProfiloPT())){
  1436.                     // default
  1437.                     if(aspc.getProfiloCollaborazione()==null){
  1438.                         return false;
  1439.                     }
  1440.                     //profiloCollaborazionePT = aspc.getProfiloCollaborazione();
  1441.                 }
  1442.                 else{
  1443.                     // ridefinisci
  1444.                     if(pt.getProfiloCollaborazione()==null && aspc.getProfiloCollaborazione()==null){
  1445.                         return false;
  1446.                     }
  1447.                 }
  1448.                 for (int j = 0; j < pt.sizeAzioneList(); j++) {
  1449.                     Operation op = pt.getAzione(j);
  1450.                     //String profiloCollaborazioneAzione = null;
  1451.                     if(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT.equals(op.getProfAzione())){
  1452.                         // default
  1453.                         if(aspc.getProfiloCollaborazione()==null && pt.getProfiloCollaborazione()==null){
  1454.                             return false;
  1455.                         }
  1456.                         //profiloCollaborazioneAzione = profiloCollaborazionePT;
  1457.                     }
  1458.                     else{
  1459.                         // ridefinisci
  1460.                         if(op.getProfiloCollaborazione()==null && pt.getProfiloCollaborazione()==null && aspc.getProfiloCollaborazione()==null){
  1461.                             return false;
  1462.                         }
  1463.                         //profiloCollaborazioneAzione = op.getProfiloCollaborazione();
  1464.                     }
  1465.                    
  1466.                     // check correlazione asincrona
  1467.                     // Si creano dipendenze circolari.
  1468.                     // Inoltre non e' possibile importare un package, se prima non e' stato importato quello del correlato.
  1469. //                  if(checkCorrelazioneAsincrona){
  1470. //                      if(CostantiRegistroServizi.ASINCRONO_ASIMMETRICO.equals(profiloCollaborazioneAzione) ||
  1471. //                              CostantiRegistroServizi.ASINCRONO_SIMMETRICO.equals(profiloCollaborazioneAzione)){
  1472. //                          if(op.getCorrelata()==null){
  1473. //                              // search correlazione
  1474. //                              if(existsCorrelazioneAsincrona(aspc.getPortTypeList(), pt.getNome(), op.getNome())==false){
  1475. //                                  return false;
  1476. //                              }
  1477. //                          }
  1478. //                      }
  1479. //                  }
  1480.                 }
  1481.             }
  1482.         }
  1483.         else{
  1484.            
  1485.         }
  1486.        
  1487.         return true;
  1488.     }
  1489.    
  1490. //  private boolean existsCorrelazioneAsincrona(List<PortType> listPortTypes, String ptName, String opName){
  1491. //      for (PortType portType : listPortTypes) {
  1492. //          for (Operation operation : portType.getAzioneList()) {
  1493. //              if(operation.getNome().equals(opName) && portType.getNome().equals(ptName)){
  1494. //                  continue;
  1495. //              }
  1496. //              if(operation.getCorrelata()!=null && opName.equals(operation.getCorrelata())){
  1497. //                  if(operation.getCorrelataServizio()==null && portType.getNome().equals(ptName)){
  1498. //                      return true; // correlazione verso altra azione dello stesso port type indicato come parametro;
  1499. //                  }
  1500. //                  if(operation.getCorrelataServizio()!=null && operation.getCorrelataServizio().equals(ptName)){
  1501. //                      return true; // correlazione verso il servizio e l'azione indicata come parametro;
  1502. //                  }
  1503. //              }
  1504. //          }
  1505. //      }
  1506. //      return false;
  1507. //  }
  1508.    
  1509.     public void validateAndFillAccordoServizioParteSpecifica(ArchiveAccordoServizioParteSpecifica archiveAsps,
  1510.             Map<String, IDSoggetto> mapIdSoggettoDefault,
  1511.             Map<String, Boolean> mapAPIconReferente) throws Exception{
  1512.        
  1513.         // *** object id ***
  1514.         AccordoServizioParteSpecifica asps = archiveAsps.getAccordoServizioParteSpecifica();
  1515.         String uri = null;
  1516.         if(asps.getTipoSoggettoErogatore()==null || asps.getNomeSoggettoErogatore()==null || asps.getVersione()==null) {
  1517.             uri = asps.getTipo()+"/"+asps.getNome();
  1518.         }
  1519.         else {
  1520.             uri = this.idServizioFactory.getUriFromAccordo(asps);
  1521.         }
  1522.         String objectId = "[[ASPS]]"+uri;
  1523.         String objectIdDescription = "Accordo di Servizio Parte Specifica ["+uri+"]";
  1524.         if(asps.getAccordoServizioParteComune()!=null && !"".equals(asps.getAccordoServizioParteComune().trim())){
  1525.             objectIdDescription = objectIdDescription +" (rifParteComune: "+asps.getAccordoServizioParteComune()+")";
  1526.         }
  1527.         ImportInformationMissing importInformationMissing = null;
  1528.         if(this.importInformationMissingCollection!=null){
  1529.             importInformationMissing = this.importInformationMissingCollection.get(objectId);
  1530.         }
  1531.        
  1532.        
  1533.         try{            
  1534.             // *** Verifica riferimento Parte Comune ***
  1535.             AccordoServizioParteComune aspc = null;
  1536.             if(asps.getAccordoServizioParteComune()!=null && !"".equals(asps.getAccordoServizioParteComune().trim())){
  1537.                 String uriAPC = asps.getAccordoServizioParteComune();
  1538.                 try{
  1539.                    
  1540.                     // Il riferimento potrebbe contenere un nome dinamico rispetto all'erogatore
  1541.                     if(uriAPC!=null) {
  1542.                         uriAPC = ImporterInformationMissingSetter.replaceSoggettoProprietarioOrDefault(this.registryReader, uriAPC, asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore());
  1543.                         uriAPC = ImporterInformationMissingSetter.replaceSoggettoErogatore(uriAPC, asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore());
  1544.                     }
  1545.                    
  1546.                     IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromUri(uriAPC);
  1547.                    
  1548.                     // Gestione SoggettoReferente per verifica riferimento Parte Comune ***
  1549.                     IProtocolFactory<?> protocolFactory = this.protocolFactoryManager.getProtocolFactoryByOrganizationType(asps.getTipoSoggettoErogatore());
  1550.                     boolean APIconReferente = mapAPIconReferente.get(protocolFactory.getProtocol());
  1551.                     if(!APIconReferente) {
  1552.                         IDSoggetto soggettoDefaultProtocollo = mapIdSoggettoDefault.get(protocolFactory.getProtocol());
  1553.                         if(!idAccordo.getSoggettoReferente().equals(soggettoDefaultProtocollo)) {
  1554.                             idAccordo.getSoggettoReferente().setTipo(soggettoDefaultProtocollo.getTipo());
  1555.                             idAccordo.getSoggettoReferente().setNome(soggettoDefaultProtocollo.getNome());
  1556.                         }
  1557.                     }
  1558.                    
  1559.                     // Verifica
  1560.                     aspc = this.registryReader.getAccordoServizioParteComune(idAccordo);
  1561.                     if(aspc==null){
  1562.                         throw new Exception("getAccordoServizioParteComune return null");
  1563.                     }
  1564.                 //}catch(RegistryNotFound notFound){
  1565.                 }catch(Exception notFound){ // Se non esiste il soggetto, il metodo sopra ritorna null, poichè il driver non ritorna notFound. Questo succede se il soggetto è nell'archivio
  1566.                     // verifico che non esista nell'archivio che sto importanto
  1567.                     boolean found = false;
  1568.                     if(this.archive.getAccordiServizioParteComune()!=null && this.archive.getAccordiServizioParteComune().size()>0){
  1569.                         for (int i = 0; i < this.archive.getAccordiServizioParteComune().size(); i++) {
  1570.                             ArchiveAccordoServizioParteComune archiveAccordo = this.archive.getAccordiServizioParteComune().get(i);
  1571.                             IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromAccordo(archiveAccordo.getAccordoServizioParteComune());
  1572.                             if(idAccordo.equals(this.idAccordoFactory.getIDAccordoFromUri(uriAPC))){
  1573.                                 found = true;
  1574.                                 aspc = archiveAccordo.getAccordoServizioParteComune();
  1575.                                 break;
  1576.                             }
  1577.                         }
  1578.                     }
  1579.                     if(!found){
  1580.                         if(this.archive.getAccordiServizioComposto()!=null && this.archive.getAccordiServizioComposto().size()>0){
  1581.                             for (int i = 0; i < this.archive.getAccordiServizioComposto().size(); i++) {
  1582.                                 ArchiveAccordoServizioParteComune archiveAccordo = this.archive.getAccordiServizioComposto().get(i);
  1583.                                 IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromAccordo(archiveAccordo.getAccordoServizioParteComune());
  1584.                                 if(idAccordo.equals(this.idAccordoFactory.getIDAccordoFromUri(uriAPC))){
  1585.                                     found = true;
  1586.                                     aspc = archiveAccordo.getAccordoServizioParteComune();
  1587.                                     break;
  1588.                                 }
  1589.                             }
  1590.                         }
  1591.                     }
  1592.                     if(!found){
  1593.                         throw new ProtocolException("Accordo di Servizio Parte Comune ["+uriAPC+"], riferito dall'archivio, non esiste",notFound);
  1594.                     }
  1595.                 }
  1596.             }
  1597.            
  1598.            
  1599.             // *** campi da verificare ***
  1600.             String tipoSoggettoErogatore = asps.getTipoSoggettoErogatore();
  1601.             String nomeSoggettoErogatore = asps.getNomeSoggettoErogatore();
  1602.             Integer versione = asps.getVersione();
  1603.                                
  1604.             if(tipoSoggettoErogatore==null || nomeSoggettoErogatore==null || versione==null || aspc==null ){
  1605.                
  1606.                 // provo ad utilizzare le informazioni eventualmente presenti nell'oggetto importInformationMissing
  1607.                 // se non sono presenti nemmeno in tale oggetto, sollevo eccezione
  1608.                 ImportInformationMissingException infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  1609.                 boolean throwException = false;
  1610.                
  1611.                 // soggetto
  1612.                 if(tipoSoggettoErogatore==null || nomeSoggettoErogatore==null){
  1613.                     if(importInformationMissing!=null && importInformationMissing.getSoggetto()!=null){
  1614.                         if(!this.registryReader.existsSoggetto(importInformationMissing.getSoggetto())){
  1615.                             // verifico che non esista nell'archivio che sto importanto
  1616.                             boolean found = false;
  1617.                             if(this.archive.getSoggetti()!=null && this.archive.getSoggetti().size()>0){
  1618.                                 for (int i = 0; i < this.archive.getSoggetti().size(); i++) {
  1619.                                     ArchiveSoggetto archiveSoggetto = this.archive.getSoggetti().get(i);
  1620.                                     if(archiveSoggetto.getIdSoggetto().equals(importInformationMissing.getSoggetto())){
  1621.                                         found = true;
  1622.                                         break;
  1623.                                     }
  1624.                                 }
  1625.                             }
  1626.                             if(!found){
  1627.                                 throw new ProtocolException("Il Soggetto "+importInformationMissing.getSoggetto().toString()+" non esiste (indicato in ImportInformationMissing parameter??)");
  1628.                             }
  1629.                         }
  1630.                         asps.setTipoSoggettoErogatore(importInformationMissing.getSoggetto().getTipo());
  1631.                         asps.setNomeSoggettoErogatore(importInformationMissing.getSoggetto().getNome());
  1632. //                      if(asps.getServizio().getConnettore().getNome()==null){
  1633. //                          String nomeConn = "CNT_" + importInformationMissing.getSoggetto().getTipo() + "/" + importInformationMissing.getSoggetto().getNome() + "_" +
  1634. //                                  asps.getServizio().getTipo() + "/" + asps.getServizio().getNome();
  1635. //                          asps.getServizio().getConnettore().setNome(nomeConn);
  1636. //                      }
  1637.                     }else{
  1638.                         infoException.setMissingInfoSoggetto(true);
  1639.                         throwException = true;
  1640.                     }
  1641.                 }
  1642.                
  1643.                 // versione
  1644.                 if(versione==null){
  1645.                     if(importInformationMissing!=null && importInformationMissing.getVersione()!=null){
  1646.                         asps.setVersione(importInformationMissing.getVersione());
  1647.                     }else{
  1648.                         infoException.setMissingInfoVersione(true);
  1649.                         throwException = true;
  1650.                     }
  1651.                 }
  1652.                
  1653.                 // accordoServizioParteComune
  1654.                 if(aspc==null){
  1655.                     if(importInformationMissing!=null && importInformationMissing.getIdAccordoServizioParteComune()!=null){
  1656.                         asps.setAccordoServizioParteComune(this.idAccordoFactory.getUriFromIDAccordo(importInformationMissing.getIdAccordoServizioParteComune()));
  1657.                     }else{
  1658.                         infoException.setMissingInfoAccordoServizioParteComune(true);
  1659.                         throwException = true;
  1660.                     }
  1661.                 }
  1662.                
  1663.                 // se e' stata rilevata una mancanza sollevo eccezione
  1664.                 if(throwException)
  1665.                     throw infoException;
  1666.             }
  1667.            
  1668.            
  1669.             if(aspc!=null){
  1670.                
  1671.                 // *** Verifica documenti presenti all'interno del package ***
  1672.                 List<String> serviziIdentificatiNellaParteComune = this.letturaServiziDefinitiParteComune(asps, aspc);
  1673.                 if(this.validateDocuments){                    
  1674.                    
  1675.                     ValidazioneResult result = this.validatoreDocumenti.validaSpecificaInterfaccia(asps, aspc);
  1676.                     if(result.isEsito()==false){
  1677.                         if(result.getException()!=null)
  1678.                             throw new Exception(result.getMessaggioErrore(),result.getException());
  1679.                         else
  1680.                             throw new Exception(result.getMessaggioErrore());
  1681.                     }
  1682.                    
  1683.                     result = this.validatoreDocumenti.validaDocumenti(asps);
  1684.                     if(result.isEsito()==false){
  1685.                         if(result.getException()!=null)
  1686.                             throw new Exception(result.getMessaggioErrore(),result.getException());
  1687.                         else
  1688.                             throw new Exception(result.getMessaggioErrore());
  1689.                     }
  1690.                    
  1691.                     verificaMappingPortTypeBindingInRiferimentoParteComune(asps, aspc, serviziIdentificatiNellaParteComune);
  1692.                
  1693.                 }
  1694.                
  1695.                
  1696.                 // *** Verifica portType riferito ***
  1697.                 if(importInformationMissing!=null && importInformationMissing.getPortTypeImplemented()!=null){
  1698.                     // Il nome deve essere gia' corretto dentro l'archivio. Altrimenti tutti i riferimenti poi (mapping.id, porte applicative ....) sono sbagliati.
  1699. //                  if(asps.getPortType()!=null && asps.getPortType().equals(asps.getNome())){
  1700. //                      asps.setNome(importInformationMissing.getPortTypeImplemented());
  1701. //                  }
  1702.                     asps.setPortType(importInformationMissing.getPortTypeImplemented());
  1703.                 }
  1704.                 if(asps.getPortType()!=null){
  1705.                     if(serviziIdentificatiNellaParteComune.contains(asps.getPortType())==false){
  1706.                         ImportInformationMissingException infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  1707.                         infoException.setMismatchPortTypeRifServiziParteComune(true, asps.getPortType(), serviziIdentificatiNellaParteComune);
  1708.                         throw infoException;
  1709.                     }
  1710.                 }  
  1711.                
  1712.             }
  1713.            
  1714.         }catch(ImportInformationMissingException e){
  1715.             throw e;
  1716.         }catch(Exception e){
  1717.             throw new Exception(objectIdDescription+" validazione fallita: "+e.getMessage(),e);
  1718.         }
  1719.        
  1720.     }
  1721.    
  1722.     private List<String> letturaServiziDefinitiParteComune(Fruitore fruitore,AccordoServizioParteSpecifica asps,AccordoServizioParteComune aspc){
  1723.         Boolean correlato = null;
  1724.        
  1725.         // Identificazione attraverso WSDL Implementativo
  1726.         if(fruitore.getByteWsdlImplementativoErogatore()!=null){
  1727.             correlato = false;
  1728.         }
  1729.         else if(fruitore.getByteWsdlImplementativoFruitore()!=null){
  1730.             correlato = true;
  1731.         }
  1732.         else if(asps.getByteWsdlImplementativoErogatore()!=null){
  1733.             correlato = false;
  1734.         }
  1735.         else if(asps.getByteWsdlImplementativoFruitore()!=null){
  1736.             correlato = true;
  1737.         }
  1738.        
  1739.         // Identificazione attraverso tipologia
  1740.         if(correlato==null){
  1741.             TipologiaServizio tipologiaServizio = TipologiaServizio.NORMALE;
  1742.             if(asps!=null){
  1743.                 tipologiaServizio = asps.getTipologiaServizio();
  1744.             }
  1745.             correlato = TipologiaServizio.CORRELATO.equals(tipologiaServizio);
  1746.         }
  1747.        
  1748.         return this.letturaServiziDefinitiParteComune(correlato, aspc);
  1749.     }
  1750.     private List<String> letturaServiziDefinitiParteComune(AccordoServizioParteSpecifica asps,AccordoServizioParteComune aspc){
  1751.         Boolean correlato = null;
  1752.        
  1753.         // Identificazione attraverso WSDL Implementativo
  1754.         if(asps!=null && asps.getByteWsdlImplementativoErogatore()!=null){
  1755.             correlato = false;
  1756.         }
  1757.         else if(asps!=null && asps.getByteWsdlImplementativoFruitore()!=null){
  1758.             correlato = true;
  1759.         }
  1760.        
  1761.         // Identificazione attraverso tipologia
  1762.         if(correlato==null){
  1763.             TipologiaServizio tipologiaServizio = TipologiaServizio.NORMALE;
  1764.             if(asps!=null){
  1765.                 tipologiaServizio = asps.getTipologiaServizio();
  1766.             }
  1767.             correlato = TipologiaServizio.CORRELATO.equals(tipologiaServizio);
  1768.         }
  1769.        
  1770.         return this.letturaServiziDefinitiParteComune(correlato, aspc);
  1771.     }
  1772.     private List<String> letturaServiziDefinitiParteComune(boolean correlato,AccordoServizioParteComune aspc){
  1773.         List<String> serviziIdentificatiNellaParteComune = new ArrayList<>();
  1774.                
  1775.         // Lettura Accordo di Servizio Parte Comune di OpenSPCoop
  1776.         // NOTA: aspc di openspcoop contiene sia le parti comuni "normali" che quelle "servizio composto"
  1777.         for(int i=0; i<aspc.sizePortTypeList(); i++){
  1778.             // faccio vedere solo i servizi correlati o i servizi normali, a seconda se e' stato fornito il wsdl implementativo fruitore o erogatore
  1779.             PortType pt = aspc.getPortType(i);
  1780.             boolean servizioCorrelato = false;
  1781.             for(int j=0; j<pt.sizeAzioneList(); j++){
  1782.                 Operation op = pt.getAzione(j);
  1783.                 // NOTA: solo un asincrono simmetrico o asincrono asimmetrico (verso servizio diverso) e' correlato!
  1784.                 if(op.getCorrelataServizio()!=null && !pt.getNome().equals(op.getCorrelataServizio()) && op.getCorrelata()!=null){
  1785.                     servizioCorrelato = true;
  1786.                     break;
  1787.                 }
  1788.             }
  1789.             if(correlato){
  1790.                 if(servizioCorrelato){
  1791.                     serviziIdentificatiNellaParteComune.add(aspc.getPortType(i).getNome());
  1792.                 }
  1793.             }else{
  1794.                 if(!servizioCorrelato){
  1795.                     serviziIdentificatiNellaParteComune.add(aspc.getPortType(i).getNome());
  1796.                 }
  1797.             }
  1798.         }
  1799.        
  1800.         return serviziIdentificatiNellaParteComune;
  1801.     }
  1802.    
  1803.     private void verificaMappingPortTypeBindingInRiferimentoParteComune(Fruitore fruitore,AccordoServizioParteSpecifica asps,
  1804.             AccordoServizioParteComune aspc,
  1805.             List<String> serviziIdentificatiNellaParteComune) throws Exception {
  1806.         // Identificazione WSDL Implementativo
  1807.         byte[]wsdlImplementativo = null;
  1808.         String tipoWSDL = "WSDL Implementativo";
  1809.         if(fruitore.getByteWsdlImplementativoErogatore()!=null){
  1810.             wsdlImplementativo = asps.getByteWsdlImplementativoErogatore();
  1811.             tipoWSDL = "WSDL Implementativo Erogatore";
  1812.         }
  1813.         else if(fruitore.getByteWsdlImplementativoFruitore()!=null){
  1814.             wsdlImplementativo = asps.getByteWsdlImplementativoFruitore();
  1815.             tipoWSDL = "WSDL Implementativo Fruitore";
  1816.         }
  1817.         else if(asps.getByteWsdlImplementativoErogatore()!=null){
  1818.             wsdlImplementativo = asps.getByteWsdlImplementativoErogatore();
  1819.             tipoWSDL = "WSDL Implementativo Erogatore";
  1820.         }
  1821.         else if(asps.getByteWsdlImplementativoFruitore()!=null){
  1822.             wsdlImplementativo = asps.getByteWsdlImplementativoFruitore();
  1823.             tipoWSDL = "WSDL Implementativo Fruitore";
  1824.         }
  1825.         if(wsdlImplementativo!=null){
  1826.             this.verificaMappingPortTypeBindingInRiferimentoParteComune(wsdlImplementativo, tipoWSDL, aspc, serviziIdentificatiNellaParteComune);
  1827.         }
  1828.     }
  1829.     private void verificaMappingPortTypeBindingInRiferimentoParteComune(AccordoServizioParteSpecifica asps,
  1830.             AccordoServizioParteComune aspc,
  1831.             List<String> serviziIdentificatiNellaParteComune) throws Exception {
  1832.         // Identificazione WSDL Implementativo
  1833.         byte[]wsdlImplementativo = null;
  1834.         String tipoWSDL = "WSDL Implementativo";
  1835.         if(asps.getByteWsdlImplementativoErogatore()!=null){
  1836.             wsdlImplementativo = asps.getByteWsdlImplementativoErogatore();
  1837.             tipoWSDL = "WSDL Implementativo Erogatore";
  1838.         }
  1839.         else if(asps.getByteWsdlImplementativoFruitore()!=null){
  1840.             wsdlImplementativo = asps.getByteWsdlImplementativoFruitore();
  1841.             tipoWSDL = "WSDL Implementativo Fruitore";
  1842.         }
  1843.         if(wsdlImplementativo!=null){
  1844.             this.verificaMappingPortTypeBindingInRiferimentoParteComune(wsdlImplementativo, tipoWSDL, aspc, serviziIdentificatiNellaParteComune);
  1845.         }
  1846.     }
  1847.     private void verificaMappingPortTypeBindingInRiferimentoParteComune( byte[]wsdlImplementativo,String tipoWSDL,
  1848.             AccordoServizioParteComune aspc,
  1849.             List<String> serviziIdentificatiNellaParteComune) throws Exception {
  1850.        
  1851.         List<String> portTypesImplemented = new ArrayList<>();
  1852.         try{
  1853.                                    
  1854.             // Lettura WSDL Parte Specifica
  1855.             Document d = this.xmlUtils.newDocument(wsdlImplementativo);
  1856.             DefinitionWrapper wsdl = new DefinitionWrapper(d,this.xmlUtils,false,false);
  1857.             Map<QName,QName> mapBindingToPortTypeImplemented = wsdl.getMapPortTypesImplementedBinding();
  1858.             for (QName binding : mapBindingToPortTypeImplemented.keySet()) {
  1859.                 QName portType = mapBindingToPortTypeImplemented.get(binding);
  1860.                 String portTypeName = portType.getLocalPart();
  1861.                 if(portTypesImplemented.contains(portTypeName)==false){
  1862.                     portTypesImplemented.add(portTypeName);
  1863.                 }
  1864.             }
  1865.         }catch(Exception e){
  1866.             String msgErrore = "La verifica dei port-types, implementati dai binding del "+tipoWSDL+", rispetto ai servizi definiti nell'accordo di servizio parte comune, ha riscontrato un errore: "+e.getMessage();
  1867.             this.protocolFactory.getLogger().error(msgErrore,e);
  1868.             throw new Exception(msgErrore,e);
  1869.         }
  1870.                    
  1871.         // Controllo
  1872.         for (String pt : portTypesImplemented) {                
  1873.             boolean trovato = false;
  1874.             for (String servizioOpenSPCoop : serviziIdentificatiNellaParteComune) {
  1875.                 if(pt.equals(servizioOpenSPCoop)){
  1876.                     trovato=true;
  1877.                     break;
  1878.                 }
  1879.             }
  1880.             if(!trovato){
  1881.                 throw new Exception("Il PortType "+pt+" implementato nei binding presenti nel "+tipoWSDL+" non è uno dei servizi definiti nell'accordo di servizio parte comune");
  1882.             }
  1883.         }

  1884.     }
  1885.    
  1886.    
  1887.    
  1888.     @SuppressWarnings("deprecation")
  1889.     public void validateAndFillFruitore(ArchiveFruitore archiveFruitore) throws Exception{
  1890.        
  1891.         // *** object id ***
  1892.         Fruitore fruitore = archiveFruitore.getFruitore();
  1893.         IDServizio asps = archiveFruitore.getIdAccordoServizioParteSpecifica();
  1894.         String uri = fruitore.getTipo()+"/"+fruitore.getNome()+"_"+this.idServizioFactory.getUriFromIDServizio(asps);
  1895.         String objectId = "[[Fruitore]]"+uri;
  1896.         String objectIdDescription = "Fruitore ["+fruitore.getTipo()+"/"+fruitore.getNome()
  1897.                 +"] dell'Accordo di Servizio Parte Specifica ["+this.idServizioFactory.getUriFromIDServizio(asps)+"]";
  1898.         ImportInformationMissing importInformationMissing = null;
  1899.         if(this.importInformationMissingCollection!=null){
  1900.             importInformationMissing = this.importInformationMissingCollection.get(objectId);
  1901.         }
  1902.        
  1903.        
  1904.         try{
  1905.                    
  1906.             // *** campi da verificare ***
  1907.             String tipoSoggettoErogatore = null;
  1908.             String nomeSoggettoErogatore = null;
  1909.             if(asps.getSoggettoErogatore()!=null){
  1910.                 tipoSoggettoErogatore = asps.getSoggettoErogatore().getTipo();
  1911.                 nomeSoggettoErogatore = asps.getSoggettoErogatore().getNome();
  1912.             }
  1913.             Integer versione = asps.getVersione();
  1914.                                
  1915.             if(tipoSoggettoErogatore==null || nomeSoggettoErogatore==null || versione==null ){
  1916.                
  1917.                 // provo ad utilizzare le informazioni eventualmente presenti nell'oggetto importInformationMissing
  1918.                 // se non sono presenti nemmeno in tale oggetto, sollevo eccezione
  1919.                 ImportInformationMissingException infoException = new ImportInformationMissingException(objectId,objectIdDescription);
  1920.                 boolean throwException = false;
  1921.                
  1922.                 // soggetto
  1923.                 if(tipoSoggettoErogatore==null || nomeSoggettoErogatore==null){
  1924.                     if(importInformationMissing!=null && importInformationMissing.getSoggetto()!=null){
  1925.                         if(!this.registryReader.existsSoggetto(importInformationMissing.getSoggetto())){
  1926.                             // verifico che non esista nell'archivio che sto importanto
  1927.                             boolean found = false;
  1928.                             if(this.archive.getSoggetti()!=null && this.archive.getSoggetti().size()>0){
  1929.                                 for (int i = 0; i < this.archive.getSoggetti().size(); i++) {
  1930.                                     ArchiveSoggetto archiveSoggetto = this.archive.getSoggetti().get(i);
  1931.                                     if(archiveSoggetto.getIdSoggetto().equals(importInformationMissing.getSoggetto())){
  1932.                                         found = true;
  1933.                                         break;
  1934.                                     }
  1935.                                 }
  1936.                             }
  1937.                             if(!found){
  1938.                                 throw new ProtocolException("Il Soggetto "+importInformationMissing.getSoggetto().toString()+" non esiste (indicato in ImportInformationMissing parameter??)");
  1939.                             }
  1940.                         }
  1941.                         if(asps.getSoggettoErogatore()==null){
  1942.                             asps.setSoggettoErogatore(importInformationMissing.getSoggetto());
  1943.                         }
  1944.                     }else{
  1945.                         infoException.setMissingInfoSoggetto(true);
  1946.                         throwException = true;
  1947.                     }
  1948.                 }
  1949.                
  1950.                 // versione
  1951.                 if(versione==null){
  1952.                     if(importInformationMissing!=null && importInformationMissing.getVersione()!=null){
  1953.                         asps.setVersione(importInformationMissing.getVersione());
  1954.                     }else{
  1955.                         infoException.setMissingInfoVersione(true);
  1956.                         throwException = true;
  1957.                     }
  1958.                 }
  1959.                
  1960.                 // se e' stata rilevata una mancanza sollevo eccezione
  1961.                 if(throwException)
  1962.                     throw infoException;
  1963.             }
  1964.            
  1965.            
  1966.             // *** Verifica riferimento Parte Specifica ***
  1967.             AccordoServizioParteSpecifica accordoAsps = null;
  1968.             try{
  1969.                 accordoAsps = this.registryReader.getAccordoServizioParteSpecifica(asps);
  1970.                 if(accordoAsps==null){
  1971.                     throw new Exception("getAccordoServizioParteSpecifica return null");
  1972.                 }
  1973.             //}catch(RegistryNotFound notFound){
  1974.             }catch(Exception notFound){ // Se non esiste il soggetto, il metodo sopra ritorna null, poichè il driver non ritorna notFound. Questo succede se il soggetto è nell'archivio
  1975.                 // verifico che non esista nell'archivio che sto importanto
  1976.                 boolean found = false;
  1977.                 if(this.archive.getAccordiServizioParteSpecifica()!=null && this.archive.getAccordiServizioParteSpecifica().size()>0){
  1978.                     for (int i = 0; i < this.archive.getAccordiServizioParteSpecifica().size(); i++) {
  1979.                         ArchiveAccordoServizioParteSpecifica archiveAccordo = this.archive.getAccordiServizioParteSpecifica().get(i);
  1980.                         IDServizio idAccordo = this.idServizioFactory.getIDServizioFromAccordo(archiveAccordo.getAccordoServizioParteSpecifica());
  1981.                         if(idAccordo.equals(asps)){
  1982.                             found = true;
  1983.                             accordoAsps = archiveAccordo.getAccordoServizioParteSpecifica();
  1984.                             break;
  1985.                         }
  1986.                     }
  1987.                 }
  1988.                 if(!found){
  1989.                     throw new ProtocolException("Accordo di Servizio Parte Specifica ["+asps+"], riferito dall'archivio fruitore, non esiste",notFound);
  1990.                 }
  1991.             }
  1992.            
  1993.            
  1994.            
  1995.             // *** Verifica riferimento Parte Comune ***
  1996.             AccordoServizioParteComune aspc = null;
  1997.             String uriAPC = null;
  1998.             try{
  1999.                 // Il riferimento potrebbe contenere un nome dinamico rispetto all'erogatore
  2000.                 uriAPC = accordoAsps.getAccordoServizioParteComune();
  2001.                 if(uriAPC!=null) {
  2002.                     uriAPC = ImporterInformationMissingSetter.replaceSoggettoProprietarioOrDefault(this.registryReader, uriAPC, asps.getSoggettoErogatore().getTipo(), asps.getSoggettoErogatore().getNome());
  2003.                     uriAPC = ImporterInformationMissingSetter.replaceSoggettoErogatore(uriAPC, asps.getSoggettoErogatore().getTipo(), asps.getSoggettoErogatore().getNome());
  2004.                 }
  2005.                
  2006.                 aspc = this.registryReader.getAccordoServizioParteComune(this.idAccordoFactory.getIDAccordoFromUri(uriAPC));
  2007.                 if(aspc==null){
  2008.                     throw new Exception("getAccordoServizioParteComune return null");
  2009.                 }
  2010.             //}catch(RegistryNotFound notFound){
  2011.             }catch(Exception notFound){ // Se non esiste il soggetto, il metodo sopra ritorna null, poichè il driver non ritorna notFound. Questo succede se il soggetto è nell'archivio
  2012.                 // verifico che non esista nell'archivio che sto importanto
  2013.                 boolean found = false;
  2014.                 if(this.archive.getAccordiServizioParteComune()!=null && this.archive.getAccordiServizioParteComune().size()>0){
  2015.                     for (int i = 0; i < this.archive.getAccordiServizioParteComune().size(); i++) {
  2016.                         ArchiveAccordoServizioParteComune archiveAccordo = this.archive.getAccordiServizioParteComune().get(i);
  2017.                         IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromAccordo(archiveAccordo.getAccordoServizioParteComune());
  2018.                         if(idAccordo.equals(this.idAccordoFactory.getIDAccordoFromUri(uriAPC))){
  2019.                             found = true;
  2020.                             aspc = archiveAccordo.getAccordoServizioParteComune();
  2021.                             break;
  2022.                         }
  2023.                     }
  2024.                 }
  2025.                 if(!found){
  2026.                     if(this.archive.getAccordiServizioComposto()!=null && this.archive.getAccordiServizioComposto().size()>0){
  2027.                         for (int i = 0; i < this.archive.getAccordiServizioComposto().size(); i++) {
  2028.                             ArchiveAccordoServizioParteComune archiveAccordo = this.archive.getAccordiServizioComposto().get(i);
  2029.                             IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromAccordo(archiveAccordo.getAccordoServizioParteComune());
  2030.                             if(idAccordo.equals(this.idAccordoFactory.getIDAccordoFromUri(uriAPC))){
  2031.                                 found = true;
  2032.                                 aspc = archiveAccordo.getAccordoServizioParteComune();
  2033.                                 break;
  2034.                             }
  2035.                         }
  2036.                     }
  2037.                 }
  2038.                 if(!found){
  2039.                     throw new ProtocolException("Accordo di Servizio Parte Comune ["+uriAPC+
  2040.                             "], riferito dall'accordo parte specifica dell'archivio fruitore, non esiste",notFound);
  2041.                 }
  2042.             }
  2043.            
  2044.            
  2045.            
  2046.             // *** Verifica documenti presenti all'interno del package ***
  2047.             List<String> serviziIdentificatiNellaParteComune = this.letturaServiziDefinitiParteComune(fruitore,accordoAsps, aspc);
  2048.             if(this.validateDocuments){                    
  2049.                
  2050.                 ValidazioneResult result = this.validatoreDocumenti.validaSpecificaInterfaccia(fruitore,accordoAsps, aspc);
  2051.                 if(result.isEsito()==false){
  2052.                     if(result.getException()!=null)
  2053.                         throw new Exception(result.getMessaggioErrore(),result.getException());
  2054.                     else
  2055.                         throw new Exception(result.getMessaggioErrore());
  2056.                 }
  2057.                                
  2058.                 verificaMappingPortTypeBindingInRiferimentoParteComune(fruitore, accordoAsps, aspc, serviziIdentificatiNellaParteComune);
  2059.            
  2060.             }
  2061.                        
  2062.         }catch(ImportInformationMissingException e){
  2063.             throw e;
  2064.         }catch(Exception e){
  2065.             throw new Exception(objectIdDescription+" validazione fallita: "+e.getMessage(),e);
  2066.         }
  2067.        
  2068.     }
  2069. }