DocumentoExporter.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.web.ctrlstat.servlet.archivi;

  21. import java.io.ByteArrayOutputStream;
  22. import java.io.File;
  23. import java.io.IOException;
  24. import java.io.OutputStream;
  25. import java.util.ArrayList;
  26. import java.util.Enumeration;
  27. import java.util.List;
  28. import java.util.zip.ZipEntry;
  29. import java.util.zip.ZipOutputStream;

  30. import javax.servlet.ServletException;
  31. import javax.servlet.http.HttpServlet;
  32. import javax.servlet.http.HttpServletRequest;
  33. import javax.servlet.http.HttpServletResponse;
  34. import javax.servlet.http.HttpSession;

  35. import org.apache.commons.lang.StringUtils;
  36. import org.openspcoop2.core.config.Credenziali;
  37. import org.openspcoop2.core.config.InvocazionePorta;
  38. import org.openspcoop2.core.config.PortaApplicativa;
  39. import org.openspcoop2.core.config.PortaDelegata;
  40. import org.openspcoop2.core.config.RegistroPluginArchivio;
  41. import org.openspcoop2.core.config.ServizioApplicativo;
  42. import org.openspcoop2.core.config.Soggetto;
  43. import org.openspcoop2.core.config.TrasformazioneRegola;
  44. import org.openspcoop2.core.config.TrasformazioneRegolaRichiesta;
  45. import org.openspcoop2.core.config.TrasformazioneRegolaRisposta;
  46. import org.openspcoop2.core.config.TrasformazioneSoap;
  47. import org.openspcoop2.core.config.TrasformazioneSoapRisposta;
  48. import org.openspcoop2.core.config.Trasformazioni;
  49. import org.openspcoop2.core.id.IDSoggetto;
  50. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  51. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  52. import org.openspcoop2.core.registry.CredenzialiSoggetto;
  53. import org.openspcoop2.core.registry.Documento;
  54. import org.openspcoop2.core.registry.Fruitore;
  55. import org.openspcoop2.core.registry.ProtocolProperty;
  56. import org.openspcoop2.core.registry.constants.CredenzialeTipo;
  57. import org.openspcoop2.core.registry.constants.ServiceBinding;
  58. import org.openspcoop2.core.registry.driver.AccordoServizioUtils;
  59. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  60. import org.openspcoop2.core.registry.wsdl.AccordoServizioWrapper;
  61. import org.openspcoop2.core.registry.wsdl.AccordoServizioWrapperUtilities;
  62. import org.openspcoop2.message.OpenSPCoop2MessageFactory;
  63. import org.openspcoop2.message.xml.MessageXMLUtils;
  64. import org.openspcoop2.pdd.core.jmx.JMXUtils;
  65. import org.openspcoop2.pdd.core.keystore.RemoteStoreKeyEntry;
  66. import org.openspcoop2.protocol.basic.Costanti;
  67. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  68. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  69. import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
  70. import org.openspcoop2.protocol.sdk.registry.RegistryNotFound;
  71. import org.openspcoop2.utils.json.YAMLUtils;
  72. import org.openspcoop2.utils.transport.http.HttpUtilities;
  73. import org.openspcoop2.utils.wsdl.WSDLUtilities;
  74. import org.openspcoop2.utils.xml.XMLException;
  75. import org.openspcoop2.utils.xml.XSDSchemaCollection;
  76. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  77. import org.openspcoop2.web.ctrlstat.driver.DriverControlStationException;
  78. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCore;
  79. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCore;
  80. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCore;
  81. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCostanti;
  82. import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriCostanti;
  83. import org.openspcoop2.web.ctrlstat.servlet.pa.PorteApplicativeCore;
  84. import org.openspcoop2.web.ctrlstat.servlet.pd.PorteDelegateCore;
  85. import org.openspcoop2.web.ctrlstat.servlet.protocol_properties.ProtocolPropertiesCore;
  86. import org.openspcoop2.web.ctrlstat.servlet.remote_stores.RemoteStoresCore;
  87. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCore;
  88. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
  89. import org.openspcoop2.web.lib.mvc.PageData;
  90. import org.openspcoop2.web.lib.mvc.ServletUtils;
  91. import org.slf4j.Logger;

  92. /**
  93.  * Questa servlet si occupa di esportare le tracce diagnostiche in formato xml
  94.  * zippandole
  95.  *
  96.  *
  97.  * @author Andrea Poli (apoli@link.it)
  98.  * @author Stefano Corallo (corallo@link.it)
  99.  * @author Sandra Giangrandi (sandra@link.it)
  100.  * @author $Author$
  101.  * @version $Rev$, $Date$
  102.  *
  103.  */
  104. public class DocumentoExporter extends HttpServlet {

  105.     private static final long serialVersionUID = -7341279067126334095L;

  106.     @Override
  107.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  108.         this.processRequest(req, resp);
  109.     }

  110.     @Override
  111.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  112.         this.processRequest(req, resp);
  113.     }

  114.     /**
  115.      * Processa la richiesta pervenuta e si occupa di fornire i dati richiesti
  116.      * in formato zip
  117.      *
  118.      * @param req
  119.      * @param resp
  120.      * @throws ServletException
  121.      * @throws IOException
  122.      */
  123.     private void processRequest(HttpServletRequest request, HttpServletResponse response) {

  124.         HttpSession session = request.getSession(true);

  125.         // Inizializzo PageData
  126.         PageData pd = new PageData();

  127.         ArchiviHelper archiviHelper = null;
  128.        
  129.         byte[] docBytes = null;
  130.         String fileName = null;
  131.        
  132.         try {
  133.             archiviHelper = new ArchiviHelper(request, pd, session);

  134.             ControlStationCore.logDebug("Ricevuta Richiesta di esportazione...");
  135.             Enumeration<?> en = archiviHelper.getParameterNames();
  136.             ControlStationCore.logDebug("Parametri (nome = valore):\n-----------------");
  137.             while (en.hasMoreElements()) {
  138.                 String param = (String) en.nextElement();
  139.                 String value = archiviHelper.getParameter(param);
  140.                 ControlStationCore.logDebug(param + " = " + value);
  141.             }
  142.             ControlStationCore.logDebug("-----------------");

  143.             String idAllegato = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_ID_ALLEGATO);
  144.             String idAccordo = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_ID_ACCORDO);
  145.             String tipoDocumento = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_TIPO_ACCORDO);
  146.             String tipoDocumentoDaScaricare = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO);
  147.             if(tipoDocumentoDaScaricare==null || "".equals(tipoDocumentoDaScaricare)){
  148.                 tipoDocumentoDaScaricare = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_DOCUMENTO;
  149.             }

  150.             String tipoSoggettoFruitore = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_IMPLEMENTATIVO_TIPO_SOGGETTO_FRUITORE);
  151.             String nomeSoggettoFruitore = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_IMPLEMENTATIVO_NOME_SOGGETTO_FRUITORE);

  152.             long idAccordoLong = getIdAccordoLong(idAccordo);

  153.             ArchiviCore archiviCore = new ArchiviCore();
  154.             ProtocolPropertiesCore ppCore = new ProtocolPropertiesCore(archiviCore);
  155.             PorteDelegateCore pdCore = new PorteDelegateCore(archiviCore);
  156.             PorteApplicativeCore paCore = new PorteApplicativeCore(archiviCore);

  157.             if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_DOCUMENTO.equals(tipoDocumentoDaScaricare) ){

  158.                 long idAllegatoInt = Long.parseLong(idAllegato);

  159.                 if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_PARTE_COMUNE.equals(tipoDocumento)
  160.                         ||
  161.                         ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_PARTE_SPECIFICA.equals(tipoDocumento)
  162.                         ||
  163.                         ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_COOPERAZIONE.equals(tipoDocumento)){
  164.                     Documento doc = archiviCore.getDocumento(idAllegatoInt,true);
  165.                     fileName = doc.getFile();
  166.                     docBytes = doc.getByteContenuto();
  167.                 }
  168.                 else{
  169.                     throw new ServletException("Tipo archivio ["+tipoDocumento+"] non gestito (tipo documento: "+tipoDocumentoDaScaricare+")");
  170.                 }

  171.             }
  172.             else {

  173.                 if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_PARTE_COMUNE.equals(tipoDocumento)){

  174.                     AccordiServizioParteComuneCore asCore = new AccordiServizioParteComuneCore(archiviCore);
  175.                     AccordoServizioParteComune as = asCore.getAccordoServizioFull(idAccordoLong);

  176.                     if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_DEFINITORIO.equals(tipoDocumentoDaScaricare) ){
  177.                         fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_INTERFACCIA_DEFINITORIA;
  178.                         docBytes = as.getByteWsdlDefinitorio();
  179.                     }
  180.                     else if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_CONCETTUALE.equals(tipoDocumentoDaScaricare) ){
  181.                         docBytes = as.getByteWsdlConcettuale();
  182.                         if(as.getFormatoSpecifica()!=null) {
  183.                             switch (as.getFormatoSpecifica()) {
  184.                             case WSDL_11:
  185.                                 fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_CONCETTUALE_WSDL;
  186.                                 break;
  187.                             case OPEN_API_3:
  188.                                 YAMLUtils yamlUtils = YAMLUtils.getInstance();
  189.                                 if(yamlUtils.isYaml(docBytes)) {
  190.                                     fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_OPENAPI_3_0_YAML;
  191.                                 }
  192.                                 else {  
  193.                                     fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_OPENAPI_3_0_JSON;
  194.                                 }
  195.                                 break;
  196.                             case SWAGGER_2:
  197.                                 yamlUtils = YAMLUtils.getInstance();
  198.                                 if(yamlUtils.isYaml(docBytes)) {
  199.                                     fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_SWAGGER_2_0_YAML;
  200.                                 }
  201.                                 else {
  202.                                     fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_SWAGGER_2_0_JSON;
  203.                                 }
  204.                                 break;
  205.                             case WADL:
  206.                                 fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WADL;
  207.                                 break;
  208.                             }
  209.                         }
  210.                         else {
  211.                             fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_CONCETTUALE_WSDL;
  212.                         }
  213.                     }
  214.                     else if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_LOGICO_EROGATORE.equals(tipoDocumentoDaScaricare) ){
  215.                         fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_LOGICO_EROGATORE_WSDL;
  216.                         docBytes = as.getByteWsdlLogicoErogatore();
  217.                     }
  218.                     else if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_LOGICO_FRUITORE.equals(tipoDocumentoDaScaricare) ){
  219.                         fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_LOGICO_FRUITORE_WSDL;
  220.                         docBytes = as.getByteWsdlLogicoFruitore();
  221.                     }
  222.                     else if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_SPECIFICA_CONVERSAZIONE_CONCETTUALE.equals(tipoDocumentoDaScaricare) ){
  223.                         fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_SPECIFICA_CONVERSIONE_CONCETTUALE;
  224.                         docBytes = as.getByteSpecificaConversazioneConcettuale();
  225.                     }
  226.                     else if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_SPECIFICA_CONVERSAZIONE_LOGICO_EROGATORE.equals(tipoDocumentoDaScaricare) ){
  227.                         fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_SPECIFICA_CONVERSIONE_LOGICA_EROGATORE;
  228.                         docBytes = as.getByteSpecificaConversazioneErogatore();
  229.                     }
  230.                     else if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_SPECIFICA_CONVERSAZIONE_LOGICO_FRUITORE.equals(tipoDocumentoDaScaricare) ){
  231.                         fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_SPECIFICA_CONVERSIONE_LOGICA_FRUITORE;
  232.                         docBytes = as.getByteSpecificaConversazioneFruitore();
  233.                     }
  234.                     else if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_XSD_SCHEMA_COLLECTION.equals(tipoDocumentoDaScaricare) ){

  235.                         AccordoServizioParteComune asConAllegati = asCore.getAccordoServizioFull(IDAccordoFactory.getInstance().getIDAccordoFromAccordo(as), true);
  236.                         try{
  237.                             // Nel caso di API REST devo eliminare la parte concettuale/logica poichè non è un wsdl/xsd
  238.                             if( ServiceBinding.REST.equals(asConAllegati.getServiceBinding()) ){
  239.                                 asConAllegati.setByteWsdlConcettuale(null);
  240.                                 asConAllegati.setByteWsdlLogicoErogatore(null);
  241.                                 asConAllegati.setByteWsdlLogicoFruitore(null);
  242.                             }
  243.                            
  244.                             AccordoServizioUtils asUtils = new AccordoServizioUtils(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), ControlStationCore.getLog());
  245.                             XSDSchemaCollection schemaCollection = asUtils.buildSchemaCollection(asConAllegati, true);
  246.                             fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_XSD_SCHEMA_COLLECTION;
  247.                             docBytes = this.serializeWsdl(ControlStationCore.getLog(), schemaCollection, asConAllegati);
  248.                         }
  249.                         catch(Exception e){
  250.                             ControlStationCore.getLog().error("XSDSchemaCollection build error: "+e.getMessage(),e);
  251.                             fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_XSD_SCHEMA_COLLECTION_ERROR;
  252.                             String msg = e.getMessage();
  253.                             if(msg==null || msg.equals("")){
  254.                                 if(e instanceof NullPointerException){
  255.                                     msg = "Internal Error (NP)";
  256.                                 }
  257.                                 else{
  258.                                     msg = e.toString();
  259.                                     if(msg==null || msg.equals("")){
  260.                                         msg = "Internal Error";
  261.                                     }
  262.                                 }
  263.                             }
  264.                             docBytes = msg.getBytes();
  265.                         }

  266.                     }
  267.                     else{
  268.                         throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non gestito per il tipo archivio ["+tipoDocumento+"]");
  269.                     }

  270.                 }
  271.                 else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_PARTE_SPECIFICA.equals(tipoDocumento)){

  272.                     AccordiServizioParteSpecificaCore asCore = new AccordiServizioParteSpecificaCore(archiviCore);
  273.                     AccordoServizioParteSpecifica as = asCore.getAccordoServizioParteSpecifica(idAccordoLong);

  274.                     if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_IMPLEMENTATIVO_EROGATORE.equals(tipoDocumentoDaScaricare) ){
  275.                         fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_IMPLEMENTATIVO_EROGATORE_WSDL;
  276.                         if(tipoSoggettoFruitore!=null && !"".equals(tipoSoggettoFruitore) &&
  277.                                 nomeSoggettoFruitore!=null && !"".equals(nomeSoggettoFruitore)){
  278.                             for (int i = 0; i < as.sizeFruitoreList(); i++) {
  279.                                 Fruitore f = as.getFruitore(i);
  280.                                 if(tipoSoggettoFruitore.equals(f.getTipo()) && nomeSoggettoFruitore.equals(f.getNome())){
  281.                                     docBytes = f.getByteWsdlImplementativoErogatore();
  282.                                     break;
  283.                                 }
  284.                             }
  285.                         }else{
  286.                             docBytes = as.getByteWsdlImplementativoErogatore();
  287.                         }
  288.                     }
  289.                     else if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_IMPLEMENTATIVO_FRUITORE.equals(tipoDocumentoDaScaricare) ){
  290.                         fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_IMPLEMENTATIVO_FRUITORE_WSDL;
  291.                         if(tipoSoggettoFruitore!=null && !"".equals(tipoSoggettoFruitore) &&
  292.                                 nomeSoggettoFruitore!=null && !"".equals(nomeSoggettoFruitore)){
  293.                             for (int i = 0; i < as.sizeFruitoreList(); i++) {
  294.                                 Fruitore f = as.getFruitore(i);
  295.                                 if(tipoSoggettoFruitore.equals(f.getTipo()) && nomeSoggettoFruitore.equals(f.getNome())){
  296.                                     docBytes = f.getByteWsdlImplementativoFruitore();
  297.                                     break;
  298.                                 }
  299.                             }
  300.                         }else{
  301.                             docBytes = as.getByteWsdlImplementativoFruitore();
  302.                         }
  303.                     }
  304.                     else{
  305.                         throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non gestito per il tipo archivio ["+tipoDocumento+"]");
  306.                     }

  307.                 }
  308.                 else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_PROTOCOL_PROPERTY.equals(tipoDocumento)){
  309.                     if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PROTOCOL_PROPERTY_BINARY.equals(tipoDocumentoDaScaricare)){
  310.                         long idAllegatoInt = Long.parseLong(idAllegato);
  311.                         ProtocolProperty bp = ppCore.getProtocolPropertyBinaria(idAllegatoInt);
  312.                         fileName = bp.getFile();
  313.                         docBytes = bp.getByteFile();
  314.                         docBytes = archiviCore.getDriverBYOKUtilities().unwrap(docBytes); // se cifrato, viene decifrato
  315.                     }else{
  316.                         throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non gestito per il tipo archivio ["+tipoDocumento+"]");
  317.                     }
  318.                 }
  319.                 else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_PORTA_APPLICATIVA.equals(tipoDocumento)){
  320.                     if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_XACML_POLICY.equals(tipoDocumentoDaScaricare)){
  321.                         Long idPorta = Long.parseLong(idAccordo);
  322.                         PortaApplicativa portaApplicativa = paCore.getPortaApplicativa(idPorta);
  323.                         fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_XACML_POLICY_FILENAME;
  324.                        
  325.                         String policy = portaApplicativa.getXacmlPolicy();

  326.                         if(StringUtils.isEmpty(policy)) {
  327.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  328.                         }

  329.                         docBytes = policy.getBytes();
  330.                     }else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_CONVERSIONE_TEMPLATE.equals(tipoDocumentoDaScaricare)){
  331.                         Long idPorta = Long.parseLong(idAccordo);
  332.                         PortaApplicativa portaApplicativa = paCore.getPortaApplicativa(idPorta);
  333.                         fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_CONVERSIONE_TEMPLATE_FILENAME;
  334.                        
  335.                         String idTrasformazioneRegola = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_ID);
  336.                         long idTrasformazione = Long.parseLong(idTrasformazioneRegola);
  337.                        
  338.                         Trasformazioni trasformazioni = portaApplicativa.getTrasformazioni();
  339.                         TrasformazioneRegola oldRegola = null;
  340.                         for (TrasformazioneRegola reg : trasformazioni.getRegolaList()) {
  341.                             if(reg.getId().longValue() == idTrasformazione) {
  342.                                 oldRegola = reg;
  343.                                 break;
  344.                             }
  345.                         }

  346.                         if(oldRegola == null) {
  347.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  348.                         }
  349.                        
  350.                         TrasformazioneRegolaRichiesta richiesta = oldRegola.getRichiesta();
  351.                    
  352.                         if(richiesta == null) {
  353.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  354.                         }
  355.                        
  356.                         if(richiesta.getConversioneTemplate() == null) {
  357.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  358.                         }
  359.                        
  360.                         org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione tipo = StringUtils.isNotEmpty(richiesta.getConversioneTipo()) ?
  361.                                 org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(richiesta.getConversioneTipo()) : org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;

  362.                         switch(tipo) {
  363.                         case FREEMARKER_TEMPLATE:
  364.                         case CONTEXT_FREEMARKER_TEMPLATE:
  365.                         case FREEMARKER_TEMPLATE_ZIP:
  366.                         case VELOCITY_TEMPLATE:
  367.                         case CONTEXT_VELOCITY_TEMPLATE:
  368.                         case VELOCITY_TEMPLATE_ZIP:
  369.                         case TEMPLATE:
  370.                         case XSLT:
  371.                         case ZIP:
  372.                         case TGZ:
  373.                         case TAR:
  374.                             fileName += tipo.getExt();
  375.                             break;
  376.                         case EMPTY:
  377.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] '"+tipo+"' non disponibile per il tipo archivio ["+tipoDocumento+"]: tipo non supportato");
  378.                         }
  379.                        
  380. /**                     if(fileName==null) {
  381. //                          throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] '"+tipo+"' non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  382. //                      }*/

  383.                         docBytes = richiesta.getConversioneTemplate();
  384.                     }else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_SOAP_ENVELOPE_TEMPLATE.equals(tipoDocumentoDaScaricare)){
  385.                         Long idPorta = Long.parseLong(idAccordo);
  386.                         PortaApplicativa portaApplicativa = paCore.getPortaApplicativa(idPorta);
  387.                         fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_SOAP_ENVELOPE_TEMPLATE_FILENAME;
  388.                        
  389.                         String idTrasformazioneRegola = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_ID);
  390.                         long idTrasformazione = Long.parseLong(idTrasformazioneRegola);
  391.                        
  392.                         Trasformazioni trasformazioni = portaApplicativa.getTrasformazioni();
  393.                         TrasformazioneRegola oldRegola = null;
  394.                         for (TrasformazioneRegola reg : trasformazioni.getRegolaList()) {
  395.                             if(reg.getId().longValue() == idTrasformazione) {
  396.                                 oldRegola = reg;
  397.                                 break;
  398.                             }
  399.                         }

  400.                         if(oldRegola == null) {
  401.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  402.                         }
  403.                        
  404.                         TrasformazioneRegolaRichiesta richiesta = oldRegola.getRichiesta();
  405.                    
  406.                         if(richiesta == null) {
  407.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  408.                         }
  409.                        
  410.                         if(richiesta.getTrasformazioneSoap() == null) {
  411.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  412.                         }

  413.                         TrasformazioneSoap trasformazioneSoap = richiesta.getTrasformazioneSoap();
  414.                        
  415.                         if( trasformazioneSoap.getEnvelopeBodyConversioneTemplate() == null) {
  416.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  417.                         }
  418.                        
  419.                         org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione tipo = StringUtils.isNotEmpty(trasformazioneSoap.getEnvelopeBodyConversioneTipo()) ?
  420.                                 org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(trasformazioneSoap.getEnvelopeBodyConversioneTipo()) : org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;

  421.                         switch(tipo) {
  422.                         case FREEMARKER_TEMPLATE:
  423.                         case CONTEXT_FREEMARKER_TEMPLATE:
  424.                         case FREEMARKER_TEMPLATE_ZIP:
  425.                         case VELOCITY_TEMPLATE:
  426.                         case CONTEXT_VELOCITY_TEMPLATE:
  427.                         case VELOCITY_TEMPLATE_ZIP:
  428.                         case TEMPLATE:
  429.                         case XSLT:
  430.                         case ZIP:
  431.                         case TGZ:
  432.                         case TAR:
  433.                             fileName += tipo.getExt();
  434.                             break;
  435.                         case EMPTY:
  436.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  437.                         }

  438.                         docBytes = trasformazioneSoap.getEnvelopeBodyConversioneTemplate();
  439.                     }else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_RISPOSTA_CONVERSIONE_TEMPLATE.equals(tipoDocumentoDaScaricare)){
  440.                         Long idPorta = Long.parseLong(idAccordo);
  441.                         PortaApplicativa portaApplicativa = paCore.getPortaApplicativa(idPorta);
  442.                         fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_RISPOSTA_CONVERSIONE_TEMPLATE_FILENAME;

  443.                         String idTrasformazioneRegola = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_ID);
  444.                         long idTrasformazione = Long.parseLong(idTrasformazioneRegola);
  445.                        
  446.                         String idTrasformazioneRegolaRes = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_RES_ID);
  447.                         long idTrasformazioneRisposta = Long.parseLong(idTrasformazioneRegolaRes);
  448.                        
  449.                         Trasformazioni trasformazioni = portaApplicativa.getTrasformazioni();
  450.                         TrasformazioneRegola oldRegola = null;
  451.                         for (TrasformazioneRegola reg : trasformazioni.getRegolaList()) {
  452.                             if(reg.getId().longValue() == idTrasformazione) {
  453.                                 oldRegola = reg;
  454.                                 break;
  455.                             }
  456.                         }

  457.                         if(oldRegola == null) {
  458.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  459.                         }
  460.                        
  461.                         TrasformazioneRegolaRisposta oldRisposta = null;
  462.                         for (int j = 0; j < oldRegola.sizeRispostaList(); j++) {
  463.                             TrasformazioneRegolaRisposta risposta = oldRegola.getRisposta(j);
  464.                             if (risposta.getId().longValue() == idTrasformazioneRisposta) {
  465.                                 oldRisposta = risposta;
  466.                                 break;
  467.                             }
  468.                         }
  469.                        
  470.                         if(oldRisposta == null) {
  471.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  472.                         }
  473.                        
  474.                         if(oldRisposta.getConversioneTemplate() == null) {
  475.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  476.                         }
  477.                        
  478.                         org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione tipo = StringUtils.isNotEmpty(oldRisposta.getConversioneTipo()) ?
  479.                                 org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(oldRisposta.getConversioneTipo()) : org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;

  480.                         switch(tipo) {
  481.                         case FREEMARKER_TEMPLATE:
  482.                         case CONTEXT_FREEMARKER_TEMPLATE:
  483.                         case FREEMARKER_TEMPLATE_ZIP:
  484.                         case VELOCITY_TEMPLATE:
  485.                         case CONTEXT_VELOCITY_TEMPLATE:
  486.                         case VELOCITY_TEMPLATE_ZIP:
  487.                         case TEMPLATE:
  488.                         case XSLT:
  489.                         case ZIP:
  490.                         case TGZ:
  491.                         case TAR:
  492.                             fileName += tipo.getExt();
  493.                             break;
  494.                         case EMPTY:
  495.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  496.                         }
  497.                                
  498.                         docBytes = oldRisposta.getConversioneTemplate();
  499.                     }else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_RISPOSTA_SOAP_ENVELOPE_TEMPLATE.equals(tipoDocumentoDaScaricare)){
  500.                         Long idPorta = Long.parseLong(idAccordo);
  501.                         PortaApplicativa portaApplicativa = paCore.getPortaApplicativa(idPorta);
  502.                         fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_RISPOSTA_SOAP_ENVELOPE_TEMPLATE_FILENAME;
  503.                        
  504.                         String idTrasformazioneRegola = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_ID);
  505.                         long idTrasformazione = Long.parseLong(idTrasformazioneRegola);
  506.                        
  507.                         String idTrasformazioneRegolaRes = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_RES_ID);
  508.                         long idTrasformazioneRisposta = Long.parseLong(idTrasformazioneRegolaRes);

  509.                         Trasformazioni trasformazioni = portaApplicativa.getTrasformazioni();
  510.                         TrasformazioneRegola oldRegola = null;
  511.                         for (TrasformazioneRegola reg : trasformazioni.getRegolaList()) {
  512.                             if(reg.getId().longValue() == idTrasformazione) {
  513.                                 oldRegola = reg;
  514.                                 break;
  515.                             }
  516.                         }

  517.                         if(oldRegola == null) {
  518.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  519.                         }
  520.                        
  521.                         TrasformazioneRegolaRisposta oldRisposta = null;
  522.                         for (int j = 0; j < oldRegola.sizeRispostaList(); j++) {
  523.                             TrasformazioneRegolaRisposta risposta = oldRegola.getRisposta(j);
  524.                             if (risposta.getId().longValue() == idTrasformazioneRisposta) {
  525.                                 oldRisposta = risposta;
  526.                                 break;
  527.                             }
  528.                         }
  529.                        
  530.                         if(oldRisposta == null) {
  531.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  532.                         }
  533.                        
  534.                         if(oldRisposta.getTrasformazioneSoap() == null) {
  535.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  536.                         }

  537.                         TrasformazioneSoapRisposta trasformazioneSoap = oldRisposta.getTrasformazioneSoap();
  538.                        
  539.                         if( trasformazioneSoap.getEnvelopeBodyConversioneTemplate() == null) {
  540.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  541.                         }
  542.                        
  543.                         org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione tipo = StringUtils.isNotEmpty(trasformazioneSoap.getEnvelopeBodyConversioneTipo()) ?
  544.                                 org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(trasformazioneSoap.getEnvelopeBodyConversioneTipo()) : org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;

  545.                         switch(tipo) {
  546.                         case FREEMARKER_TEMPLATE:
  547.                         case CONTEXT_FREEMARKER_TEMPLATE:
  548.                         case FREEMARKER_TEMPLATE_ZIP:
  549.                         case VELOCITY_TEMPLATE:
  550.                         case CONTEXT_VELOCITY_TEMPLATE:
  551.                         case VELOCITY_TEMPLATE_ZIP:
  552.                         case TEMPLATE:
  553.                         case XSLT:
  554.                         case ZIP:
  555.                         case TGZ:
  556.                         case TAR:
  557.                             fileName += tipo.getExt();
  558.                             break;
  559.                         case EMPTY:
  560.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  561.                         }

  562.                         docBytes = trasformazioneSoap.getEnvelopeBodyConversioneTemplate();
  563.                     }else {
  564.                         throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non gestito per il tipo archivio ["+tipoDocumento+"]");
  565.                     }
  566.                 }
  567.                 else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_PORTA_DELEGATA.equals(tipoDocumento)){
  568.                     if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_XACML_POLICY.equals(tipoDocumentoDaScaricare)){
  569.                         Long idPorta = Long.parseLong(idAccordo);
  570.                         PortaDelegata portaDelegata = pdCore.getPortaDelegata(idPorta);
  571.                         fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_XACML_POLICY_FILENAME;

  572.                         String policy = portaDelegata.getXacmlPolicy();

  573.                         if(StringUtils.isEmpty(policy)) {
  574.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  575.                         }

  576.                         docBytes = policy.getBytes();
  577.                     }else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_CONVERSIONE_TEMPLATE.equals(tipoDocumentoDaScaricare)){
  578.                         Long idPorta = Long.parseLong(idAccordo);
  579.                         PortaDelegata portaDelegata = pdCore.getPortaDelegata(idPorta);
  580.                         fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_CONVERSIONE_TEMPLATE_FILENAME;

  581.                         String idTrasformazioneRegola = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_ID);
  582.                         long idTrasformazione = Long.parseLong(idTrasformazioneRegola);
  583.                        
  584.                         Trasformazioni trasformazioni = portaDelegata.getTrasformazioni();
  585.                         TrasformazioneRegola oldRegola = null;
  586.                         for (TrasformazioneRegola reg : trasformazioni.getRegolaList()) {
  587.                             if(reg.getId().longValue() == idTrasformazione) {
  588.                                 oldRegola = reg;
  589.                                 break;
  590.                             }
  591.                         }

  592.                         if(oldRegola == null) {
  593.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  594.                         }
  595.                        
  596.                         TrasformazioneRegolaRichiesta richiesta = oldRegola.getRichiesta();
  597.                    
  598.                         if(richiesta == null) {
  599.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  600.                         }
  601.                        
  602.                         if(richiesta.getConversioneTemplate() == null) {
  603.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  604.                         }
  605.                        
  606.                         org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione tipo = StringUtils.isNotEmpty(richiesta.getConversioneTipo()) ?
  607.                                 org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(richiesta.getConversioneTipo()) : org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;

  608.                         switch(tipo) {
  609.                         case FREEMARKER_TEMPLATE:
  610.                         case CONTEXT_FREEMARKER_TEMPLATE:
  611.                         case FREEMARKER_TEMPLATE_ZIP:
  612.                         case VELOCITY_TEMPLATE:
  613.                         case CONTEXT_VELOCITY_TEMPLATE:
  614.                         case VELOCITY_TEMPLATE_ZIP:
  615.                         case TEMPLATE:
  616.                         case XSLT:
  617.                         case ZIP:
  618.                         case TGZ:
  619.                         case TAR:
  620.                             fileName += tipo.getExt();
  621.                             break;
  622.                         case EMPTY:
  623.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  624.                         }
  625.                                
  626.                         docBytes = richiesta.getConversioneTemplate();
  627.                     }else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_SOAP_ENVELOPE_TEMPLATE.equals(tipoDocumentoDaScaricare)){
  628.                         Long idPorta = Long.parseLong(idAccordo);
  629.                         PortaDelegata portaDelegata = pdCore.getPortaDelegata(idPorta);
  630.                         fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_SOAP_ENVELOPE_TEMPLATE_FILENAME;
  631.                        
  632.                         String idTrasformazioneRegola = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_ID);
  633.                         long idTrasformazione = Long.parseLong(idTrasformazioneRegola);

  634.                         Trasformazioni trasformazioni = portaDelegata.getTrasformazioni();
  635.                         TrasformazioneRegola oldRegola = null;
  636.                         for (TrasformazioneRegola reg : trasformazioni.getRegolaList()) {
  637.                             if(reg.getId().longValue() == idTrasformazione) {
  638.                                 oldRegola = reg;
  639.                                 break;
  640.                             }
  641.                         }

  642.                         if(oldRegola == null) {
  643.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  644.                         }
  645.                        
  646.                         TrasformazioneRegolaRichiesta richiesta = oldRegola.getRichiesta();
  647.                    
  648.                         if(richiesta == null) {
  649.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  650.                         }
  651.                        
  652.                         if(richiesta.getTrasformazioneSoap() == null) {
  653.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  654.                         }

  655.                         TrasformazioneSoap trasformazioneSoap = richiesta.getTrasformazioneSoap();
  656.                        
  657.                         if( trasformazioneSoap.getEnvelopeBodyConversioneTemplate() == null) {
  658.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  659.                         }
  660.                        
  661.                         org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione tipo = StringUtils.isNotEmpty(trasformazioneSoap.getEnvelopeBodyConversioneTipo()) ?
  662.                                 org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(trasformazioneSoap.getEnvelopeBodyConversioneTipo()) : org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;

  663.                         switch(tipo) {
  664.                         case FREEMARKER_TEMPLATE:
  665.                         case CONTEXT_FREEMARKER_TEMPLATE:
  666.                         case FREEMARKER_TEMPLATE_ZIP:
  667.                         case VELOCITY_TEMPLATE:
  668.                         case CONTEXT_VELOCITY_TEMPLATE:
  669.                         case VELOCITY_TEMPLATE_ZIP:
  670.                         case TEMPLATE:
  671.                         case XSLT:
  672.                         case ZIP:
  673.                         case TGZ:
  674.                         case TAR:
  675.                             fileName += tipo.getExt();
  676.                             break;
  677.                         case EMPTY:
  678.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  679.                         }

  680.                         docBytes = trasformazioneSoap.getEnvelopeBodyConversioneTemplate();
  681.                     }else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_RISPOSTA_CONVERSIONE_TEMPLATE.equals(tipoDocumentoDaScaricare)){
  682.                         Long idPorta = Long.parseLong(idAccordo);
  683.                         PortaDelegata portaDelegata = pdCore.getPortaDelegata(idPorta);
  684.                         fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_RISPOSTA_CONVERSIONE_TEMPLATE_FILENAME;

  685.                         String idTrasformazioneRegola = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_ID);
  686.                         long idTrasformazione = Long.parseLong(idTrasformazioneRegola);
  687.                        
  688.                         String idTrasformazioneRegolaRes = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_RES_ID);
  689.                         long idTrasformazioneRisposta = Long.parseLong(idTrasformazioneRegolaRes);
  690.                        
  691.                         Trasformazioni trasformazioni = portaDelegata.getTrasformazioni();
  692.                         TrasformazioneRegola oldRegola = null;
  693.                         for (TrasformazioneRegola reg : trasformazioni.getRegolaList()) {
  694.                             if(reg.getId().longValue() == idTrasformazione) {
  695.                                 oldRegola = reg;
  696.                                 break;
  697.                             }
  698.                         }

  699.                         if(oldRegola == null) {
  700.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  701.                         }
  702.                        
  703.                         TrasformazioneRegolaRisposta oldRisposta = null;
  704.                         for (int j = 0; j < oldRegola.sizeRispostaList(); j++) {
  705.                             TrasformazioneRegolaRisposta risposta = oldRegola.getRisposta(j);
  706.                             if (risposta.getId().longValue() == idTrasformazioneRisposta) {
  707.                                 oldRisposta = risposta;
  708.                                 break;
  709.                             }
  710.                         }
  711.                        
  712.                         if(oldRisposta == null) {
  713.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  714.                         }
  715.                        
  716.                         if(oldRisposta.getConversioneTemplate() == null) {
  717.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  718.                         }
  719.                        
  720.                         org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione tipo = StringUtils.isNotEmpty(oldRisposta.getConversioneTipo()) ?
  721.                                 org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(oldRisposta.getConversioneTipo()) : org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;

  722.                         switch(tipo) {
  723.                         case FREEMARKER_TEMPLATE:
  724.                         case CONTEXT_FREEMARKER_TEMPLATE:
  725.                         case FREEMARKER_TEMPLATE_ZIP:
  726.                         case VELOCITY_TEMPLATE:
  727.                         case CONTEXT_VELOCITY_TEMPLATE:
  728.                         case VELOCITY_TEMPLATE_ZIP:
  729.                         case TEMPLATE:
  730.                         case XSLT:
  731.                         case ZIP:
  732.                         case TGZ:
  733.                         case TAR:
  734.                             fileName += tipo.getExt();
  735.                             break;
  736.                         case EMPTY:
  737.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  738.                         }
  739.                                
  740.                         docBytes = oldRisposta.getConversioneTemplate();
  741.                     }else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_RISPOSTA_SOAP_ENVELOPE_TEMPLATE.equals(tipoDocumentoDaScaricare)){
  742.                         Long idPorta = Long.parseLong(idAccordo);
  743.                         PortaDelegata portaDelegata = pdCore.getPortaDelegata(idPorta);
  744.                         fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_RISPOSTA_SOAP_ENVELOPE_TEMPLATE_FILENAME;
  745.                        
  746.                         String idTrasformazioneRegola = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_ID);
  747.                         long idTrasformazione = Long.parseLong(idTrasformazioneRegola);
  748.                        
  749.                         String idTrasformazioneRegolaRes = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_RES_ID);
  750.                         long idTrasformazioneRisposta = Long.parseLong(idTrasformazioneRegolaRes);

  751.                         Trasformazioni trasformazioni = portaDelegata.getTrasformazioni();
  752.                         TrasformazioneRegola oldRegola = null;
  753.                         for (TrasformazioneRegola reg : trasformazioni.getRegolaList()) {
  754.                             if(reg.getId().longValue() == idTrasformazione) {
  755.                                 oldRegola = reg;
  756.                                 break;
  757.                             }
  758.                         }

  759.                         if(oldRegola == null) {
  760.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  761.                         }
  762.                        
  763.                         TrasformazioneRegolaRisposta oldRisposta = null;
  764.                         for (int j = 0; j < oldRegola.sizeRispostaList(); j++) {
  765.                             TrasformazioneRegolaRisposta risposta = oldRegola.getRisposta(j);
  766.                             if (risposta.getId().longValue() == idTrasformazioneRisposta) {
  767.                                 oldRisposta = risposta;
  768.                                 break;
  769.                             }
  770.                         }
  771.                        
  772.                         if(oldRisposta == null) {
  773.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  774.                         }
  775.                        
  776.                         if(oldRisposta.getTrasformazioneSoap() == null) {
  777.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  778.                         }

  779.                         TrasformazioneSoapRisposta trasformazioneSoap = oldRisposta.getTrasformazioneSoap();
  780.                        
  781.                         if( trasformazioneSoap.getEnvelopeBodyConversioneTemplate() == null) {
  782.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  783.                         }
  784.                        
  785.                         org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione tipo = StringUtils.isNotEmpty(trasformazioneSoap.getEnvelopeBodyConversioneTipo()) ?
  786.                                 org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(trasformazioneSoap.getEnvelopeBodyConversioneTipo()) : org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;

  787.                         switch(tipo) {
  788.                         case FREEMARKER_TEMPLATE:
  789.                         case CONTEXT_FREEMARKER_TEMPLATE:
  790.                         case FREEMARKER_TEMPLATE_ZIP:
  791.                         case VELOCITY_TEMPLATE:
  792.                         case CONTEXT_VELOCITY_TEMPLATE:
  793.                         case VELOCITY_TEMPLATE_ZIP:
  794.                         case TEMPLATE:
  795.                         case XSLT:
  796.                         case ZIP:
  797.                         case TGZ:
  798.                         case TAR:
  799.                             fileName += tipo.getExt();
  800.                             break;
  801.                         case EMPTY:
  802.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
  803.                         }

  804.                         docBytes = trasformazioneSoap.getEnvelopeBodyConversioneTemplate();
  805.                     }else {
  806.                         throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non gestito per il tipo archivio ["+tipoDocumento+"]");
  807.                     }
  808.                 }else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_SOGGETTO.equals(tipoDocumento)){
  809.                     if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_CERTIFICATO_SSL.equals(tipoDocumentoDaScaricare)){
  810.                         Long idSogg = Long.parseLong(idAccordo);
  811.                         SoggettiCore soggettiCore = new SoggettiCore(archiviCore);

  812.                         String oldnomeprov = null;
  813.                         String oldtipoprov = null;
  814.                         if(soggettiCore.isRegistroServiziLocale()){
  815.                             org.openspcoop2.core.registry.Soggetto soggettoRegistry = soggettiCore.getSoggettoRegistro(idSogg);
  816.                             oldnomeprov = soggettoRegistry.getNome();
  817.                             oldtipoprov = soggettoRegistry.getTipo();
  818.                         }
  819.                         else{
  820.                             Soggetto soggettoConfig = soggettiCore.getSoggetto(idSogg);
  821.                             oldnomeprov = soggettoConfig.getNome();
  822.                             oldtipoprov = soggettoConfig.getTipo();
  823.                         }

  824.                         IDSoggetto idSoggetto = new IDSoggetto(oldtipoprov,oldnomeprov);
  825.                         String protocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(oldtipoprov);
  826.                         IProtocolFactory<?> protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(protocollo);
  827.                         IRegistryReader registryReader = soggettiCore.getRegistryReader(protocolFactory);

  828.                         int posizioneCredenziale = 0;
  829.                         String pos = archiviHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CREDENZIALI_ID);
  830.                         if(StringUtils.isNotEmpty(pos)) {
  831.                             posizioneCredenziale = Integer.valueOf(pos);
  832.                         }
  833.                        
  834.                         CredenzialiSoggetto credenziali = null;
  835.                         org.openspcoop2.core.registry.Soggetto soggetto = null;
  836.                         try{
  837.                             soggetto =  registryReader.getSoggetto(idSoggetto);
  838.                             if(soggetto.sizeCredenzialiList()>0) {
  839.                                 credenziali = soggetto.getCredenziali(posizioneCredenziale);
  840.                             }
  841.                         }catch(RegistryNotFound r){
  842.                             // rilancio
  843.                             throw r;
  844.                         }
  845.                        
  846.                         fileName = soggetto.getNome() + ".crt";
  847.                        
  848.                         if(credenziali != null && credenziali.getTipo() != null && credenziali.getTipo().equals(CredenzialeTipo.SSL)) {
  849.                             if(credenziali.getCertificate() != null && credenziali.getCertificate().length > 0) {
  850.                                 docBytes = credenziali.getCertificate();
  851.                             } else {
  852.                                 throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non definito per il tipo archivio ["+tipoDocumento+"]");
  853.                             }
  854.                         } else
  855.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non definito per il tipo archivio ["+tipoDocumento+"]");
  856.                     }else{
  857.                         throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non gestito per il tipo archivio ["+tipoDocumento+"]");
  858.                     }
  859.                 }else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_SERVIZIO_APPLICATIVO.equals(tipoDocumento)){
  860.                     if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_CERTIFICATO_SSL.equals(tipoDocumentoDaScaricare)){
  861.                         Long idSA = Long.parseLong(idAccordo);
  862.                         ServiziApplicativiCore saCore = new ServiziApplicativiCore(archiviCore);
  863.                         ServizioApplicativo sa = saCore.getServizioApplicativo(idSA);
  864.                        
  865.                         fileName = sa.getNome() + ".crt";
  866.                        
  867.                         int posizioneCredenziale = 0;
  868.                         String pos = archiviHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CREDENZIALI_ID);
  869.                         if(StringUtils.isNotEmpty(pos)) {
  870.                             posizioneCredenziale = Integer.valueOf(pos);
  871.                         }
  872.                        
  873.                         InvocazionePorta ip = sa.getInvocazionePorta();
  874.                         Credenziali credenziali = null;
  875.                         if (ip != null &&
  876.                             ip.sizeCredenzialiList()>0) {
  877.                             credenziali = ip.getCredenziali(posizioneCredenziale);
  878.                         }
  879.                        
  880.                         if(credenziali != null && credenziali.getTipo() != null && credenziali.getTipo().equals(org.openspcoop2.core.config.constants.CredenzialeTipo.SSL)) {
  881.                             if(credenziali.getCertificate() != null && credenziali.getCertificate().length > 0) {
  882.                                 docBytes = credenziali.getCertificate();
  883.                             } else {
  884.                                 throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non definito per il tipo archivio ["+tipoDocumento+"]");
  885.                             }
  886.                         } else
  887.                             throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non definito per il tipo archivio ["+tipoDocumento+"]");
  888.                     }else{
  889.                         throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non gestito per il tipo archivio ["+tipoDocumento+"]");
  890.                     }
  891.                 }
  892.                 else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_CONNETTORE_CERTIFICATO_SERVER.equals(tipoDocumento)){
  893.                    
  894.                     String aliasForVerificaConnettore = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_CERTIFICATI_SERVER_ALIAS_CONNETTORE);
  895.                    
  896.                     String tipoConnettoreRegistro = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_CERTIFICATI_SERVER_TIPO_CONNETTORE_REGISTRO);
  897.                     boolean connettoreRegistro = ServletUtils.isCheckBoxEnabled(tipoConnettoreRegistro);
  898.                     String labelConnettore = connettoreRegistro ? "connettore del registro" : "connettore della configurazione";
  899.                    
  900.                     String idConnettore = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_CERTIFICATI_SERVER_ID_CONNETTORE);
  901.                    
  902.                     String tokenTipologia = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_CERTIFICATI_SERVER_TOKEN_TIPOLOGIA);
  903.                     String tokenNome= archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_CERTIFICATI_SERVER_TOKEN_NOME);
  904.                     String tokenConnettoreTipo = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_CERTIFICATI_SERVER_TOKEN_TIPO);
  905.                    
  906.                     String nameConnettore = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_CERTIFICATI_SERVER_NOME_CONNETTORE);
  907.                    
  908.                     fileName = nameConnettore + ".pem";
  909.                    
  910.                     String risorsa = null;
  911.                     if(connettoreRegistro) {
  912.                         risorsa = archiviCore.getJmxPdDConfigurazioneSistemaNomeRisorsaAccessoRegistroServizi(aliasForVerificaConnettore);
  913.                     }
  914.                     else {
  915.                         risorsa = archiviCore.getJmxPdDConfigurazioneSistemaNomeRisorsaConfigurazionePdD(aliasForVerificaConnettore);
  916.                     }
  917.                    
  918.                     String metodo = null;
  919.                     List<Object> parameters = new ArrayList<>();
  920.                     if(idConnettore!=null) {
  921.                         metodo = archiviCore.getJmxPdDConfigurazioneSistemaNomeMetodoGetCertificatiConnettoreById(aliasForVerificaConnettore);
  922.                         parameters.add(idConnettore+"");
  923.                     }
  924.                     else if(tokenTipologia!=null) {
  925.                         if(ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_TIPOLOGIA_GESTIONE_POLICY_TOKEN.equals(tokenTipologia)) {
  926.                             metodo = archiviCore.getJmxPdDConfigurazioneSistemaNomeMetodoGetCertificatiConnettoreTokenPolicyValidazione(aliasForVerificaConnettore);
  927.                             parameters.add(tokenNome);
  928.                             if(tokenConnettoreTipo!=null && StringUtils.isNotEmpty(tokenConnettoreTipo)) {
  929.                                 parameters.add(tokenConnettoreTipo);
  930.                             }
  931.                         }
  932.                         else if(ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_TIPOLOGIA_RETRIEVE_POLICY_TOKEN.equals(tokenTipologia)) {
  933.                             metodo = archiviCore.getJmxPdDConfigurazioneSistemaNomeMetodoGetCertificatiConnettoreTokenPolicyNegoziazione(aliasForVerificaConnettore);
  934.                             parameters.add(tokenNome);
  935.                         }
  936.                         else if(ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_TIPOLOGIA_ATTRIBUTE_AUTHORITY.equals(tokenTipologia)) {
  937.                             metodo = archiviCore.getJmxPdDConfigurazioneSistemaNomeMetodoGetCertificatiConnettoreAttributeAuthority(aliasForVerificaConnettore);
  938.                             parameters.add(tokenNome);
  939.                         }
  940.                         else {
  941.                             throw new DriverControlStationException("Tipologia '"+tokenTipologia+"' da utilizzare per l'export dei certificati server non supportata");
  942.                         }
  943.                     }
  944.                     else {
  945.                         throw new DriverControlStationException("Nessuna risorsa definita da cui effettuare l'export dei certificati server");
  946.                     }
  947.                    
  948.                     try{
  949.                         String stato = archiviCore.getInvoker().invokeJMXMethod(aliasForVerificaConnettore, archiviCore.getJmxPdDConfigurazioneSistemaType(aliasForVerificaConnettore),
  950.                                 risorsa,
  951.                                 metodo,
  952.                                 parameters.toArray());
  953.                         if(stato==null) {
  954.                             throw new ServletException("Recupero certificati server fallito");
  955.                         }
  956.                         if(stato==null || stato.startsWith(JMXUtils.MSG_OPERAZIONE_NON_EFFETTUATA)) {
  957.                             throw new ServletException(stato);
  958.                         }
  959.                         else {
  960.                             docBytes = stato.getBytes();
  961.                         }
  962.                     }catch(Exception e){
  963.                         String msgErrore = "Errore durante il recupero dei certificati server del "+labelConnettore+" con parametri '"+parameters+"' (jmxResource '"+risorsa+"') (node:"+aliasForVerificaConnettore+"): "+e.getMessage();
  964.                         ControlStationCore.logError(msgErrore, e);
  965.                         /**throw new ServletException(msgErrore);*/
  966.                         // se lancio una eccezione ho il crash dell'interfaccia. Ritorno anzi un file errato.
  967.                         fileName+=".error";
  968.                         docBytes = msgErrore.getBytes();
  969.                     }
  970.                 }
  971.                 else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ARCHIVIO_JAR.equals(tipoDocumento)){
  972.                    
  973.                     String nomePlugin = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_JAR_NOME_PLUGIN);
  974.                     String nomeJar = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_JAR_NOME_ARCHVIO);
  975.                    
  976.                     fileName = nomeJar;
  977.                    
  978.                     ConfigurazioneCore confCore = new ConfigurazioneCore(archiviCore);
  979.                     try{
  980.                         RegistroPluginArchivio jar = confCore.getRegistroPluginArchivio(nomePlugin, nomeJar);
  981.                         docBytes = jar.getContenuto();
  982.                     }catch(Exception e){
  983.                         String msgErrore = "Errore durante il recupero dell'archivio jar '"+nomeJar+"' del plugin "+nomePlugin+": "+e.getMessage();
  984.                         ControlStationCore.logError(msgErrore, e);
  985.                         /**throw new ServletException(msgErrore);*/
  986.                         // se lancio una eccezione ho il crash dell'interfaccia. Ritorno anzi un file errato.
  987.                         fileName+=".error";
  988.                         docBytes = msgErrore.getBytes();
  989.                     }
  990.                 }else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_REMOTE_STORE_ENTRY.equals(tipoDocumento)){
  991.                     RemoteStoresCore remoteStoresCore = new RemoteStoresCore(archiviCore);
  992.                    
  993.                     RemoteStoreKeyEntry remoteStoreKeyEntry = remoteStoresCore.getRemoteStoreKeyEntry(idAccordoLong);
  994.                     fileName = remoteStoreKeyEntry.getKid() + ".jwk";
  995.                     docBytes = remoteStoreKeyEntry.getContentKey();
  996.                 }
  997.                 else{
  998.                     throw new ServletException("Tipo archivio ["+tipoDocumento+"] non gestito (tipo documento: "+tipoDocumentoDaScaricare+")");
  999.                 }

  1000.             }

  1001.             // Setto Proprietà Export File
  1002.             HttpUtilities.setOutputFile(response, true, fileName);

  1003.             if(docBytes!=null) {
  1004.                 OutputStream out = response.getOutputStream();  
  1005.                 out.write(docBytes);
  1006.                 out.flush();
  1007.                 out.close();
  1008.             }

  1009.         } catch (Exception e) {
  1010.             ControlStationCore.logError("Errore durante il download dei documenti "+e.getMessage(), e);
  1011.         }
  1012.     }

  1013.     private long getIdAccordoLong(String idAccordo){
  1014.         long idAccordoLong = 0;
  1015.         try{ idAccordoLong = Long.valueOf(idAccordo); }catch(Exception e){ idAccordoLong = 0 ; }
  1016.         return idAccordoLong;
  1017.     }

  1018.     private byte[] serializeWsdl(Logger log,XSDSchemaCollection schemaCollection, AccordoServizioParteComune asConAllegati) throws XMLException{
  1019.         try{
  1020.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  1021.             serializeWsdl(log,bout,schemaCollection,asConAllegati);
  1022.             bout.flush();
  1023.             bout.close();
  1024.             return bout.toByteArray();
  1025.         }catch(Exception e){
  1026.             throw new XMLException(e.getMessage(),e);
  1027.         }
  1028.     }
  1029.     private void serializeWsdl(Logger log,OutputStream out,XSDSchemaCollection schemaCollection, AccordoServizioParteComune asConAllegati) throws XMLException{

  1030.         ZipOutputStream zipOut = null;
  1031.         try{
  1032.             zipOut = new ZipOutputStream(out);

  1033.             schemaCollection.zipSerialize(log, zipOut);

  1034.             String rootPackageDir = "wsdl"+File.separatorChar;

  1035.             if(asConAllegati.getByteWsdlLogicoErogatore()!=null){
  1036.                 String nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_LOGICO_EROGATORE_WSDL;
  1037.                 this.writeWsdl(log, rootPackageDir+nomeFile, zipOut, true, asConAllegati);
  1038.             }

  1039.             if(asConAllegati.getByteWsdlLogicoFruitore()!=null){
  1040.                 String nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_LOGICO_FRUITORE_WSDL;
  1041.                 this.writeWsdl(log, rootPackageDir+nomeFile, zipOut, false, asConAllegati);
  1042.             }

  1043.             zipOut.flush();

  1044.         }catch(Exception e){
  1045.             throw new XMLException(e.getMessage(),e);
  1046.         }finally{
  1047.             try{
  1048.                 if(zipOut!=null)
  1049.                     zipOut.close();
  1050.             }catch(Exception eClose){
  1051.                 // close
  1052.             }
  1053.         }
  1054.     }
  1055.     private void writeWsdl(Logger log,String nomeFile, ZipOutputStream zipOut, boolean erogatore, AccordoServizioParteComune asConAllegati) throws IOException{
  1056.         try{
  1057.             AccordoServizioWrapperUtilities wsdlWrapperUtilities = new AccordoServizioWrapperUtilities(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), log);
  1058.             wsdlWrapperUtilities.setAccordoServizio(new AccordoServizioWrapper());
  1059.             wsdlWrapperUtilities.getAccordoServizioWrapper().setAccordoServizio((AccordoServizioParteComune)asConAllegati.clone());
  1060.             WSDLUtilities wsdlUtilities = new WSDLUtilities(MessageXMLUtils.DEFAULT);
  1061.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  1062.             javax.wsdl.Definition wsdl = null;
  1063.             if(erogatore){
  1064.                 wsdl = wsdlWrapperUtilities.buildWsdlErogatoreFromBytes();
  1065.             }
  1066.             else{
  1067.                 wsdl = wsdlWrapperUtilities.buildWsdlFruitoreFromBytes();
  1068.             }
  1069.             wsdlUtilities.writeWsdlTo(wsdl, bout);
  1070.             bout.flush();
  1071.             bout.close();

  1072.             zipOut.putNextEntry(new ZipEntry(nomeFile));
  1073.             zipOut.write(bout.toByteArray());
  1074.         }catch(Exception e){
  1075.             String tipo = "Erogatore";
  1076.             if(!erogatore){
  1077.                 tipo = "Fruitore";
  1078.             }
  1079.             log.error("Costruzione WSDL "+tipo+" fallita: "+e.getMessage(),e);
  1080.             nomeFile = nomeFile + ".buildFailed.txt";
  1081.             zipOut.putNextEntry(new ZipEntry(nomeFile));
  1082.             String msg = e.getMessage();
  1083.             if(msg==null || msg.equals("")){
  1084.                 if(e instanceof NullPointerException){
  1085.                     msg = "Internal Error (NP)";
  1086.                 }
  1087.                 else{
  1088.                     msg = e.toString();
  1089.                     if(msg==null || msg.equals("")){
  1090.                         msg = "Internal Error";
  1091.                     }
  1092.                 }
  1093.             }
  1094.             zipOut.write(msg.getBytes());
  1095.         }
  1096.     }

  1097. }