XMLUtils.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 it.gov.spcoop.sica.manifest.driver;

  21. import java.io.ByteArrayInputStream;
  22. import java.io.ByteArrayOutputStream;
  23. import java.io.File;
  24. import java.io.FileInputStream;
  25. import java.io.InputStream;
  26. import java.io.OutputStream;

  27. import org.slf4j.Logger;
  28. import org.openspcoop2.utils.xml.JaxbUtils;
  29. import org.openspcoop2.utils.xml.ValidatoreXSD;

  30. import it.gov.spcoop.sica.manifest.AccordoCooperazione;
  31. import it.gov.spcoop.sica.manifest.AccordoServizio;
  32. import it.gov.spcoop.sica.manifest.AccordoServizioParteComune;
  33. import it.gov.spcoop.sica.manifest.AccordoServizioParteSpecifica;
  34. import it.gov.spcoop.sica.manifest.DocumentoCoordinamento;
  35. import it.gov.spcoop.sica.manifest.DocumentoLivelloServizio;
  36. import it.gov.spcoop.sica.manifest.DocumentoSemiformale;
  37. import it.gov.spcoop.sica.manifest.DocumentoSicurezza;
  38. import it.gov.spcoop.sica.manifest.ServizioComposto;
  39. import it.gov.spcoop.sica.manifest.SpecificaCoordinamento;
  40. import it.gov.spcoop.sica.manifest.SpecificaLivelliServizio;
  41. import it.gov.spcoop.sica.manifest.SpecificaSicurezza;


  42. /**
  43.  * Classe utilizzata per lavorare sui manifest inseriti all'interno di un package di un accordo di servizio o di cooperazione
  44.  *
  45.  *
  46.  * @author Poli Andrea (apoli@link.it)
  47. * @author $Author$
  48. * @version $Rev$, $Date$
  49.  */

  50. public class XMLUtils  {

  51.    
  52.     /** Validatore XSD */
  53.     static ValidatoreXSD validatoreXSD = null;
  54.     public static synchronized ValidatoreXSD getValidatoreXSD(Logger log) throws Exception{
  55.         if(XMLUtils.validatoreXSD==null){
  56.             XMLUtils.validatoreXSD = new ValidatoreXSD(log,XMLUtils.class.getResourceAsStream("/ManifestPackageSICA_originale.xsd"));
  57.         }
  58.         return XMLUtils.validatoreXSD;
  59.     }
  60.     public static boolean validateManifestoAS(AccordoServizio manifestoAS,StringBuilder motivoErroreValidazione,boolean includiInfoRegistroGenerale,boolean lunghezzaNomeAccordoLimitata){
  61.        
  62.         int size = motivoErroreValidazione.length();
  63.        
  64.         // Vincoli ManifestoAccordo
  65.         if(manifestoAS.getDescrizione()==null){
  66.             motivoErroreValidazione.append("Descrizione non fornita\n");
  67.         }
  68.         if(manifestoAS.getNome()==null){
  69.             motivoErroreValidazione.append("Nome non fornito\n");
  70.         }else if(lunghezzaNomeAccordoLimitata &&  manifestoAS.getNome().length()>Costanti.LUNGHEZZA_MAX_NOME_ACCORDO){
  71.             motivoErroreValidazione.append("Nome fornito ["+manifestoAS.getNome()+"] supera il numero di caratteri consentiti: "+Costanti.LUNGHEZZA_MAX_NOME_ACCORDO+"\n");
  72.         }
  73.        
  74.         if(manifestoAS.getDataCreazione()==null){
  75.             motivoErroreValidazione.append("DataCreazione non fornita\n");
  76.         }
  77.         if(manifestoAS.getAllegati()!=null){
  78.             for(int i=0; i<manifestoAS.getAllegati().sizeGenericoDocumentoList(); i++){
  79.                 if(manifestoAS.getAllegati().getGenericoDocumento(i)==null){
  80.                     motivoErroreValidazione.append("Allegato["+i+"] senza la definizione del documento\n");
  81.                 }
  82.             }
  83.         }
  84.         if(manifestoAS.getSpecificaSemiformale()!=null){
  85.             for(int i=0; i<manifestoAS.getSpecificaSemiformale().sizeDocumentoSemiformaleList(); i++){
  86.                 DocumentoSemiformale ss = manifestoAS.getSpecificaSemiformale().getDocumentoSemiformale(i);
  87.                 if(ss.getBase()==null){
  88.                     motivoErroreValidazione.append("SpecificaSemiformale["+i+"] senza la location del documento semiformale\n");
  89.                 }
  90.                 if(ss.getTipo()==null){
  91.                     motivoErroreValidazione.append("SpecificaSemiformale["+i+"] senza il tipo del documento semiformale\n");
  92.                 }else{
  93.                     if(TipiDocumentoSemiformale.HTML.toString().equals(ss.getTipo())==false &&
  94.                             TipiDocumentoSemiformale.UML.toString().equals(ss.getTipo())==false &&
  95.                             TipiDocumentoSemiformale.XML.toString().equals(ss.getTipo())==false &&
  96.                             TipiDocumentoSemiformale.LINGUAGGIO_NATURALE.toString().equals(ss.getTipo())==false ){
  97.                         motivoErroreValidazione.append("SpecificaSemiformale["+i+"] con tipo del documento semiformale["+ss.getTipo()+"] diverso dai tipi accettati:"+
  98.                                 TipiDocumentoSemiformale.HTML.toString()+","+
  99.                                 TipiDocumentoSemiformale.UML.toString()+","+
  100.                                 TipiDocumentoSemiformale.XML.toString()+","+
  101.                                 TipiDocumentoSemiformale.LINGUAGGIO_NATURALE.toString()+","+"\n");
  102.                     }
  103.                 }
  104.             }
  105.         }
  106.        
  107.         if(manifestoAS.getParteComune()!=null && manifestoAS.getParteSpecifica()!=null){
  108.             motivoErroreValidazione.append("Definita sia una parte comune che una parte specifica\n");
  109.         }else if(manifestoAS.getParteComune()!=null){
  110.             AccordoServizioParteComune parteComune = manifestoAS.getParteComune();
  111.             if(includiInfoRegistroGenerale){
  112.                 if(parteComune.getPubblicatore()==null){
  113.                     motivoErroreValidazione.append("Pubblicatore non definito\n");
  114.                 }
  115.             }
  116.             if(parteComune.getSpecificaInterfaccia()==null){
  117.                 motivoErroreValidazione.append("SpecificaInterfaccia non definita\n");
  118.             }else{
  119.                 if(parteComune.getSpecificaInterfaccia().getInterfacciaConcettuale()==null){
  120.                     motivoErroreValidazione.append("SpecificaInterfacciaConcettuale non definita\n");
  121.                 }else{
  122.                     if(parteComune.getSpecificaInterfaccia().getInterfacciaConcettuale().getBase()==null){
  123.                         motivoErroreValidazione.append("contenuto SpecificaInterfacciaConcettuale non definito\n");
  124.                     }
  125.                     if(parteComune.getSpecificaInterfaccia().getInterfacciaConcettuale().getTipo()!=null &&
  126.                             TipiDocumentoInterfaccia.WSDL.toString().equals(parteComune.getSpecificaInterfaccia().getInterfacciaConcettuale().getTipo().name())==false){
  127.                         motivoErroreValidazione.append("tipo SpecificaInterfacciaConcettuale diverso da "+TipiDocumentoInterfaccia.WSDL.toString()+"\n");
  128.                     }
  129.                 }
  130.                 if(parteComune.getSpecificaInterfaccia().getInterfacciaLogicaLatoErogatore()==null){
  131.                     motivoErroreValidazione.append("SpecificaInterfacciaLogicaLatoErogatore non definita\n");
  132.                 }else{
  133.                     if(parteComune.getSpecificaInterfaccia().getInterfacciaLogicaLatoErogatore().getBase()==null){
  134.                         motivoErroreValidazione.append("contenuto SpecificaInterfacciaLogicaLatoErogatore non definito\n");
  135.                     }
  136.                     if(parteComune.getSpecificaInterfaccia().getInterfacciaLogicaLatoErogatore().getTipo()!=null &&
  137.                             TipiDocumentoInterfaccia.WSDL.toString().equals(parteComune.getSpecificaInterfaccia().getInterfacciaLogicaLatoErogatore().getTipo().name())==false){
  138.                         motivoErroreValidazione.append("tipo SpecificaInterfacciaLogicaLatoErogatore diverso da "+TipiDocumentoInterfaccia.WSDL.toString()+"\n");
  139.                     }
  140.                 }
  141.                 if(parteComune.getSpecificaInterfaccia().getInterfacciaLogicaLatoFruitore()!=null){
  142.                     if(parteComune.getSpecificaInterfaccia().getInterfacciaLogicaLatoFruitore().getBase()==null){
  143.                         motivoErroreValidazione.append("contenuto SpecificaInterfacciaLogicaLatoFruitore non definito\n");
  144.                     }
  145.                     if(parteComune.getSpecificaInterfaccia().getInterfacciaLogicaLatoFruitore().getTipo()!=null &&
  146.                             TipiDocumentoInterfaccia.WSDL.toString().equals(parteComune.getSpecificaInterfaccia().getInterfacciaLogicaLatoFruitore().getTipo().name())==false){
  147.                         motivoErroreValidazione.append("tipo SpecificaInterfacciaLogicaLatoFruitore diverso da "+TipiDocumentoInterfaccia.WSDL.toString()+"\n");
  148.                     }
  149.                 }
  150.             }
  151.             if(parteComune.getSpecificaConversazione()!=null){
  152.                 if(parteComune.getSpecificaConversazione().getConversazioneConcettuale()!=null){
  153.                     if(parteComune.getSpecificaConversazione().getConversazioneConcettuale().getBase()==null){
  154.                         motivoErroreValidazione.append("contenuto ConversazioneConcettuale non definito\n");
  155.                     }
  156.                     if(parteComune.getSpecificaConversazione().getConversazioneConcettuale().getTipo()!=null &&
  157.                             TipiDocumentoConversazione.BPEL.toString().equals(parteComune.getSpecificaConversazione().getConversazioneConcettuale().getTipo().name())==false &&
  158.                             TipiDocumentoConversazione.WSBL.toString().equals(parteComune.getSpecificaConversazione().getConversazioneConcettuale().getTipo().name())==false){
  159.                         motivoErroreValidazione.append("tipo ConversazioneConcettuale diverso da "+TipiDocumentoConversazione.BPEL.toString()+"/"+TipiDocumentoConversazione.WSBL.toString()+"\n");
  160.                     }
  161.                 }
  162.                 if(parteComune.getSpecificaConversazione().getConversazioneLogicaLatoErogatore()!=null){
  163.                     if(parteComune.getSpecificaConversazione().getConversazioneLogicaLatoErogatore().getBase()==null){
  164.                         motivoErroreValidazione.append("contenuto ConversazioneLogicaLatoErogatore non definito\n");
  165.                     }
  166.                     if(parteComune.getSpecificaConversazione().getConversazioneLogicaLatoErogatore().getTipo()!=null &&
  167.                             TipiDocumentoConversazione.BPEL.toString().equals(parteComune.getSpecificaConversazione().getConversazioneLogicaLatoErogatore().getTipo().name())==false &&
  168.                             TipiDocumentoConversazione.WSBL.toString().equals(parteComune.getSpecificaConversazione().getConversazioneLogicaLatoErogatore().getTipo().name())==false){
  169.                         motivoErroreValidazione.append("tipo ConversazioneLogicaLatoErogatore diverso da "+TipiDocumentoConversazione.BPEL.toString()+"/"+TipiDocumentoConversazione.WSBL.toString()+"\n");
  170.                     }
  171.                 }
  172.                 if(parteComune.getSpecificaConversazione().getConversazioneLogicaLatoFruitore()!=null){
  173.                     if(parteComune.getSpecificaConversazione().getConversazioneLogicaLatoFruitore().getBase()==null){
  174.                         motivoErroreValidazione.append("contenuto ConversazioneLogicaLatoFruitore non definito\n");
  175.                     }
  176.                     if(parteComune.getSpecificaConversazione().getConversazioneLogicaLatoFruitore().getTipo()!=null &&
  177.                             TipiDocumentoConversazione.BPEL.toString().equals(parteComune.getSpecificaConversazione().getConversazioneLogicaLatoFruitore().getTipo().name())==false &&
  178.                             TipiDocumentoConversazione.WSBL.toString().equals(parteComune.getSpecificaConversazione().getConversazioneLogicaLatoFruitore().getTipo().name())==false){
  179.                         motivoErroreValidazione.append("tipo ConversazioneLogicaLatoFruitore diverso da "+TipiDocumentoConversazione.BPEL.toString()+"/"+TipiDocumentoConversazione.WSBL.toString()+"\n");
  180.                     }
  181.                 }
  182.             }
  183.                
  184.         }else if(manifestoAS.getParteSpecifica()!=null){
  185.             AccordoServizioParteSpecifica parteSpecifica = manifestoAS.getParteSpecifica();
  186.             if(parteSpecifica.getAdesione()==null){
  187.                 motivoErroreValidazione.append("Adesione non definita\n");
  188.             }
  189.             if(includiInfoRegistroGenerale){
  190.                 if(parteSpecifica.getErogatore()==null){
  191.                     motivoErroreValidazione.append("Erogatore non definito\n");
  192.                 }
  193.             }
  194.             if(parteSpecifica.getRiferimentoParteComune()==null){
  195.                 motivoErroreValidazione.append("RiferimentoParteComune non definito\n");
  196.             }
  197.             if(parteSpecifica.getSpecificaPortiAccesso()!=null){
  198.                 if(parteSpecifica.getSpecificaPortiAccesso().getPortiAccessoErogatore()!=null){
  199.                     if(parteSpecifica.getSpecificaPortiAccesso().getPortiAccessoErogatore().getBase()==null){
  200.                         motivoErroreValidazione.append("contenuto PortiAccessoErogatore non definito\n");
  201.                     }
  202.                     if(parteSpecifica.getSpecificaPortiAccesso().getPortiAccessoErogatore().getTipo()!=null &&
  203.                             TipiDocumentoInterfaccia.WSDL.toString().equals(parteSpecifica.getSpecificaPortiAccesso().getPortiAccessoErogatore().getTipo().name())==false){
  204.                         motivoErroreValidazione.append("tipo PortiAccessoErogatore diverso da "+TipiDocumentoInterfaccia.WSDL.toString()+"\n");
  205.                     }
  206.                 }
  207.                 if(parteSpecifica.getSpecificaPortiAccesso().getPortiAccessoFruitore()!=null){
  208.                     if(parteSpecifica.getSpecificaPortiAccesso().getPortiAccessoFruitore().getBase()==null){
  209.                         motivoErroreValidazione.append("contenuto PortiAccessoFruitore non definito\n");
  210.                     }
  211.                     if(parteSpecifica.getSpecificaPortiAccesso().getPortiAccessoFruitore().getTipo()!=null &&
  212.                             TipiDocumentoInterfaccia.WSDL.toString().equals(parteSpecifica.getSpecificaPortiAccesso().getPortiAccessoFruitore().getTipo().name())==false){
  213.                         motivoErroreValidazione.append("tipo PortiAccessoFruitore diverso da "+TipiDocumentoInterfaccia.WSDL.toString()+"\n");
  214.                     }
  215.                 }
  216.             }
  217.             SpecificaSicurezza specificaSicurezza = parteSpecifica.getSpecificaSicurezza();
  218.             if(specificaSicurezza!=null){
  219.                 for(int i=0; i<specificaSicurezza.sizeDocumentoSicurezzaList(); i++){
  220.                     DocumentoSicurezza docS = specificaSicurezza.getDocumentoSicurezza(i);
  221.                     if(docS.getBase()==null){
  222.                         motivoErroreValidazione.append("SpecificaSicurezza["+i+"] senza la location del documento \n");
  223.                     }
  224.                     if(docS.getTipo()==null){
  225.                         motivoErroreValidazione.append("SpecificaSicurezza["+i+"] senza il tipo del documento \n");
  226.                     }else{
  227.                         if(TipiDocumentoSicurezza.LINGUAGGIO_NATURALE.toString().equals(docS.getTipo())==false &&
  228.                                 TipiDocumentoSicurezza.WSPOLICY.toString().equals(docS.getTipo())==false  ){
  229.                             motivoErroreValidazione.append("SpecificaSicurezza["+i+"] con tipo del documento specificaSicurezza["+docS.getTipo()+"] diverso dai tipi accettati:"+
  230.                                     TipiDocumentoSicurezza.LINGUAGGIO_NATURALE.toString()+","+TipiDocumentoSicurezza.WSPOLICY.toString()+"\n");
  231.                         }
  232.                     }
  233.                 }
  234.             }
  235.             SpecificaLivelliServizio specificaLivelliServizio = parteSpecifica.getSpecificaLivelliServizio();
  236.             if(specificaSicurezza!=null){
  237.                 for(int i=0; i<specificaLivelliServizio.sizeDocumentoLivelloServizioList(); i++){
  238.                     DocumentoLivelloServizio docL = specificaLivelliServizio.getDocumentoLivelloServizio(i);
  239.                     if(docL.getBase()==null){
  240.                         motivoErroreValidazione.append("SpecificaLivelliServizio["+i+"] senza la location del documento \n");
  241.                     }
  242.                     if(docL.getTipo()==null){
  243.                         motivoErroreValidazione.append("SpecificaLivelliServizio["+i+"] senza il tipo del documento \n");
  244.                     }else{
  245.                         if(TipiDocumentoLivelloServizio.WSAGREEMENT.toString().equals(docL.getTipo())==false &&
  246.                                 TipiDocumentoLivelloServizio.WSLA.toString().equals(docL.getTipo())==false  ){
  247.                             motivoErroreValidazione.append("SpecificaLivelliServizio["+i+"] con tipo del documento specificaLivelliServizio["+docL.getTipo()+"] diverso dai tipi accettati:"+
  248.                                     TipiDocumentoLivelloServizio.WSAGREEMENT.toString()+","+TipiDocumentoLivelloServizio.WSLA.toString()+"\n");
  249.                         }
  250.                     }
  251.                 }
  252.             }
  253.            
  254.         }else{
  255.             motivoErroreValidazione.append("Una parte comune o una parte specifica non definita\n");
  256.         }
  257.        
  258.         if(motivoErroreValidazione.length()!=size)
  259.             return false;
  260.         else
  261.             return true;
  262.        
  263.     }
  264.     public static boolean validateManifestoAC(AccordoCooperazione manifestoAC,StringBuilder motivoErroreValidazione, boolean includiInfoRegistroGenerale,boolean lunghezzaNomeAccordoLimitata){

  265.         int size = motivoErroreValidazione.length();
  266.        
  267.         // Vincoli ManifestoAccordo
  268.         if(manifestoAC.getDescrizione()==null){
  269.             motivoErroreValidazione.append("Descrizione non fornita\n");
  270.         }
  271.         if(manifestoAC.getNome()==null){
  272.             motivoErroreValidazione.append("Nome non fornito\n");
  273.         }else if(lunghezzaNomeAccordoLimitata && manifestoAC.getNome().length()>Costanti.LUNGHEZZA_MAX_NOME_ACCORDO){
  274.             motivoErroreValidazione.append("Nome fornito ["+manifestoAC.getNome()+"] supera il numero di caratteri consentiti: "+Costanti.LUNGHEZZA_MAX_NOME_ACCORDO+"\n");
  275.         }
  276.         if(manifestoAC.getDataCreazione()==null){
  277.             motivoErroreValidazione.append("DataCreazione non fornita\n");
  278.         }
  279.         if(manifestoAC.getAllegati()!=null){
  280.             for(int i=0; i<manifestoAC.getAllegati().sizeGenericoDocumentoList(); i++){
  281.                 if(manifestoAC.getAllegati().getGenericoDocumento(i)==null){
  282.                     motivoErroreValidazione.append("Allegato["+i+"] senza la definizione del documento\n");
  283.                 }
  284.             }
  285.         }
  286.         if(manifestoAC.getSpecificaSemiformale()!=null){
  287.             for(int i=0; i<manifestoAC.getSpecificaSemiformale().sizeDocumentoSemiformaleList(); i++){
  288.                 DocumentoSemiformale ss = manifestoAC.getSpecificaSemiformale().getDocumentoSemiformale(i);
  289.                 if(ss.getBase()==null){
  290.                     motivoErroreValidazione.append("SpecificaSemiformale["+i+"] senza la location del documento semiformale\n");
  291.                 }
  292.                 if(ss.getTipo()==null){
  293.                     motivoErroreValidazione.append("SpecificaSemiformale["+i+"] senza il tipo del documento semiformale\n");
  294.                 }else{
  295.                     if(TipiDocumentoSemiformale.HTML.toString().equals(ss.getTipo())==false &&
  296.                             TipiDocumentoSemiformale.UML.toString().equals(ss.getTipo())==false &&
  297.                             TipiDocumentoSemiformale.XML.toString().equals(ss.getTipo())==false &&
  298.                             TipiDocumentoSemiformale.LINGUAGGIO_NATURALE.toString().equals(ss.getTipo())==false ){
  299.                         motivoErroreValidazione.append("SpecificaSemiformale["+i+"] con tipo del documento semiformale["+ss.getTipo()+"] diverso dai tipi accettati:"+
  300.                                 TipiDocumentoSemiformale.HTML.toString()+","+
  301.                                 TipiDocumentoSemiformale.UML.toString()+","+
  302.                                 TipiDocumentoSemiformale.XML.toString()+","+
  303.                                 TipiDocumentoSemiformale.LINGUAGGIO_NATURALE.toString()+","+"\n");
  304.                     }
  305.                 }
  306.             }
  307.         }
  308.        
  309.         if(includiInfoRegistroGenerale){
  310.             if(manifestoAC.getCoordinatore()==null){
  311.                 motivoErroreValidazione.append("Coordinatore non definito\n");
  312.             }
  313.         }
  314.         if(manifestoAC.getElencoPartecipanti()==null){
  315.             motivoErroreValidazione.append("ElencoPartecipanti non definito\n");
  316.         }else{
  317.             if(manifestoAC.getElencoPartecipanti().sizePartecipanteList()<2){
  318.                 motivoErroreValidazione.append("ElencoPartecipanti <2\n");
  319.             }else{
  320.                 for(int i=0; i<manifestoAC.getElencoPartecipanti().sizePartecipanteList(); i++){
  321.                     if(manifestoAC.getElencoPartecipanti().getPartecipante(i)==null){
  322.                         motivoErroreValidazione.append("ElencoPartecipanti["+i+"] senza il partecipante \n");
  323.                     }
  324.                 }
  325.             }
  326.         }
  327.         if(includiInfoRegistroGenerale){
  328.             if(manifestoAC.getServiziComposti()!=null){
  329.                 for(int i=0; i<manifestoAC.getServiziComposti().sizeServizioCompostoList(); i++){
  330.                     java.net.URI servComposti = manifestoAC.getServiziComposti().getServizioComposto(i);
  331.                     if(servComposti==null){
  332.                         motivoErroreValidazione.append("ElencoServiziComposti["+i+"] senza il servizio composto \n");
  333.                     }
  334.                 }
  335.             }
  336.         }
  337.            
  338.         if(motivoErroreValidazione.length()!=size)
  339.             return false;
  340.         else
  341.             return true;
  342.        
  343.     }
  344.     public static boolean validateManifestoSC(ServizioComposto manifestoSC,StringBuilder motivoErroreValidazione, boolean includiInfoRegistroGenerale,boolean lunghezzaNomeAccordoLimitata){

  345.         int size = motivoErroreValidazione.length();
  346.        
  347.         // Vincoli ManifestoAccordo
  348.         if(manifestoSC.getDescrizione()==null){
  349.             motivoErroreValidazione.append("Descrizione non fornita\n");
  350.         }
  351.         if(manifestoSC.getNome()==null){
  352.             motivoErroreValidazione.append("Nome non fornito\n");
  353.         }else if(lunghezzaNomeAccordoLimitata && manifestoSC.getNome().length()>Costanti.LUNGHEZZA_MAX_NOME_ACCORDO){
  354.             motivoErroreValidazione.append("Nome fornito ["+manifestoSC.getNome()+"] supera il numero di caratteri consentiti: "+Costanti.LUNGHEZZA_MAX_NOME_ACCORDO+"\n");
  355.         }
  356.         if(manifestoSC.getDataCreazione()==null){
  357.             motivoErroreValidazione.append("DataCreazione non fornita\n");
  358.         }
  359.         if(manifestoSC.getAllegati()!=null){
  360.             for(int i=0; i<manifestoSC.getAllegati().sizeGenericoDocumentoList(); i++){
  361.                 if(manifestoSC.getAllegati().getGenericoDocumento(i)==null){
  362.                     motivoErroreValidazione.append("Allegato["+i+"] senza la definizione del documento\n");
  363.                 }
  364.             }
  365.         }
  366.         if(includiInfoRegistroGenerale){
  367.             if(manifestoSC.getPubblicatore()==null){
  368.                 motivoErroreValidazione.append("Pubblicatore non definito\n");
  369.             }
  370.         }
  371.         if(manifestoSC.getSpecificaSemiformale()!=null){
  372.             for(int i=0; i<manifestoSC.getSpecificaSemiformale().sizeDocumentoSemiformaleList(); i++){
  373.                 DocumentoSemiformale ss = manifestoSC.getSpecificaSemiformale().getDocumentoSemiformale(i);
  374.                 if(ss.getBase()==null){
  375.                     motivoErroreValidazione.append("SpecificaSemiformale["+i+"] senza la location del documento semiformale\n");
  376.                 }
  377.                 if(ss.getTipo()==null){
  378.                     motivoErroreValidazione.append("SpecificaSemiformale["+i+"] senza il tipo del documento semiformale\n");
  379.                 }else{
  380.                     if(TipiDocumentoSemiformale.HTML.toString().equals(ss.getTipo())==false &&
  381.                             TipiDocumentoSemiformale.UML.toString().equals(ss.getTipo())==false &&
  382.                             TipiDocumentoSemiformale.XML.toString().equals(ss.getTipo())==false &&
  383.                             TipiDocumentoSemiformale.LINGUAGGIO_NATURALE.toString().equals(ss.getTipo())==false ){
  384.                         motivoErroreValidazione.append("SpecificaSemiformale["+i+"] con tipo del documento semiformale["+ss.getTipo()+"] diverso dai tipi accettati:"+
  385.                                 TipiDocumentoSemiformale.HTML.toString()+","+
  386.                                 TipiDocumentoSemiformale.UML.toString()+","+
  387.                                 TipiDocumentoSemiformale.XML.toString()+","+
  388.                                 TipiDocumentoSemiformale.LINGUAGGIO_NATURALE.toString()+","+"\n");
  389.                     }
  390.                 }
  391.             }
  392.         }
  393.        
  394.         if(manifestoSC.getSpecificaInterfaccia()==null){
  395.             motivoErroreValidazione.append("SpecificaInterfaccia non definita\n");
  396.         }else{
  397.             if(manifestoSC.getSpecificaInterfaccia().getInterfacciaConcettuale()==null){
  398.                 motivoErroreValidazione.append("SpecificaInterfacciaConcettuale non definita\n");
  399.             }else{
  400.                 if(manifestoSC.getSpecificaInterfaccia().getInterfacciaConcettuale().getBase()==null){
  401.                     motivoErroreValidazione.append("contenuto SpecificaInterfacciaConcettuale non definito\n");
  402.                 }
  403.                 if(manifestoSC.getSpecificaInterfaccia().getInterfacciaConcettuale().getTipo()!=null &&
  404.                         TipiDocumentoInterfaccia.WSDL.toString().equals(manifestoSC.getSpecificaInterfaccia().getInterfacciaConcettuale().getTipo().name())==false){
  405.                     motivoErroreValidazione.append("tipo SpecificaInterfacciaConcettuale diverso da "+TipiDocumentoInterfaccia.WSDL.toString()+"\n");
  406.                 }
  407.             }
  408.             if(manifestoSC.getSpecificaInterfaccia().getInterfacciaLogicaLatoErogatore()==null){
  409.                 motivoErroreValidazione.append("SpecificaInterfacciaLogicaLatoErogatore non definita\n");
  410.             }else{
  411.                 if(manifestoSC.getSpecificaInterfaccia().getInterfacciaLogicaLatoErogatore().getBase()==null){
  412.                     motivoErroreValidazione.append("contenuto SpecificaInterfacciaLogicaLatoErogatore non definito\n");
  413.                 }
  414.                 if(manifestoSC.getSpecificaInterfaccia().getInterfacciaLogicaLatoErogatore().getTipo()!=null &&
  415.                         TipiDocumentoInterfaccia.WSDL.toString().equals(manifestoSC.getSpecificaInterfaccia().getInterfacciaLogicaLatoErogatore().getTipo().name())==false){
  416.                     motivoErroreValidazione.append("tipo SpecificaInterfacciaLogicaLatoErogatore diverso da "+TipiDocumentoInterfaccia.WSDL.toString()+"\n");
  417.                 }
  418.             }
  419.             if(manifestoSC.getSpecificaInterfaccia().getInterfacciaLogicaLatoFruitore()!=null){
  420.                 if(manifestoSC.getSpecificaInterfaccia().getInterfacciaLogicaLatoFruitore().getBase()==null){
  421.                     motivoErroreValidazione.append("contenuto SpecificaInterfacciaLogicaLatoFruitore non definito\n");
  422.                 }
  423.                 if(manifestoSC.getSpecificaInterfaccia().getInterfacciaLogicaLatoFruitore().getTipo()!=null &&
  424.                         TipiDocumentoInterfaccia.WSDL.toString().equals(manifestoSC.getSpecificaInterfaccia().getInterfacciaLogicaLatoFruitore().getTipo().name())==false){
  425.                     motivoErroreValidazione.append("tipo SpecificaInterfacciaLogicaLatoFruitore diverso da "+TipiDocumentoInterfaccia.WSDL.toString()+"\n");
  426.                 }
  427.             }
  428.         }
  429.         if(manifestoSC.getSpecificaConversazione()!=null){
  430.             if(manifestoSC.getSpecificaConversazione().getConversazioneConcettuale()!=null){
  431.                 if(manifestoSC.getSpecificaConversazione().getConversazioneConcettuale().getBase()==null){
  432.                     motivoErroreValidazione.append("contenuto ConversazioneConcettuale non definito\n");
  433.                 }
  434.                 if(manifestoSC.getSpecificaConversazione().getConversazioneConcettuale().getTipo()!=null &&
  435.                         TipiDocumentoConversazione.BPEL.toString().equals(manifestoSC.getSpecificaConversazione().getConversazioneConcettuale().getTipo().name())==false &&
  436.                         TipiDocumentoConversazione.WSBL.toString().equals(manifestoSC.getSpecificaConversazione().getConversazioneConcettuale().getTipo().name())==false){
  437.                     motivoErroreValidazione.append("tipo ConversazioneConcettuale diverso da "+TipiDocumentoConversazione.BPEL.toString()+"/"+TipiDocumentoConversazione.WSBL.toString()+"\n");
  438.                 }
  439.             }
  440.             if(manifestoSC.getSpecificaConversazione().getConversazioneLogicaLatoErogatore()!=null){
  441.                 if(manifestoSC.getSpecificaConversazione().getConversazioneLogicaLatoErogatore().getBase()==null){
  442.                     motivoErroreValidazione.append("contenuto ConversazioneLogicaLatoErogatore non definito\n");
  443.                 }
  444.                 if(manifestoSC.getSpecificaConversazione().getConversazioneLogicaLatoErogatore().getTipo()!=null &&
  445.                         TipiDocumentoConversazione.BPEL.toString().equals(manifestoSC.getSpecificaConversazione().getConversazioneLogicaLatoErogatore().getTipo().name())==false &&
  446.                         TipiDocumentoConversazione.WSBL.toString().equals(manifestoSC.getSpecificaConversazione().getConversazioneLogicaLatoErogatore().getTipo().name())==false){
  447.                     motivoErroreValidazione.append("tipo ConversazioneLogicaLatoErogatore diverso da "+TipiDocumentoConversazione.BPEL.toString()+"/"+TipiDocumentoConversazione.WSBL.toString()+"\n");
  448.                 }
  449.             }
  450.             if(manifestoSC.getSpecificaConversazione().getConversazioneLogicaLatoFruitore()!=null){
  451.                 if(manifestoSC.getSpecificaConversazione().getConversazioneLogicaLatoFruitore().getBase()==null){
  452.                     motivoErroreValidazione.append("contenuto ConversazioneLogicaLatoFruitore non definito\n");
  453.                 }
  454.                 if(manifestoSC.getSpecificaConversazione().getConversazioneLogicaLatoFruitore().getTipo()!=null &&
  455.                         TipiDocumentoConversazione.BPEL.toString().equals(manifestoSC.getSpecificaConversazione().getConversazioneLogicaLatoFruitore().getTipo().name())==false &&
  456.                         TipiDocumentoConversazione.WSBL.toString().equals(manifestoSC.getSpecificaConversazione().getConversazioneLogicaLatoFruitore().getTipo().name())==false){
  457.                     motivoErroreValidazione.append("tipo ConversazioneLogicaLatoFruitore diverso da "+TipiDocumentoConversazione.BPEL.toString()+"/"+TipiDocumentoConversazione.WSBL.toString()+"\n");
  458.                 }
  459.             }
  460.         }
  461.        
  462.         if(manifestoSC.getRiferimentoAccordoCooperazione()==null){
  463.             motivoErroreValidazione.append("RiferimentoAccordo non definito\n");
  464.         }
  465.        
  466.         if(manifestoSC.getServiziComponenti()==null){
  467.             motivoErroreValidazione.append("ElencoServiziComponenti non presente \n");
  468.         }else{
  469.             for(int i=0; i<manifestoSC.getServiziComponenti().sizeServizioComponenteList(); i++){
  470.                 java.net.URI servComponente = manifestoSC.getServiziComponenti().getServizioComponente(i);
  471.                 if(servComponente==null){
  472.                     motivoErroreValidazione.append("ElencoServiziComponenti["+i+"] senza il servizio componente \n");
  473.                 }
  474.             }
  475.         }
  476.        
  477.         SpecificaCoordinamento specificaCoordinamento = manifestoSC.getSpecificaCoordinamento();
  478.         if(specificaCoordinamento!=null){
  479.             for(int i=0; i<specificaCoordinamento.sizeDocumentoCoordinamentoList(); i++){
  480.                 DocumentoCoordinamento docC = specificaCoordinamento.getDocumentoCoordinamento(i);
  481.                 if(docC.getBase()==null){
  482.                     motivoErroreValidazione.append("SpecificaCoordinamento["+i+"] senza la location del documento \n");
  483.                 }
  484.                 if(docC.getTipo()==null){
  485.                     motivoErroreValidazione.append("SpecificaCoordinamento["+i+"] senza il tipo del documento \n");
  486.                 }else{
  487.                     if(TipiDocumentoCoordinamento.BPEL.toString().equals(docC.getTipo())==false &&
  488.                             TipiDocumentoCoordinamento.WSCDL.toString().equals(docC.getTipo())==false){
  489.                         motivoErroreValidazione.append("tipo SpecificaCoordinamento["+docC.getTipo()+"] diverso da "+TipiDocumentoCoordinamento.BPEL.toString()+"/"+TipiDocumentoCoordinamento.WSCDL.toString()+"\n");
  490.                     }
  491.                 }
  492.             }
  493.         }
  494.        
  495.         if(motivoErroreValidazione.length()!=size)
  496.             return false;
  497.         else
  498.             return true;
  499.        
  500.     }
  501.    
  502.    
  503.    
  504.    
  505.    
  506.    
  507.    
  508.     /* ----- Unmarshall Manifest dell'accordo di servizio ----- */
  509.    
  510.     /**
  511.      * Ritorna la rappresentazione java di un Manifest di un accordo di servizio
  512.      *
  513.      * @param m byte[]
  514.      * @return ManifestoAS
  515.      * @throws XMLUtilsException
  516.      */
  517.     public static AccordoServizio getManifestoAS(Logger log,byte[] m) throws XMLUtilsException{
  518.         ByteArrayInputStream bin = null;
  519.         try{
  520.             bin = new ByteArrayInputStream(m);
  521.             return XMLUtils.getManifestoAS(log,bin);
  522.         }catch(Exception e){
  523.             throw new XMLUtilsException(e.getMessage(),e);
  524.         }finally{
  525.             try{
  526.                 if(bin!=null)
  527.                     bin.close();
  528.             }catch(Exception eClose){
  529.                 // close
  530.             }
  531.         }
  532.     }
  533.    
  534.     /**
  535.      * Ritorna la rappresentazione java di un Manifest di un accordo di servizio
  536.      *
  537.      * @param m File
  538.      * @return ManifestoAS
  539.      * @throws XMLUtilsException
  540.      */
  541.     public static AccordoServizio getManifestoAS(Logger log,File m) throws XMLUtilsException{
  542.         FileInputStream fin = null;
  543.         try{
  544.             fin = new FileInputStream(m);
  545.             return XMLUtils.getManifestoAS(log,fin);
  546.         }catch(Exception e){
  547.             throw new XMLUtilsException(e.getMessage(),e);
  548.         }finally{
  549.             try{
  550.                 if(fin!=null)
  551.                     fin.close();
  552.             }catch(Exception eClose){
  553.                 // close
  554.             }
  555.         }
  556.     }
  557.    
  558.     /**
  559.      * Ritorna la rappresentazione java di un Manifest di un accordo di servizio
  560.      *
  561.      * @param m String
  562.      * @return ManifestoAS
  563.      * @throws XMLUtilsException
  564.      */
  565.     public static AccordoServizio getManifestoAS(Logger log,String m) throws XMLUtilsException{
  566.         return XMLUtils.getManifestoAS(log,m.getBytes());
  567.     }
  568.    
  569.     /**
  570.      * Ritorna la rappresentazione java di un Manifest di un accordo di servizio
  571.      *
  572.      * @param m InputStream
  573.      * @return ManifestoAS
  574.      * @throws XMLUtilsException
  575.      */
  576.     public static AccordoServizio getManifestoAS(Logger log,InputStream m) throws XMLUtilsException{
  577.         try{
  578.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  579.             byte[]reads = new byte[1024];
  580.             int letti = 0;
  581.             while( (letti=m.read(reads)) != -1){
  582.                 bout.write(reads, 0, letti);
  583.             }
  584.             bout.flush();
  585.             bout.close();
  586.             byte [] xml = bout.toByteArray();
  587.             ByteArrayInputStream binValidazione = new ByteArrayInputStream(xml);

  588.             ValidatoreXSD validatoreXSD = XMLUtils.getValidatoreXSD(log);
  589.             validatoreXSD.valida(binValidazione);
  590.            
  591.             ByteArrayInputStream binTrasformazione = new ByteArrayInputStream(xml);
  592.            
  593.             return (AccordoServizio) JaxbUtils.xmlToObj(binTrasformazione, AccordoServizio.class);
  594.         }catch(Exception e){
  595.             throw new XMLUtilsException(e.getMessage(),e);
  596.         }
  597.     }
  598.    
  599.    
  600.    
  601.    
  602.    
  603.    
  604.     /* ----- Marshall Manifest dell'accordo di servizio ----- */
  605.     public static void generateManifestoAS(AccordoServizio manifest,boolean includiInfoRegistroGenerale,boolean lunghezzaNomeAccordoLimitata,File out) throws XMLUtilsException{
  606.         try{
  607.             StringBuilder risultatoValidazione = new StringBuilder();
  608.             if(XMLUtils.validateManifestoAS(manifest, risultatoValidazione, includiInfoRegistroGenerale, lunghezzaNomeAccordoLimitata)==false){
  609.                 throw new Exception(risultatoValidazione.toString());
  610.             }
  611.            
  612.             JaxbUtils.objToXml(out.getName(), AccordoServizio.class, manifest);
  613.         }catch(Exception e){
  614.             throw new XMLUtilsException(e.getMessage(),e);
  615.         }
  616.     }
  617.    
  618.     public static void generateManifestoAS(AccordoServizio manifest,boolean includiInfoRegistroGenerale,boolean lunghezzaNomeAccordoLimitata,String fileName) throws XMLUtilsException{
  619.         try{
  620.             StringBuilder risultatoValidazione = new StringBuilder();
  621.             if(XMLUtils.validateManifestoAS(manifest, risultatoValidazione, includiInfoRegistroGenerale,lunghezzaNomeAccordoLimitata)==false){
  622.                 throw new Exception(risultatoValidazione.toString());
  623.             }
  624.            
  625.             JaxbUtils.objToXml(fileName, AccordoServizio.class, manifest);
  626.         }catch(Exception e){
  627.             throw new XMLUtilsException(e.getMessage(),e);
  628.         }
  629.     }
  630.    
  631.     public static byte[] generateManifestoAS(AccordoServizio manifest, boolean includiInfoRegistroGenerale,boolean lunghezzaNomeAccordoLimitata) throws XMLUtilsException{
  632.         try{
  633.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  634.             XMLUtils.generateManifestoAS(manifest,includiInfoRegistroGenerale,lunghezzaNomeAccordoLimitata,bout);
  635.             bout.flush();
  636.             bout.close();
  637.             return bout.toByteArray();
  638.         }catch(Exception e){
  639.             throw new XMLUtilsException(e.getMessage(),e);
  640.         }
  641.     }

  642.     public static void generateManifestoAS(AccordoServizio manifest,boolean includiInfoRegistroGenerale,boolean lunghezzaNomeAccordoLimitata,OutputStream out) throws XMLUtilsException{
  643.         try{
  644.             StringBuilder risultatoValidazione = new StringBuilder();
  645.             if(XMLUtils.validateManifestoAS(manifest, risultatoValidazione, includiInfoRegistroGenerale,lunghezzaNomeAccordoLimitata)==false){
  646.                 throw new Exception(risultatoValidazione.toString());
  647.             }
  648.            
  649.             JaxbUtils.objToXml(out, AccordoServizio.class, manifest);
  650.         }catch(Exception e){
  651.             throw new XMLUtilsException(e.getMessage(),e);
  652.         }
  653.     }
  654.    
  655.    
  656.    
  657.    
  658.    
  659.    
  660.    
  661.     /* ----- Unmarshall Manifest dell'accordo di cooperazione ----- */
  662.    
  663.     /**
  664.      * Ritorna la rappresentazione java di un Manifest di un accordo di servizio
  665.      *
  666.      * @param m byte[]
  667.      * @return ManifestAC
  668.      * @throws XMLUtilsException
  669.      */
  670.     public static AccordoCooperazione getManifestoAC(Logger log,byte[] m) throws XMLUtilsException{
  671.         ByteArrayInputStream bin = null;
  672.         try{
  673.             bin = new ByteArrayInputStream(m);
  674.             return XMLUtils.getManifestoAC(log,bin);
  675.         }catch(Exception e){
  676.             throw new XMLUtilsException(e.getMessage(),e);
  677.         }finally{
  678.             try{
  679.                 if(bin!=null)
  680.                     bin.close();
  681.             }catch(Exception eClose){
  682.                 // close
  683.             }
  684.         }
  685.     }
  686.    
  687.     /**
  688.      * Ritorna la rappresentazione java di un Manifest di un accordo di servizio
  689.      *
  690.      * @param m File
  691.      * @return ManifestAC
  692.      * @throws XMLUtilsException
  693.      */
  694.     public static AccordoCooperazione getManifestoAC(Logger log,File m) throws XMLUtilsException{
  695.         FileInputStream fin = null;
  696.         try{
  697.             fin = new FileInputStream(m);
  698.             return XMLUtils.getManifestoAC(log,fin);
  699.         }catch(Exception e){
  700.             throw new XMLUtilsException(e.getMessage(),e);
  701.         }finally{
  702.             try{
  703.                 if(fin!=null)
  704.                     fin.close();
  705.             }catch(Exception eClose){
  706.                 // close
  707.             }
  708.         }
  709.     }
  710.    
  711.     /**
  712.      * Ritorna la rappresentazione java di un Manifest di un accordo di servizio
  713.      *
  714.      * @param m String
  715.      * @return ManifestAC
  716.      * @throws XMLUtilsException
  717.      */
  718.     public static AccordoCooperazione getManifestoAC(Logger log,String m) throws XMLUtilsException{
  719.         return XMLUtils.getManifestoAC(log,m.getBytes());
  720.     }
  721.    
  722.     /**
  723.      * Ritorna la rappresentazione java di un Manifest di un accordo di servizio
  724.      *
  725.      * @param m InputStream
  726.      * @return ManifestAC
  727.      * @throws XMLUtilsException
  728.      */
  729.     public static AccordoCooperazione getManifestoAC(Logger log,InputStream m) throws XMLUtilsException{
  730.         try{
  731.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  732.             byte[]reads = new byte[1024];
  733.             int letti = 0;
  734.             while( (letti=m.read(reads)) != -1){
  735.                 bout.write(reads, 0, letti);
  736.             }
  737.             bout.flush();
  738.             bout.close();
  739.             byte [] xml = bout.toByteArray();
  740.             ByteArrayInputStream binValidazione = new ByteArrayInputStream(xml);
  741.            
  742.             ValidatoreXSD validatoreXSD = XMLUtils.getValidatoreXSD(log);
  743.             validatoreXSD.valida(binValidazione);
  744.            
  745.             ByteArrayInputStream binTrasformazione = new ByteArrayInputStream(xml);
  746.            
  747.             return (AccordoCooperazione) JaxbUtils.xmlToObj(binTrasformazione, AccordoCooperazione.class);
  748.         }catch(Exception e){
  749.             throw new XMLUtilsException(e.getMessage(),e);
  750.         }
  751.     }

  752.    
  753.    
  754.    
  755.    
  756.    
  757.    
  758.    
  759.     /* ----- Marshall Manifest dell'accordo di cooperazione ----- */
  760.     public static void generateManifestoAC(AccordoCooperazione manifest,boolean includiInfoRegistroGenerale,boolean lunghezzaNomeAccordoLimitata,File out) throws XMLUtilsException{
  761.         try{
  762.             StringBuilder risultatoValidazione = new StringBuilder();
  763.             if(XMLUtils.validateManifestoAC(manifest, risultatoValidazione, includiInfoRegistroGenerale, lunghezzaNomeAccordoLimitata)==false){
  764.                 throw new Exception(risultatoValidazione.toString());
  765.             }
  766.            
  767.             JaxbUtils.objToXml(out.getName(), AccordoCooperazione.class, manifest);
  768.         }catch(Exception e){
  769.             throw new XMLUtilsException(e.getMessage(),e);
  770.         }
  771.     }
  772.    
  773.     public static void generateManifestoAC(AccordoCooperazione manifest,boolean includiInfoRegistroGenerale,boolean lunghezzaNomeAccordoLimitata,String fileName) throws XMLUtilsException{
  774.         try{
  775.             StringBuilder risultatoValidazione = new StringBuilder();
  776.             if(XMLUtils.validateManifestoAC(manifest, risultatoValidazione, includiInfoRegistroGenerale, lunghezzaNomeAccordoLimitata)==false){
  777.                 throw new Exception(risultatoValidazione.toString());
  778.             }
  779.            
  780.             JaxbUtils.objToXml(fileName, AccordoCooperazione.class, manifest);
  781.         }catch(Exception e){
  782.             throw new XMLUtilsException(e.getMessage(),e);
  783.         }
  784.     }
  785.    
  786.     public static byte[] generateManifestoAC(AccordoCooperazione manifest,boolean includiInfoRegistroGenerale,boolean lunghezzaNomeAccordoLimitata) throws XMLUtilsException{
  787.         try{
  788.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  789.             XMLUtils.generateManifestoAC(manifest,includiInfoRegistroGenerale,lunghezzaNomeAccordoLimitata,bout);
  790.             bout.flush();
  791.             bout.close();
  792.             return bout.toByteArray();
  793.         }catch(Exception e){
  794.             throw new XMLUtilsException(e.getMessage(),e);
  795.         }
  796.     }

  797.     public static void generateManifestoAC(AccordoCooperazione manifest,boolean includiInfoRegistroGenerale,boolean lunghezzaNomeAccordoLimitata,OutputStream out) throws XMLUtilsException{
  798.         try{
  799.             StringBuilder risultatoValidazione = new StringBuilder();
  800.             if(XMLUtils.validateManifestoAC(manifest, risultatoValidazione, includiInfoRegistroGenerale, lunghezzaNomeAccordoLimitata)==false){
  801.                 throw new Exception(risultatoValidazione.toString());
  802.             }
  803.            
  804.             JaxbUtils.objToXml(out, AccordoCooperazione.class, manifest);
  805.         }catch(Exception e){
  806.             throw new XMLUtilsException(e.getMessage(),e);
  807.         }
  808.     }
  809.    
  810.    
  811.    
  812.    
  813.    
  814.    
  815.    
  816.    
  817.    
  818.     /* ----- Unmarshall Manifest del servizio composto ----- */
  819.    
  820.     /**
  821.      * Ritorna la rappresentazione java di un Manifest di un accordo di servizio
  822.      *
  823.      * @param m byte[]
  824.      * @return ManifestAC
  825.      * @throws XMLUtilsException
  826.      */
  827.     public static ServizioComposto getManifestoSC(Logger log,byte[] m) throws XMLUtilsException{
  828.         ByteArrayInputStream bin = null;
  829.         try{
  830.             bin = new ByteArrayInputStream(m);
  831.             return XMLUtils.getManifestoSC(log,bin);
  832.         }catch(Exception e){
  833.             throw new XMLUtilsException(e.getMessage(),e);
  834.         }finally{
  835.             try{
  836.                 if(bin!=null)
  837.                     bin.close();
  838.             }catch(Exception eClose){
  839.                 // close
  840.             }
  841.         }
  842.     }
  843.    
  844.     /**
  845.      * Ritorna la rappresentazione java di un Manifest di un accordo di servizio
  846.      *
  847.      * @param m File
  848.      * @return ManifestAC
  849.      * @throws XMLUtilsException
  850.      */
  851.     public static ServizioComposto getManifestoSC(Logger log,File m) throws XMLUtilsException{
  852.         FileInputStream fin = null;
  853.         try{
  854.             fin = new FileInputStream(m);
  855.             return XMLUtils.getManifestoSC(log,fin);
  856.         }catch(Exception e){
  857.             throw new XMLUtilsException(e.getMessage(),e);
  858.         }finally{
  859.             try{
  860.                 if(fin!=null)
  861.                     fin.close();
  862.             }catch(Exception eClose){
  863.                 // close
  864.             }
  865.         }
  866.     }
  867.    
  868.     /**
  869.      * Ritorna la rappresentazione java di un Manifest di un accordo di servizio
  870.      *
  871.      * @param m String
  872.      * @return ManifestAC
  873.      * @throws XMLUtilsException
  874.      */
  875.     public static ServizioComposto getManifestoSC(Logger log,String m) throws XMLUtilsException{
  876.         return XMLUtils.getManifestoSC(log,m.getBytes());
  877.     }
  878.    
  879.     /**
  880.      * Ritorna la rappresentazione java di un Manifest di un accordo di servizio
  881.      *
  882.      * @param m InputStream
  883.      * @return ManifestAC
  884.      * @throws XMLUtilsException
  885.      */
  886.     public static ServizioComposto getManifestoSC(Logger log,InputStream m) throws XMLUtilsException{
  887.         try{
  888.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  889.             byte[]reads = new byte[1024];
  890.             int letti = 0;
  891.             while( (letti=m.read(reads)) != -1){
  892.                 bout.write(reads, 0, letti);
  893.             }
  894.             bout.flush();
  895.             bout.close();
  896.             byte [] xml = bout.toByteArray();
  897.             ByteArrayInputStream binValidazione = new ByteArrayInputStream(xml);
  898.            
  899.             ValidatoreXSD validatoreXSD = XMLUtils.getValidatoreXSD(log);
  900.             validatoreXSD.valida(binValidazione);
  901.            
  902.             ByteArrayInputStream binTrasformazione = new ByteArrayInputStream(xml);
  903.            
  904.             return (ServizioComposto) JaxbUtils.xmlToObj(binTrasformazione, ServizioComposto.class);
  905.         }catch(Exception e){
  906.             throw new XMLUtilsException(e.getMessage(),e);
  907.         }
  908.     }
  909.    
  910.    
  911.    
  912.    
  913.    
  914.    
  915.     /* ----- Marshall Manifest dell'accordo di servizio ----- */
  916.     public static void generateManifestoSC(ServizioComposto manifest,boolean includiInfoRegistroGenerale,boolean lunghezzaNomeAccordoLimitata, File out) throws XMLUtilsException{
  917.         try{
  918.             StringBuilder risultatoValidazione = new StringBuilder();
  919.             if(XMLUtils.validateManifestoSC(manifest, risultatoValidazione, includiInfoRegistroGenerale, lunghezzaNomeAccordoLimitata)==false){
  920.                 throw new Exception(risultatoValidazione.toString());
  921.             }
  922.            
  923.             JaxbUtils.objToXml(out.getName(), ServizioComposto.class, manifest);
  924.         }catch(Exception e){
  925.             throw new XMLUtilsException(e.getMessage(),e);
  926.         }
  927.     }
  928.    
  929.     public static void generateManifestoSC(ServizioComposto manifest,boolean includiInfoRegistroGenerale,boolean lunghezzaNomeAccordoLimitata,String fileName) throws XMLUtilsException{
  930.         try{
  931.             StringBuilder risultatoValidazione = new StringBuilder();
  932.             if(XMLUtils.validateManifestoSC(manifest, risultatoValidazione, includiInfoRegistroGenerale, lunghezzaNomeAccordoLimitata)==false){
  933.                 throw new Exception(risultatoValidazione.toString());
  934.             }
  935.            
  936.             JaxbUtils.objToXml(fileName, ServizioComposto.class, manifest);
  937.         }catch(Exception e){
  938.             throw new XMLUtilsException(e.getMessage(),e);
  939.         }
  940.     }
  941.    
  942.     public static byte[] generateManifestoSC(ServizioComposto manifest,boolean includiInfoRegistroGenerale,boolean lunghezzaNomeAccordoLimitata) throws XMLUtilsException{
  943.         try{
  944.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  945.             XMLUtils.generateManifestoSC(manifest,includiInfoRegistroGenerale, lunghezzaNomeAccordoLimitata,bout);
  946.             bout.flush();
  947.             bout.close();
  948.             return bout.toByteArray();
  949.         }catch(Exception e){
  950.             throw new XMLUtilsException(e.getMessage(),e);
  951.         }
  952.     }

  953.     public static void generateManifestoSC(ServizioComposto manifest,boolean includiInfoRegistroGenerale,boolean lunghezzaNomeAccordoLimitata,OutputStream out) throws XMLUtilsException{
  954.         try{
  955.             StringBuilder risultatoValidazione = new StringBuilder();
  956.             if(XMLUtils.validateManifestoSC(manifest, risultatoValidazione, includiInfoRegistroGenerale, lunghezzaNomeAccordoLimitata)==false){
  957.                 throw new Exception(risultatoValidazione.toString());
  958.             }
  959.            
  960.             JaxbUtils.objToXml(out, ServizioComposto.class, manifest);
  961.         }catch(Exception e){
  962.             throw new XMLUtilsException(e.getMessage(),e);
  963.         }
  964.     }
  965.    
  966. }