ArchiviExporter.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.IOException;
  22. import java.io.OutputStream;
  23. import java.util.ArrayList;
  24. import java.util.List;

  25. import javax.servlet.ServletException;
  26. import javax.servlet.http.HttpServlet;
  27. import javax.servlet.http.HttpServletRequest;
  28. import javax.servlet.http.HttpServletResponse;
  29. import javax.servlet.http.HttpSession;

  30. import org.openspcoop2.core.allarmi.IdAllarme;
  31. import org.openspcoop2.core.controllo_traffico.IdActivePolicy;
  32. import org.openspcoop2.core.controllo_traffico.IdPolicy;
  33. import org.openspcoop2.core.id.IDAccordo;
  34. import org.openspcoop2.core.id.IDAccordoCooperazione;
  35. import org.openspcoop2.core.id.IDFruizione;
  36. import org.openspcoop2.core.id.IDGenericProperties;
  37. import org.openspcoop2.core.id.IDGruppo;
  38. import org.openspcoop2.core.id.IDRuolo;
  39. import org.openspcoop2.core.id.IDScope;
  40. import org.openspcoop2.core.id.IDServizio;
  41. import org.openspcoop2.core.id.IDServizioApplicativo;
  42. import org.openspcoop2.core.id.IDSoggetto;
  43. import org.openspcoop2.core.plugins.IdPlugin;
  44. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  45. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  46. import org.openspcoop2.protocol.sdk.archive.Archive;
  47. import org.openspcoop2.protocol.sdk.archive.ArchiveCascadeConfiguration;
  48. import org.openspcoop2.protocol.sdk.archive.ExportMode;
  49. import org.openspcoop2.protocol.sdk.archive.IArchive;
  50. import org.openspcoop2.protocol.sdk.archive.MappingModeTypesExtensions;
  51. import org.openspcoop2.protocol.sdk.constants.ArchiveType;
  52. import org.openspcoop2.utils.transport.http.HttpUtilities;
  53. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  54. import org.openspcoop2.web.ctrlstat.servlet.ac.AccordiCooperazioneCostanti;
  55. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCostanti;
  56. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCore;
  57. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCostanti;
  58. import org.openspcoop2.web.ctrlstat.servlet.aps.erogazioni.ErogazioniCostanti;
  59. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCostanti;
  60. import org.openspcoop2.web.ctrlstat.servlet.gruppi.GruppiCostanti;
  61. import org.openspcoop2.web.ctrlstat.servlet.login.LoginCostanti;
  62. import org.openspcoop2.web.ctrlstat.servlet.ruoli.RuoliCostanti;
  63. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCostanti;
  64. import org.openspcoop2.web.ctrlstat.servlet.scope.ScopeCostanti;
  65. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
  66. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCostanti;
  67. import org.openspcoop2.web.lib.mvc.Costanti;
  68. import org.openspcoop2.web.lib.mvc.PageData;
  69. import org.openspcoop2.web.lib.mvc.ServletUtils;

  70. /**
  71.  * Questa servlet si occupa di esportare le informazioni di configurazione
  72.  *
  73.  * @author Andrea Poli (apoli@link.it)
  74.  * @author Stefano Corallo (corallo@link.it)
  75.  * @author Sandra Giangrandi (sandra@link.it)
  76.  * @author $Author$
  77.  * @version $Rev$, $Date$
  78.  *
  79.  */
  80. public class ArchiviExporter extends HttpServlet {

  81.     private static final long serialVersionUID = -7341279067126334095L;
  82.    
  83.     @Override
  84.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  85.         this.processRequest(req, resp);
  86.     }

  87.     @Override
  88.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  89.         this.processRequest(req, resp);
  90.     }

  91.     /**
  92.      * Processa la richiesta pervenuta e si occupa di fornire i dati richiesti
  93.      * in formato zip
  94.      *
  95.      * @param req
  96.      * @param resp
  97.      * @throws ServletException
  98.      * @throws IOException
  99.      */
  100.     private void processRequest(HttpServletRequest request, HttpServletResponse response) {

  101.         String redirect = null;
  102.         try{
  103.            
  104.             HttpSession session = request.getSession(true);
  105.             PageData pd = new PageData();
  106.             ArchiviHelper archiviHelper = new ArchiviHelper(request, pd, session);
  107.             ArchiviCore archiviCore = new ArchiviCore();
  108.             SoggettiCore soggettiCore = new SoggettiCore(archiviCore);
  109.             AccordiServizioParteSpecificaCore aspsCore = new AccordiServizioParteSpecificaCore(archiviCore);
  110.            
  111.             String userLogin = ServletUtils.getUserLoginFromSession(session);
  112.        
  113.             // Sorgente su cui e' stato invocato l'export
  114.             String servletSourceExport = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_EXPORT_TIPO);
  115.             ArchiveType archiveType = ArchiveType.valueOf(servletSourceExport);
  116.            
  117.            
  118.             // Elementi selezionati per l'export
  119.             String objToExport = archiviHelper.getParameter(Costanti.PARAMETER_NAME_OBJECTS_FOR_REMOVE);
  120.            
  121.            
  122.             // Cascade
  123.             String cascadePolicyConfig = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_EXPORT_CASCADE_POLICY_CONFIG);
  124.             String cascadePluginConfig = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_EXPORT_CASCADE_PLUGIN_CONFIG);
  125.             String cascade = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_EXPORT_CASCADE);
  126.             String cascadePdd = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_EXPORT_CASCADE_PDD);
  127.             String cascadeGruppi = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_EXPORT_CASCADE_GRUPPI);
  128.             String cascadeRuoli = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_EXPORT_CASCADE_RUOLI);
  129.             String cascadeScope = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_EXPORT_CASCADE_SCOPE);
  130.             String cascadeSoggetti = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_EXPORT_CASCADE_SOGGETTI);
  131.             String cascadeServiziApplicativi = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_EXPORT_CASCADE_SERVIZI_APPLICATIVI);
  132.             String cascadePorteDelegate = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_EXPORT_CASCADE_PORTE_DELEGATE);
  133.             String cascadePorteApplicative = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_EXPORT_CASCADE_PORTE_APPLICATIVE);
  134.             String cascadeAccordiCooperazione = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_EXPORT_CASCADE_ACCORDI_COOPERAZIONE);
  135.             String cascadeAccordiServizioComposto = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_EXPORT_CASCADE_ACCORDI_SERVIZIO_COMPOSTO);
  136.             String cascadeAccordiServizioParteComune = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_EXPORT_CASCADE_ACCORDI_SERVIZIO_PARTE_COMUNE);
  137.             String cascadeAccordiServizioParteSpecifica = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_EXPORT_CASCADE_ACCORDI_SERVIZIO_PARTE_SPECIFICA);
  138.             String cascadeFruizioni = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_EXPORT_CASCADE_FRUIZIONI);
  139.            
  140.             // TipoConfigurazione
  141.             String tipoConfigurazione = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_EXPORT_TIPO_DUMP);
  142.                    
  143.             // protocollo
  144.             String protocollo = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_PROTOCOLLO);
  145.             IProtocolFactory<?> protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(protocollo);
  146.             IArchive archiveFactory = protocolFactory.createArchive();
  147.            
  148.             // tipo esportazione
  149.             ArchiveType tipoEsportazione = null;
  150.             if(tipoConfigurazione!=null){
  151.                 // export da configurazione
  152.                 tipoEsportazione = ArchiveType.valueOf(tipoConfigurazione);
  153.             }
  154.             else{
  155.                 tipoEsportazione = archiveType;
  156.             }
  157.            
  158.             // exportMode
  159.             String exportMode = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_TIPOLOGIA_ARCHIVIO);
  160.             List<ExportMode> exportModes = archiveFactory.getExportModes(tipoEsportazione);
  161.             ExportMode exportModeObject = null;
  162.             for (ExportMode tmp : exportModes) {
  163.                 if(tmp.equals(exportMode)){
  164.                     exportModeObject = tmp;
  165.                     break;
  166.                 }
  167.             }
  168.                        
  169.             // cascadeConfig
  170.             ArchiveCascadeConfiguration cascadeConfig = new ArchiveCascadeConfiguration(false); // se non e' abilitato il cascade deve essere tutto false
  171.             if(ServletUtils.isCheckBoxEnabled(cascade)){
  172.                 cascadeConfig = exportModeObject.getCascade();
  173.                
  174.                 if(archiviCore.isExportArchive_servizi_standard()==false){
  175.                     if(cascadePdd!=null && !"".equals(cascadePdd)){
  176.                         cascadeConfig.setCascadePdd(ServletUtils.isCheckBoxEnabled(cascadePdd));
  177.                     }
  178.                    
  179.                     if(cascadeGruppi!=null && !"".equals(cascadeGruppi)){
  180.                         cascadeConfig.setCascadeGruppi(ServletUtils.isCheckBoxEnabled(cascadeGruppi));
  181.                     }
  182.                    
  183.                     if(cascadeRuoli!=null && !"".equals(cascadeRuoli)){
  184.                         cascadeConfig.setCascadeRuoli(ServletUtils.isCheckBoxEnabled(cascadeRuoli));
  185.                     }
  186.                    
  187.                     if(cascadeScope!=null && !"".equals(cascadeScope)){
  188.                         cascadeConfig.setCascadeScope(ServletUtils.isCheckBoxEnabled(cascadeScope));
  189.                     }
  190.                    
  191.                     if(cascadeSoggetti!=null && !"".equals(cascadeSoggetti)){
  192.                         cascadeConfig.setCascadeSoggetti(ServletUtils.isCheckBoxEnabled(cascadeSoggetti));
  193.                     }
  194.                    
  195.                     if(cascadeServiziApplicativi!=null && !"".equals(cascadeServiziApplicativi)){
  196.                         cascadeConfig.setCascadeServiziApplicativi(ServletUtils.isCheckBoxEnabled(cascadeServiziApplicativi));
  197.                     }
  198.                     if(cascadePorteDelegate!=null && !"".equals(cascadePorteDelegate)){
  199.                         cascadeConfig.setCascadePorteDelegate(ServletUtils.isCheckBoxEnabled(cascadePorteDelegate));
  200.                     }
  201.                     if(cascadePorteApplicative!=null && !"".equals(cascadePorteApplicative)){
  202.                         cascadeConfig.setCascadePorteApplicative(ServletUtils.isCheckBoxEnabled(cascadePorteApplicative));
  203.                     }
  204.                    
  205.                     if(cascadeAccordiCooperazione!=null && !"".equals(cascadeAccordiCooperazione)){
  206.                         cascadeConfig.setCascadeAccordoCooperazione(ServletUtils.isCheckBoxEnabled(cascadeAccordiCooperazione));
  207.                     }
  208.                     if(cascadeAccordiServizioParteComune!=null && !"".equals(cascadeAccordiServizioParteComune)){
  209.                         cascadeConfig.setCascadeAccordoServizioParteComune(ServletUtils.isCheckBoxEnabled(cascadeAccordiServizioParteComune));
  210.                     }
  211.                     if(cascadeAccordiServizioComposto!=null && !"".equals(cascadeAccordiServizioComposto)){
  212.                         cascadeConfig.setCascadeAccordoServizioComposto(ServletUtils.isCheckBoxEnabled(cascadeAccordiServizioComposto));
  213.                     }
  214.                     if(cascadeAccordiServizioParteSpecifica!=null && !"".equals(cascadeAccordiServizioParteSpecifica)){
  215.                         cascadeConfig.setCascadeAccordoServizioParteSpecifica(ServletUtils.isCheckBoxEnabled(cascadeAccordiServizioParteSpecifica));
  216.                     }
  217.                     if(cascadeFruizioni!=null && !"".equals(cascadeFruizioni)){
  218.                         cascadeConfig.setCascadeFruizioni(ServletUtils.isCheckBoxEnabled(cascadeFruizioni));
  219.                     }
  220.                 }
  221.             }
  222.             cascadeConfig.setCascadePolicyConfigurazione(ServletUtils.isCheckBoxEnabled(cascadePolicyConfig));
  223.             cascadeConfig.setCascadePluginConfigurazione(ServletUtils.isCheckBoxEnabled(cascadePluginConfig));
  224.                        
  225.            
  226.             // Recuperi eventuali identificativi logici degli oggetti
  227.             ExporterUtils exporterUtils = new ExporterUtils(archiviCore);
  228.             List<?> identificativi = null;
  229.             switch (archiveType) {
  230.             case SOGGETTO:
  231.                 identificativi = exporterUtils.getIdsSoggetti(objToExport);
  232.                 redirect = SoggettiCostanti.SERVLET_NAME_SOGGETTI_LIST;
  233.                 break;
  234.             case ACCORDO_SERVIZIO_PARTE_COMUNE:
  235.                 identificativi = exporterUtils.getIdsAccordiServizioParteComune(objToExport);
  236.                 redirect = AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_LIST+"?"+
  237.                         AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO+"="+
  238.                         AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_PARTE_COMUNE;
  239.                 break;
  240.             case ACCORDO_SERVIZIO_COMPOSTO:
  241.                 identificativi = exporterUtils.getIdsAccordiServizioComposti(objToExport);
  242.                 redirect = AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_LIST+"?"+
  243.                         AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO+"="+
  244.                         AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_SERVIZIO_COMPOSTO;
  245.                 break;
  246.             case ACCORDO_SERVIZIO_PARTE_SPECIFICA:
  247.             case EROGAZIONE:
  248.             case FRUIZIONE:
  249.                
  250.                 String tipologia = ServletUtils.getObjectFromSession(request, session, String.class, AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_EROGAZIONE);
  251.                 boolean gestioneFruitori = false;
  252.                 if(tipologia!=null) {
  253.                     if(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_EROGAZIONE_VALUE_FRUIZIONE.equals(tipologia)) {
  254.                         gestioneFruitori = true;
  255.                     }
  256.                 }
  257.                
  258.                 identificativi = exporterUtils.getIdsAccordiServizioParteSpecifica(objToExport, gestioneFruitori);
  259.                 Boolean vistaErogazioni = ServletUtils.getBooleanAttributeFromSession(ErogazioniCostanti.ASPS_EROGAZIONI_ATTRIBUTO_VISTA_EROGAZIONI, session, request).getValue();
  260.                 if(vistaErogazioni != null && vistaErogazioni.booleanValue()) {
  261.                     redirect = ErogazioniCostanti.SERVLET_NAME_ASPS_EROGAZIONI_LIST;
  262.                 }
  263.                 else {
  264.                     redirect = AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_LIST;
  265.                 }
  266.                 break;
  267.             case ACCORDO_COOPERAZIONE:
  268.                 identificativi = exporterUtils.getIdsAccordiCooperazione(objToExport);
  269.                 redirect = AccordiCooperazioneCostanti.SERVLET_NAME_ACCORDI_COOPERAZIONE_LIST;
  270.                 break;
  271.             case SERVIZIO_APPLICATIVO:
  272.                 identificativi = exporterUtils.getIdsServiziApplicativi(objToExport);
  273.                 redirect = ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_LIST;
  274.                 break;
  275.             case GRUPPO:
  276.                 identificativi = exporterUtils.getIdsGruppi(objToExport);
  277.                 redirect = GruppiCostanti.SERVLET_NAME_GRUPPI_LIST;
  278.                 break;
  279.             case RUOLO:
  280.                 identificativi = exporterUtils.getIdsRuoli(objToExport);
  281.                 redirect = RuoliCostanti.SERVLET_NAME_RUOLI_LIST;
  282.                 break;
  283.             case SCOPE:
  284.                 identificativi = exporterUtils.getIdsScope(objToExport);
  285.                 redirect = ScopeCostanti.SERVLET_NAME_SCOPE_LIST;
  286.                 break;
  287.             case CONFIGURAZIONE_CONTROLLO_TRAFFICO_CONFIG_POLICY:
  288.                 identificativi = exporterUtils.getIdsControlloTrafficoConfigPolicy(objToExport);
  289.                 redirect = ConfigurazioneCostanti.SERVLET_NAME_CONFIGURAZIONE_CONTROLLO_TRAFFICO_CONFIGURAZIONE_POLICY_LIST;
  290.                 break;
  291.             case CONFIGURAZIONE_CONTROLLO_TRAFFICO_ACTIVE_POLICY:
  292.                 identificativi = exporterUtils.getIdsControlloTrafficoActivePolicy(objToExport);
  293.                 redirect = ConfigurazioneCostanti.SERVLET_NAME_CONFIGURAZIONE_CONTROLLO_TRAFFICO_ATTIVAZIONE_POLICY_LIST;
  294.                 break;
  295.             case ALLARME:
  296.                 identificativi = exporterUtils.getIdsAllarmi(objToExport);
  297.                 redirect = ConfigurazioneCostanti.SERVLET_NAME_CONFIGURAZIONE_ALLARMI_LIST;
  298.                 break;
  299.             case CONFIGURAZIONE_TOKEN_POLICY:
  300.                 identificativi = exporterUtils.getIdsTokenPolicy(objToExport);
  301.                 redirect = ConfigurazioneCostanti.SERVLET_NAME_CONFIGURAZIONE_POLICY_GESTIONE_TOKEN_LIST+"?"+
  302.                         ConfigurazioneCostanti.PARAMETRO_TOKEN_POLICY_TIPOLOGIA_INFORMAZIONE+"="+ConfigurazioneCostanti.PARAMETRO_TOKEN_POLICY_TIPOLOGIA_INFORMAZIONE_VALORE_TOKEN;
  303.                 break;
  304.             case CONFIGURAZIONE_ATTRIBUTE_AUTHORITY:
  305.                 identificativi = exporterUtils.getIdsAttributeAuthority(objToExport);
  306.                 redirect = ConfigurazioneCostanti.SERVLET_NAME_CONFIGURAZIONE_POLICY_GESTIONE_TOKEN_LIST+"?"+
  307.                         ConfigurazioneCostanti.PARAMETRO_TOKEN_POLICY_TIPOLOGIA_INFORMAZIONE+"="+ConfigurazioneCostanti.PARAMETRO_TOKEN_POLICY_TIPOLOGIA_INFORMAZIONE_VALORE_ATTRIBUTE_AUTHORITY;
  308.                 break;
  309.             case CONFIGURAZIONE_PLUGIN_CLASSE:
  310.                 identificativi = exporterUtils.getIdsPluginClassi(objToExport);
  311.                 redirect = ConfigurazioneCostanti.SERVLET_NAME_CONFIGURAZIONE_PLUGINS_CLASSI_LIST;
  312.                 break;
  313.             case CONFIGURAZIONE_PLUGIN_ARCHVIO:
  314.                 identificativi = exporterUtils.getIdsPluginArchivi(objToExport);
  315.                 redirect = ConfigurazioneCostanti.SERVLET_NAME_CONFIGURAZIONE_PLUGINS_ARCHIVI_LIST;
  316.                 break;
  317.             case CONFIGURAZIONE_URL_INVOCAZIONE_REGOLA:
  318.                 identificativi = exporterUtils.getIdsUrlInvocazioneRegole(objToExport);
  319.                 redirect = ConfigurazioneCostanti.SERVLET_NAME_CONFIGURAZIONE_PROXY_PASS_REGOLA_LIST;
  320.                 break;
  321.             default:
  322.                 // altri tipi che non prevedono la lista degli identificativi schermata di errore
  323.                 redirect = LoginCostanti.SERVLET_NAME_MESSAGE_PAGE;
  324.             }
  325.            
  326.            
  327.             // Costruisco l'archivio da esportare
  328.             Archive archive = archiviCore.readArchiveForExport(userLogin, archiviHelper.smista(),
  329.                     tipoEsportazione, identificativi, cascadeConfig);
  330.                    
  331.            
  332.             // Filtro per il protocollo attivo sulla console
  333.             List<String> protocolli = archiviCore.getProtocolli(request, session);
  334.             List<String> tipiSoggetti = new ArrayList<>();
  335.             List<String> tipiServizi = new ArrayList<>();
  336.             for (String protocolloUtente : protocolli) {
  337.                 tipiSoggetti.addAll(soggettiCore.getTipiSoggettiGestitiProtocollo(protocolloUtente));
  338.                 tipiServizi.addAll(aspsCore.getTipiServiziGestitiProtocollo(protocolloUtente,null));
  339.             }
  340.             exporterUtils.filterByProtocol(tipiSoggetti,tipiServizi,archive);
  341.            
  342.             // Filtro per il soggetto selezionato
  343.             // non devo filtrare se sto facendo l'export dalle API, poiche' le ho selezionate puntualmente indipendentemente dal soggetto selezionato
  344.             boolean exportFromApi = ArchiveType.ACCORDO_SERVIZIO_PARTE_COMUNE.equals(archiveType) || ArchiveType.ACCORDO_SERVIZIO_COMPOSTO.equals(archiveType);
  345.             if(archiviHelper.isSoggettoMultitenantSelezionato() && !exportFromApi) {
  346.                 IDSoggetto idSoggettoSelezionato = archiviCore.convertSoggettoSelezionatoToID(archiviHelper.getSoggettoMultitenantSelezionato());
  347.                 exporterUtils.filterBySoggettoSelezionato(idSoggettoSelezionato, archive);
  348.             }
  349.            
  350.             // extension
  351.             MappingModeTypesExtensions mappingModeTypeExt = archiveFactory.getExportMappingTypesExtensions(archive, exportModeObject,
  352.                     archiviCore.getRegistryReader(protocolFactory),archiviCore.getConfigIntegrationReader(protocolFactory));
  353.             String extSingleArchive = mappingModeTypeExt.getPreferExtSingleObject();
  354.             if(extSingleArchive==null){
  355.                 extSingleArchive = mappingModeTypeExt.mappingArchiveTypeToExt(archiveType);
  356.             }
  357.             if(extSingleArchive==null){
  358.                 extSingleArchive = mappingModeTypeExt.getExtensions().get(0); // prendo la prima estensione supportata
  359.             }
  360.             String ext = null;
  361.             if(mappingModeTypeExt.getExtensions().size()==1 || (mappingModeTypeExt.getPreferExtSingleObject()==null)) {
  362.                 ext = mappingModeTypeExt.getExtensions().get(0); // prendo la prima estensione supportata
  363.             }
  364.             else {
  365.                 // prendo la prima estensione supportata escludento la preferita per la singola entita
  366.                 for (int i = 0; i < mappingModeTypeExt.getExtensions().size(); i++) {
  367.                     String extTmp = mappingModeTypeExt.getExtensions().get(i);
  368.                     if(extTmp.equals(mappingModeTypeExt.getPreferExtSingleObject())==false) {
  369.                         ext = extTmp;
  370.                         break;
  371.                     }
  372.                 }
  373.             }
  374.            
  375.            
  376.             // Costruisco file name da esportare
  377.             String prefix = "GovWay";
  378.             String fileName = null;
  379.             switch (archiveType) {
  380.             case SOGGETTO:
  381.                 if(identificativi==null || identificativi.isEmpty()) {
  382.                     throw new Exception("Identificativi non forniti");
  383.                 }
  384.                 if(identificativi.size()>1){
  385.                     fileName = prefix+"Soggetti."+ext;
  386.                 }else{
  387.                     IDSoggetto idSoggetto = ((IDSoggetto)identificativi.get(0));
  388.                     fileName = prefix+"Soggetto_"+idSoggetto.getTipo()+idSoggetto.getNome()+"."+extSingleArchive;
  389.                 }
  390.                 break;
  391.             case ACCORDO_SERVIZIO_PARTE_COMUNE:
  392.                 if(identificativi==null || identificativi.isEmpty()) {
  393.                     throw new Exception("Identificativi non forniti");
  394.                 }
  395.                 if(identificativi.size()>1){
  396.                     fileName = prefix+"APIs."+ext;
  397.                 }
  398.                 else{
  399.                     IDAccordo idAccordo = ((IDAccordo)identificativi.get(0));
  400.                     fileName = prefix+"API_"+idAccordo.getNome();
  401.                     if(idAccordo.getSoggettoReferente()!=null){
  402.                         fileName+="_"+idAccordo.getSoggettoReferente().getTipo()+idAccordo.getSoggettoReferente().getNome();
  403.                     }
  404.                     if(idAccordo.getVersione()!=null){
  405.                         fileName+="_"+idAccordo.getVersione();
  406.                     }
  407.                     fileName +="."+extSingleArchive;
  408.                 }
  409.                 break;
  410.             case ACCORDO_SERVIZIO_COMPOSTO:
  411.                 if(identificativi==null || identificativi.isEmpty()) {
  412.                     throw new Exception("Identificativi non forniti");
  413.                 }
  414.                 if(identificativi.size()>1){
  415.                     fileName = prefix+"AccordiServizioComposto."+ext;
  416.                 }
  417.                 else{
  418.                     IDAccordo idAccordo = ((IDAccordo)identificativi.get(0));
  419.                     fileName = prefix+"AccordiServizioComposto_"+idAccordo.getNome();
  420.                     if(idAccordo.getSoggettoReferente()!=null){
  421.                         fileName+="_"+idAccordo.getSoggettoReferente().getTipo()+idAccordo.getSoggettoReferente().getNome();
  422.                     }
  423.                     if(idAccordo.getVersione()!=null){
  424.                         fileName+="_"+idAccordo.getVersione();
  425.                     }
  426.                     fileName +="."+extSingleArchive;
  427.                 }
  428.                 break;
  429.             case ACCORDO_SERVIZIO_PARTE_SPECIFICA:
  430.                 if(identificativi==null || identificativi.isEmpty()) {
  431.                     throw new Exception("Identificativi non forniti");
  432.                 }
  433.                 if(identificativi.size()>1){
  434.                     fileName = prefix+"Servizi."+ext;
  435.                 }
  436.                 else{
  437.                     IDServizio idServizio = ((IDServizio)identificativi.get(0));
  438.                     fileName = prefix+"Servizio_"+idServizio.getTipo()+idServizio.getNome();
  439.                     fileName+="_"+idServizio.getSoggettoErogatore().getTipo()+idServizio.getSoggettoErogatore().getNome();
  440.                     if(idServizio.getVersione()!=null){
  441.                         fileName+="_"+idServizio.getVersione();
  442.                     }
  443.                     fileName +="."+extSingleArchive;
  444.                 }
  445.                 break;
  446.             case ACCORDO_COOPERAZIONE:
  447.                 if(identificativi==null || identificativi.isEmpty()) {
  448.                     throw new Exception("Identificativi non forniti");
  449.                 }
  450.                 if(identificativi.size()>1){
  451.                     fileName = prefix+"AccordiCooperazione."+ext;
  452.                 }
  453.                 else{
  454.                     IDAccordoCooperazione idAccordo = ((IDAccordoCooperazione)identificativi.get(0));
  455.                     fileName = prefix+"AccordiCooperazione_"+idAccordo.getNome();
  456.                     if(idAccordo.getSoggettoReferente()!=null){
  457.                         fileName+="_"+idAccordo.getSoggettoReferente().getTipo()+idAccordo.getSoggettoReferente().getNome();
  458.                     }
  459.                     if(idAccordo.getVersione()!=null){
  460.                         fileName+="_"+idAccordo.getVersione();
  461.                     }
  462.                     fileName +="."+extSingleArchive;
  463.                 }
  464.                 break;
  465.             case EROGAZIONE:
  466.                 if(identificativi==null || identificativi.isEmpty()) {
  467.                     throw new Exception("Identificativi non forniti");
  468.                 }
  469.                 if(identificativi.size()>1){
  470.                     fileName = prefix+"Erogazioni."+ext;
  471.                 }
  472.                 else{
  473.                     IDServizio idServizio = ((IDServizio)identificativi.get(0));
  474.                     fileName = prefix+"Erogazione_"+idServizio.getTipo()+idServizio.getNome();
  475.                     fileName+="_"+idServizio.getSoggettoErogatore().getTipo()+idServizio.getSoggettoErogatore().getNome();
  476.                     if(idServizio.getVersione()!=null){
  477.                         fileName+="_"+idServizio.getVersione();
  478.                     }
  479.                     fileName +="."+extSingleArchive;
  480.                 }
  481.                 break;
  482.             case FRUIZIONE:
  483.                 if(identificativi==null || identificativi.isEmpty()) {
  484.                     throw new Exception("Identificativi non forniti");
  485.                 }
  486.                 if(identificativi.size()>1){
  487.                     fileName = prefix+"Fruizioni."+ext;
  488.                 }
  489.                 else{
  490.                     IDFruizione idFruizione = ((IDFruizione)identificativi.get(0));
  491.                     IDServizio idServizio = idFruizione.getIdServizio();
  492.                     fileName = prefix+"Fruizione_"+idFruizione.getIdFruitore().getTipo()+idFruizione.getIdFruitore().getNome();
  493.                     fileName+="_"+idServizio.getTipo()+idServizio.getNome();
  494.                     fileName+="_"+idServizio.getSoggettoErogatore().getTipo()+idServizio.getSoggettoErogatore().getNome();
  495.                     if(idServizio.getVersione()!=null){
  496.                         fileName+="_"+idServizio.getVersione();
  497.                     }
  498.                     fileName +="."+extSingleArchive;
  499.                 }
  500.                 break;
  501.             case SERVIZIO_APPLICATIVO:
  502.                 if(identificativi==null || identificativi.isEmpty()) {
  503.                     throw new Exception("Identificativi non forniti");
  504.                 }
  505.                 if(identificativi.size()>1){
  506.                     fileName = prefix+"Applicativi."+ext;
  507.                 }else{
  508.                     IDServizioApplicativo idServizioApplicativo = ((IDServizioApplicativo)identificativi.get(0));
  509.                     fileName = prefix+"Applicativo_"+idServizioApplicativo.getIdSoggettoProprietario().getTipo()+idServizioApplicativo.getIdSoggettoProprietario().getNome()+
  510.                             "_"+
  511.                             idServizioApplicativo.getNome()+
  512.                             "."+extSingleArchive;
  513.                 }
  514.                 break;
  515.             case GRUPPO:
  516.                 if(identificativi==null || identificativi.isEmpty()) {
  517.                     throw new Exception("Identificativi non forniti");
  518.                 }
  519.                 if(identificativi.size()>1){
  520.                     fileName = prefix+"Tags."+ext;
  521.                 }else{
  522.                     IDGruppo idGruppo = ((IDGruppo)identificativi.get(0));
  523.                     fileName = prefix+"Tag_"+idGruppo.getNome()+"."+extSingleArchive;
  524.                 }
  525.                 break;
  526.             case RUOLO:
  527.                 if(identificativi==null || identificativi.isEmpty()) {
  528.                     throw new Exception("Identificativi non forniti");
  529.                 }
  530.                 if(identificativi.size()>1){
  531.                     fileName = prefix+"Ruoli."+ext;
  532.                 }else{
  533.                     IDRuolo idRuolo = ((IDRuolo)identificativi.get(0));
  534.                     fileName = prefix+"Ruolo_"+idRuolo.getNome()+"."+extSingleArchive;
  535.                 }
  536.                 break;
  537.             case SCOPE:
  538.                 if(identificativi==null || identificativi.isEmpty()) {
  539.                     throw new Exception("Identificativi non forniti");
  540.                 }
  541.                 if(identificativi.size()>1){
  542.                     fileName = prefix+"Scope."+ext;
  543.                 }else{
  544.                     IDScope idScope = ((IDScope)identificativi.get(0));
  545.                     fileName = prefix+"Scope_"+idScope.getNome()+"."+extSingleArchive;
  546.                 }
  547.                 break;
  548.             case CONFIGURAZIONE_CONTROLLO_TRAFFICO_CONFIG_POLICY:
  549.                 if(identificativi==null || identificativi.isEmpty()) {
  550.                     throw new Exception("Identificativi non forniti");
  551.                 }
  552.                 if(identificativi.size()>1){
  553.                     fileName = prefix+"ControlloTrafficoPolicy."+ext;
  554.                 }else{
  555.                     IdPolicy idPolicy = ((IdPolicy)identificativi.get(0));
  556.                     fileName = prefix+"ControlloTrafficoPolicy_"+idPolicy.getNome()+"."+extSingleArchive;
  557.                 }
  558.                 break;
  559.             case CONFIGURAZIONE_CONTROLLO_TRAFFICO_ACTIVE_POLICY:
  560.                 if(identificativi==null || identificativi.isEmpty()) {
  561.                     throw new Exception("Identificativi non forniti");
  562.                 }
  563.                 if(identificativi.size()>1){
  564.                     fileName = prefix+"RateLimitingPolicy."+ext;
  565.                 }else{
  566.                     IdActivePolicy idActivePolicy = ((IdActivePolicy)identificativi.get(0));
  567.                     fileName = prefix+"RateLimitingPolicy_"+idActivePolicy.getAlias()+"."+extSingleArchive;
  568.                 }
  569.                 break;
  570.             case ALLARME:
  571.                 if(identificativi==null || identificativi.isEmpty()) {
  572.                     throw new Exception("Identificativi non forniti");
  573.                 }
  574.                 if(identificativi.size()>1){
  575.                     fileName = prefix+"Allarmi."+ext;
  576.                 }else{
  577.                     IdAllarme idAllarme = ((IdAllarme)identificativi.get(0));
  578.                     fileName = prefix+"Allarme_"+idAllarme.getAlias()+"."+extSingleArchive;
  579.                 }
  580.                 break;
  581.             case CONFIGURAZIONE_TOKEN_POLICY:
  582.                 if(identificativi==null || identificativi.isEmpty()) {
  583.                     throw new Exception("Identificativi non forniti");
  584.                 }
  585.                 if(identificativi.size()>1){
  586.                     fileName = prefix+"TokenPolicy."+ext;
  587.                 }else{
  588.                     IDGenericProperties idPolicy = ((IDGenericProperties)identificativi.get(0));
  589.                     fileName = prefix+"TokenPolicy_"+idPolicy.getTipologia()+"_"+idPolicy.getNome()+"."+extSingleArchive;
  590.                 }
  591.                 break;
  592.             case CONFIGURAZIONE_ATTRIBUTE_AUTHORITY:
  593.                 if(identificativi==null || identificativi.isEmpty()) {
  594.                     throw new Exception("Identificativi non forniti");
  595.                 }
  596.                 if(identificativi.size()>1){
  597.                     fileName = prefix+"AttributeAuthority."+ext;
  598.                 }else{
  599.                     IDGenericProperties idPolicy = ((IDGenericProperties)identificativi.get(0));
  600.                     fileName = prefix+"AttributeAuthority_"+
  601.                             //idPolicy.getTipologia()+"_"+
  602.                             idPolicy.getNome()+"."+extSingleArchive;
  603.                 }
  604.                 break;
  605.             case CONFIGURAZIONE_PLUGIN_CLASSE:
  606.                 if(identificativi==null || identificativi.isEmpty()) {
  607.                     throw new Exception("Identificativi non forniti");
  608.                 }
  609.                 if(identificativi.size()>1){
  610.                     fileName = prefix+"PluginClassi."+ext;
  611.                 }else{
  612.                     IdPlugin idPlugin = ((IdPlugin)identificativi.get(0));
  613.                     fileName = prefix+"Plugin_"+idPlugin.getTipoPlugin()+"_"+idPlugin.getTipo()+"."+extSingleArchive;
  614.                 }
  615.                 break;
  616.             case CONFIGURAZIONE_PLUGIN_ARCHVIO:
  617.                 if(identificativi==null || identificativi.isEmpty()) {
  618.                     throw new Exception("Identificativi non forniti");
  619.                 }
  620.                 if(identificativi.size()>1){
  621.                     fileName = prefix+"PluginArchivi."+ext;
  622.                 }else{
  623.                     String idPlugin = ((String)identificativi.get(0));
  624.                     fileName = prefix+"ArchivioPlugins_"+idPlugin+"."+extSingleArchive;
  625.                 }
  626.                 break;
  627.             case CONFIGURAZIONE_URL_INVOCAZIONE_REGOLA:
  628.                 if(identificativi==null || identificativi.isEmpty()) {
  629.                     throw new Exception("Identificativi non forniti");
  630.                 }
  631.                 if(identificativi.size()>1){
  632.                     fileName = prefix+"RegoleProxyPass."+ext;
  633.                 }else{
  634.                     String idRegola = ((String)identificativi.get(0));
  635.                     fileName = prefix+"RegolaProxyPass_"+idRegola+"."+extSingleArchive;
  636.                 }
  637.                 break;
  638.             case CONFIGURAZIONE_URL_INVOCAZIONE:
  639.                 fileName = prefix+"ConfigurazioneUrlInvocazione."+extSingleArchive;
  640.                 break;
  641.             default:
  642.                 // altri tipi che non prevedono la lista degli identificativi: e' la configurazione
  643.                 fileName = prefix+"Configurazione."+extSingleArchive;
  644.             }
  645.            
  646.             // Setto Proprietà Export File
  647.             HttpUtilities.setOutputFile(response, true, fileName);
  648.                                
  649.             // export
  650.             OutputStream out = response.getOutputStream();
  651.             // archiviCore.export(userLogin, archiviHelper.smista(), protocollo, archive, out, exportModeObject);
  652.             // Devo far serializzare prima tutto in memoria, altrimenti poi non mi accorgo di eventuali errori di un singolo archivio durante l'export
  653.             out.write(archiviCore.export(userLogin, archiviHelper.smista(), protocollo, archive, exportModeObject));
  654.            
  655.         }catch(Exception e){
  656.             ControlStationCore.logError("Errore durante l'esportazione dell'archivio: "+e.getMessage(), e);
  657.            
  658.             if(redirect!=null){
  659.                 String msg = e.getMessage();
  660.                 if(redirect.contains("?"))
  661.                     redirect+="&"+Costanti.PARAMETER_NAME_MSG_ERROR_EXPORT+"='"+msg+"'";
  662.                 else
  663.                     redirect+="?"+Costanti.PARAMETER_NAME_MSG_ERROR_EXPORT+"='"+msg+"'";
  664.                
  665.                 // parametro necessario per la servlet generica di messaggi errore
  666.                 redirect+="&"+Costanti.PARAMETER_MESSAGE_TEXT+"='"+msg+"'";
  667.                 redirect+="&"+Costanti.PARAMETER_MESSAGE_BREADCRUMB+"="+ArchiviCostanti.LABEL_ARCHIVI_EXPORT+"";
  668.                
  669.                 try {
  670.                     response.sendRedirect(redirect);
  671.                 }catch(Throwable t) {
  672.                     ControlStationCore.logError("Errore durante l'esportazione dell'archivio (redirect:"+redirect+"): "+t.getMessage(), t);
  673.                 }
  674.             }
  675.             else{
  676.                 try {
  677.                     response.sendRedirect(LoginCostanti.SERVLET_NAME_MESSAGE_PAGE);
  678.                 }catch(Throwable t) {
  679.                     ControlStationCore.logError("Errore durante l'esportazione dell'archivio (redirect:"+LoginCostanti.SERVLET_NAME_MESSAGE_PAGE+"): "+t.getMessage(), t);
  680.                 }
  681.             }
  682.         }
  683.        
  684.     }

  685.    

  686. }