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

  25. import javax.servlet.http.HttpServletRequest;
  26. import javax.servlet.http.HttpServletResponse;
  27. import javax.servlet.http.HttpSession;

  28. import org.apache.commons.lang.StringEscapeUtils;
  29. import org.apache.struts.action.Action;
  30. import org.apache.struts.action.ActionForm;
  31. import org.apache.struts.action.ActionForward;
  32. import org.apache.struts.action.ActionMapping;
  33. import org.apache.struts.upload.FormFile;
  34. import org.openspcoop2.protocol.engine.archive.ImportInformationMissingCollection;
  35. import org.openspcoop2.protocol.engine.archive.ImportInformationMissingException;
  36. import org.openspcoop2.protocol.information_missing.Wizard;
  37. import org.openspcoop2.protocol.sdk.archive.Archive;
  38. import org.openspcoop2.protocol.sdk.archive.ArchiveModeType;
  39. import org.openspcoop2.protocol.sdk.archive.ImportMode;
  40. import org.openspcoop2.protocol.sdk.archive.MapPlaceholder;
  41. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  42. import org.openspcoop2.web.ctrlstat.core.ControlStationCoreException;
  43. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  44. import org.openspcoop2.web.ctrlstat.servlet.pdd.PddCore;
  45. import org.openspcoop2.web.lib.mvc.DataElement;
  46. import org.openspcoop2.web.lib.mvc.DataElementType;
  47. import org.openspcoop2.web.lib.mvc.GeneralData;
  48. import org.openspcoop2.web.lib.mvc.PageData;
  49. import org.openspcoop2.web.lib.mvc.Parameter;
  50. import org.openspcoop2.web.lib.mvc.ServletUtils;

  51. /**
  52.  * Importer
  53.  *
  54.  * @author Andrea Poli (apoli@link.it)
  55.  * @author $Author$
  56.  * @version $Rev$, $Date$
  57.  */
  58. public final class Importer extends Action {

  59.     @Override
  60.     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

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

  62.         // Inizializzo PageData
  63.         PageData pd = new PageData();

  64.         GeneralHelper generalHelper = new GeneralHelper(session);

  65.         // Inizializzo GeneralData
  66.         GeneralData gd = generalHelper.initGeneralData(request);

  67.         try {
  68.            
  69.             String userLogin = ServletUtils.getUserLoginFromSession(session);
  70.            
  71.             ArchiviHelper archiviHelper = new ArchiviHelper(request, pd, session);
  72.             ArchiviCore archiviCore = new ArchiviCore();
  73.            
  74.             PddCore pddCore = new PddCore(archiviCore);
  75.             if(!pddCore.existsPddOperativa()){
  76.                
  77.                 archiviHelper.makeMenu();
  78.                
  79.                 pd.setMessage("Non è possibile completare l'operazione: non è stata rilevata una Porta di Dominio operativa");
  80.                
  81.                 pd.disableEditMode();
  82.                
  83.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  84.                
  85.                 return ServletUtils.getStrutsForwardEditModeFinished(mapping, ArchiviCostanti.OBJECT_NAME_ARCHIVI_IMPORT,
  86.                         ArchiviCostanti.TIPO_OPERAZIONE_IMPORT);                
  87.             }
  88.             String nomePddOperativa = pddCore.getNomePddOperativa();
  89.            
  90.             ImporterUtils importerUtils = new ImporterUtils(archiviCore);
  91.                    
  92.            
  93.             // Eventuale PostBack element name che ha scaturito l'evento
  94.             String postBackElementName = archiviHelper.getPostBackElementName();
  95.            
  96.            
  97.             // Indicazione se devo effettuare una delete od una import
  98.             boolean deleter = false;
  99.             String parametroModalitaFunzionamento = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORTER_MODALITA);
  100.             if(parametroModalitaFunzionamento!=null){
  101.                 deleter = ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORTER_MODALITA_ELIMINA.equals(parametroModalitaFunzionamento.trim());
  102.             }
  103.             else{
  104.                 // default
  105.                 parametroModalitaFunzionamento = ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORTER_MODALITA_IMPORT;
  106.             }
  107.             DataElement modalitaDataElement = new DataElement();
  108.             modalitaDataElement.setLabel(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORTER_MODALITA);
  109.             modalitaDataElement.setValue(parametroModalitaFunzionamento);
  110.             modalitaDataElement.setType(DataElementType.HIDDEN);
  111.             modalitaDataElement.setName(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORTER_MODALITA);
  112.            
  113.            
  114.             String labelBottone = ArchiviCostanti.LABEL_ARCHIVI_IMPORT;
  115.             if(deleter){
  116.                 labelBottone = ArchiviCostanti.LABEL_ARCHIVI_ELIMINA;  
  117.             }
  118.            
  119.             // parametri vari
  120.             ImporterStrutsBean strutsBean = null;
  121.             String f = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_PACKAGE_FILE_PATH);
  122.             if(f==null || "".equals(f)) {
  123.                 strutsBean = new ImporterStrutsBean(request, session, true);
  124.             }
  125.             else {
  126.                 strutsBean = new ImporterStrutsBean(request, session, false);
  127.                 strutsBean.filePath = f;
  128.             }
  129.            
  130.             // protocolli supportati
  131.             List<String> protocolli = archiviCore.getProtocolli(request, session);
  132.             if(protocolli.size()>1){
  133.                 protocolli = new ArrayList<>();
  134.                 protocolli.add(ArchiviCostanti.PARAMETRO_ARCHIVI_PROTOCOLLO_UNDEFINDED);
  135.                 protocolli.addAll(archiviCore.getProtocolli(request, session));
  136.             }
  137.             strutsBean.protocollo = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_PROTOCOLLO);
  138.             if("".equals(strutsBean.protocollo) || ArchiviCostanti.PARAMETRO_ARCHIVI_PROTOCOLLO_UNDEFINDED.equals(strutsBean.protocollo)){
  139.                 strutsBean.protocollo = null;
  140.             }
  141.             // Volutamente per default si vogliono tutti!
  142. /**         if(strutsBean.protocollo==null){
  143. //              strutsBean.protocollo = archiviCore.getProtocolloDefault();
  144. //          }*/
  145.            
  146.            
  147.            
  148.             // show Protocols se esiste più di un importMode per qualche protocollo
  149.             Map<String, String> importModesMapRispettoATuttiIProtocolli = importerUtils.getImportModesWithProtocol(protocolli);
  150.             boolean showProtocols = importModesMapRispettoATuttiIProtocolli!=null && importModesMapRispettoATuttiIProtocolli.size()>1;
  151.            
  152.            
  153.            
  154.             // import modes
  155.             List<String> protocolliForModes = new ArrayList<>();
  156.             if(strutsBean.protocollo!=null){
  157.                 protocolliForModes.add(strutsBean.protocollo);
  158.             }else{
  159.                 protocolliForModes.addAll(protocolli);
  160.             }
  161.             Map<String, String> importModesMap = importerUtils.getImportModesWithProtocol(protocolliForModes);
  162.             List<ImportMode> importModes = new ArrayList<>();
  163.             for (String imp : importModesMap.keySet()) {
  164.                 importModes.add(new ImportMode(imp));
  165.             }
  166.             strutsBean.importMode = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_TIPOLOGIA_ARCHIVIO);
  167.             if(strutsBean.importMode!=null &&
  168.                 // verifico che esista nei modes disponibili per i protocolli selezionati
  169.                 !importModes.contains(new ImportMode(strutsBean.importMode))){
  170.                 strutsBean.importMode = null;
  171.             }
  172.             if(strutsBean.importMode==null){
  173.                 if(importModes.contains(org.openspcoop2.protocol.basic.Costanti.OPENSPCOOP_IMPORT_ARCHIVE_MODE)){
  174.                     strutsBean.importMode = org.openspcoop2.protocol.basic.Costanti.OPENSPCOOP_IMPORT_ARCHIVE_MODE.toString();
  175.                 }else{
  176.                     strutsBean.importMode = importModes.get(0).toString();
  177.                 }
  178.             }
  179.             ImportMode archiveMode = null;
  180.             if(strutsBean.importMode!=null){
  181.                 archiveMode = new ImportMode(strutsBean.importMode);
  182.             }
  183.            
  184.            
  185.             // import types
  186.             String protocolloEffettivo = importModesMap.get(strutsBean.importMode);
  187.             /**System.out.println("PROTOCOLLO EFFETTIVO: "+protocolloEffettivo);*/
  188.             List<ArchiveModeType> importTypes = null;
  189.             if(strutsBean.importMode!=null){
  190.                 importTypes = importerUtils.getImportModeTypes(archiveMode, protocolloEffettivo);
  191.             }
  192.             strutsBean.importType = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_TIPO);
  193.             if(strutsBean.importType!=null &&
  194.                 // verifico che esista nei tyoes disponibili per il mode selezionato
  195.                 !importTypes.contains(new ArchiveModeType(strutsBean.importType))){
  196.                 strutsBean.importType = null;
  197.             }
  198.             if(strutsBean.importType==null){
  199.                 strutsBean.importType = importTypes.get(0).toString();
  200.             }
  201.             ArchiveModeType archiveModeType = null;
  202.             if(strutsBean.importType!=null){
  203.                 archiveModeType = new ArchiveModeType(strutsBean.importType);
  204.             }
  205.            
  206.            
  207.             // validazione
  208.             String tmpValidazioneDocumenti = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_VALIDAZIONE_DOCUMENTI);
  209.             if(archiviHelper.isEditModeInProgress() && tmpValidazioneDocumenti==null){
  210.                 // primo accesso alla servlet
  211.                 strutsBean.validazioneDocumenti = true;
  212.             }
  213.             else{
  214.                 if(ServletUtils.isCheckBoxEnabled(tmpValidazioneDocumenti)){
  215.                     strutsBean.validazioneDocumenti = true;
  216.                 }
  217.                 else{
  218.                     strutsBean.validazioneDocumenti = false;
  219.                 }
  220.             }
  221.            
  222.             // updateEnabled
  223.             String tmpUpdateEnabled = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_UPDATE_ENABLED);
  224.             if(archiviHelper.isEditModeInProgress() && tmpUpdateEnabled==null){
  225.                 // primo accesso alla servlet
  226.                 strutsBean.updateEnabled = false;
  227.             }
  228.             else{
  229.                 if(ServletUtils.isCheckBoxEnabled(tmpUpdateEnabled)){
  230.                     strutsBean.updateEnabled = true;
  231.                 }
  232.                 else{
  233.                     strutsBean.updateEnabled = false;
  234.                 }
  235.             }
  236.            
  237.             // importPolicyConfig
  238.             String tmpImportDeletePolicyConfig = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_DELETE_POLICY_CONFIG_ENABLED);
  239.             if(archiviHelper.isEditModeInProgress() && tmpImportDeletePolicyConfig==null){
  240.                 // primo accesso alla servlet
  241.                 strutsBean.importDeletePolicyConfig = false;
  242.             }
  243.             else{
  244.                 if(ServletUtils.isCheckBoxEnabled(tmpImportDeletePolicyConfig)){
  245.                     strutsBean.importDeletePolicyConfig = true;
  246.                 }
  247.                 else{
  248.                     strutsBean.importDeletePolicyConfig = false;
  249.                 }
  250.             }
  251.            
  252.             // importPluginConfig
  253.             String tmpImportDeletePluginConfig = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_DELETE_PLUGIN_CONFIG_ENABLED);
  254.             if(archiviHelper.isEditModeInProgress() && tmpImportDeletePluginConfig==null){
  255.                 // primo accesso alla servlet
  256.                 strutsBean.importDeletePluginConfig = false;
  257.             }
  258.             else{
  259.                 if(ServletUtils.isCheckBoxEnabled(tmpImportDeletePluginConfig)){
  260.                     strutsBean.importDeletePluginConfig = true;
  261.                 }
  262.                 else{
  263.                     strutsBean.importDeletePluginConfig = false;
  264.                 }
  265.             }
  266.            
  267.             // importConfig
  268.             String tmpImportConfig = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_CONFIG_ENABLED);
  269.             if(archiviHelper.isEditModeInProgress() && tmpImportConfig==null){
  270.                 // primo accesso alla servlet
  271.                 strutsBean.importConfig = false;
  272.             }
  273.             else{
  274.                 if(ServletUtils.isCheckBoxEnabled(tmpImportConfig)){
  275.                     strutsBean.importConfig = true;
  276.                 }
  277.                 else{
  278.                     strutsBean.importConfig = false;
  279.                 }
  280.             }
  281.            
  282.            
  283.             // importInformationMissing: objectClass
  284.             String tmpClass = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_OBJECT_CLASS);
  285.             if(tmpClass!=null && !"".equals(tmpClass)){
  286.                 strutsBean.importInformationMissingClassObject = Class.forName(tmpClass);
  287.                 String absolutePath = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_OBJECT_FILE_PATH);
  288.                 if(absolutePath==null || "".equals(absolutePath)){
  289.                     throw new ControlStationCoreException("Parametro ["+ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_OBJECT_FILE_PATH
  290.                             +"] non trovato, nonostante sia presente il parametro ["+ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_OBJECT_CLASS
  291.                             +"] con valore: "+tmpClass);
  292.                 }
  293.                 strutsBean.importInformationMissingObject = importerUtils.readImportInformationMissingObjectFile(absolutePath, strutsBean.importInformationMissingClassObject);
  294.             }else{
  295.                 strutsBean.importInformationMissingClassObject = null;
  296.                 strutsBean.importInformationMissingObject = null;
  297.             }
  298.             // importInformationMissing: soggetto
  299.             strutsBean.importInformationMissingSoggettoInput = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_SOGGETTO_INPUT);
  300.             // importInformationMissing: versione
  301.             strutsBean.importInformationMissingVersioneInput = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_VERSIONE_INPUT);
  302.             // Import Information Missing collection
  303.             strutsBean.importInformationMissingCollectionFilePath = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_COLLECTION_FILE_PATH);
  304.             // Import Information Missing object id
  305.             strutsBean.importInformationMissingObjectId = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_OBJECT_ID);
  306.             // importInformationMissing: servizi, modalita' di acquisizione
  307.             strutsBean.importInformationMissingModalitaAcquisizioneInformazioniProtocollo =
  308.                     archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_MODALITA_ACQUISIZIONE_INPUT);
  309.             // importInformationMissing: portTypeImplemented
  310.             strutsBean.importInformationMissingPortTypeImplementedInput =
  311.                     archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_PORT_TYPE_IMPLEMENTED_INPUT);
  312.             // importInformationMissing: accordoServizioParteComune
  313.             strutsBean.importInformationMissingAccordoServizioParteComuneInput = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_ACCORDO_SERVIZIO_PARTE_COMUNE_INPUT);
  314.             // importInformationMissing: accordoCooperazione
  315.             strutsBean.importInformationMissingAccordoCooperazioneInput = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_ACCORDO_COOPERAZIONE_INPUT);
  316.                        
  317.            
  318.    
  319.            
  320.                    
  321.             // File da caricare
  322.             FormFile ff = importerUtils.readFormFile(strutsBean.filePath, form);
  323.        
  324.             archiviHelper.makeMenu();
  325.            
  326.             // Se severita == null, devo visualizzare la pagina con il pulsante
  327.             if(archiviHelper.isEditModeInProgress() &&
  328.                     strutsBean.importInformationMissingModalitaAcquisizioneInformazioniProtocollo == null){
  329.                
  330.                 // setto la barra del titolo
  331.                 String nomeFunzionalita = ArchiviCostanti.LABEL_ARCHIVI_IMPORT;
  332.                 if(deleter){
  333.                     nomeFunzionalita = ArchiviCostanti.LABEL_ARCHIVI_ELIMINA;  
  334.                 }
  335.                 ServletUtils.setPageDataTitle(pd,
  336.                         new Parameter(nomeFunzionalita,null));

  337.                 // preparo i campi
  338.                 List<DataElement> dati = new ArrayList<>();

  339.                 dati.add(modalitaDataElement);
  340.                
  341.                 dati.add(ServletUtils.getDataElementForEditModeFinished());

  342.                 archiviHelper.addImportToDati(dati, strutsBean.validazioneDocumenti, strutsBean.updateEnabled,
  343.                         strutsBean.importDeletePolicyConfig,
  344.                         strutsBean.importDeletePluginConfig,
  345.                         strutsBean.importConfig,
  346.                         showProtocols, protocolli, strutsBean.protocollo,
  347.                         importModes, strutsBean.importMode,
  348.                         importTypes, strutsBean.importType,
  349.                         deleter);
  350.                
  351.                 pd.setDati(dati);

  352.                 pd.setLabelBottoneInvia(labelBottone);
  353.                
  354.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  355.                
  356.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping, ArchiviCostanti.OBJECT_NAME_ARCHIVI_IMPORT,
  357.                         ArchiviCostanti.TIPO_OPERAZIONE_IMPORT);
  358.             }

  359.             // Controlli sui campi immessi
  360.             boolean isOk = archiviHelper.importCheckData(ff, importerUtils, protocolloEffettivo, archiveMode, archiveModeType);
  361.                        
  362.             // Controlli su eventuali import information missing
  363.             boolean convertForGetException = false;
  364.             if(isOk && strutsBean.importInformationMissingObjectId!=null){
  365.                 isOk = archiviHelper.importInformationMissingCheckData(strutsBean.importInformationMissingSoggettoInput, strutsBean.importInformationMissingVersioneInput,
  366.                         strutsBean.importInformationMissingModalitaAcquisizioneInformazioniProtocollo, postBackElementName,
  367.                         strutsBean.importInformationMissingPortTypeImplementedInput,
  368.                         strutsBean.importInformationMissingAccordoServizioParteComuneInput,
  369.                         strutsBean.importInformationMissingAccordoCooperazioneInput);
  370.                 if(!isOk){
  371.                     convertForGetException = true;
  372.                 }
  373.             }
  374.            
  375.             // ImportInformationMissing: portTypes per accordi di servizio parte comune (profilo, correlazione per le varie azioni)
  376.             if(strutsBean.importInformationMissingModalitaAcquisizioneInformazioniProtocollo!=null &&
  377.                     !"".equals(strutsBean.importInformationMissingModalitaAcquisizioneInformazioniProtocollo)){
  378.                 try{
  379.                     strutsBean.importInformationMissingPortTypes =
  380.                             archiviHelper.readInformazioniProtocolloServiziAzioni(strutsBean.importInformationMissingModalitaAcquisizioneInformazioniProtocollo,
  381.                                     protocolloEffettivo, strutsBean.importInformationMissingObject);
  382.                 }catch(Exception e){
  383.                     ControlStationCore.getLog().error(e.getMessage(),e);
  384.                     pd.setMessage(e.getMessage());
  385.                     isOk = false;
  386.                     convertForGetException = false; // forzo la non ricostruzione. C'e' un errore strutturale sul package
  387.                 }
  388.             }
  389.                        
  390.             // ImportInformationMissingInvocazioneServizio
  391.             if(isOk){
  392.                 try{
  393.                     if(!archiviHelper.isEditModeInProgress()){
  394.                         strutsBean.importInformationMissingInvocazioneServizio = archiviHelper.readInvocazioneServizio();
  395.                     }
  396.                     else{
  397.                         strutsBean.importInformationMissingInvocazioneServizio = null;
  398.                     }
  399.                 }catch(Exception e){
  400.                     ControlStationCore.getLog().error(e.getMessage(),e);
  401.                     pd.setMessage(e.getMessage());
  402.                     isOk = false;
  403.                     convertForGetException = false; // forzo la non ricostruzione. C'e' un errore strutturale sul package
  404.                 }
  405.             }
  406.            
  407.             // ImportInformationMissingConnettore
  408.             if(isOk){
  409.                 try{
  410.                     if(!archiviHelper.isEditModeInProgress()){
  411.                         strutsBean.importInformationMissingConnettore = archiviHelper.readConnettore();
  412.                     }
  413.                     else{
  414.                         strutsBean.importInformationMissingConnettore = null;
  415.                     }
  416.                 }catch(Exception e){
  417.                     ControlStationCore.getLog().error(e.getMessage(),e);
  418.                     pd.setMessage(e.getMessage());
  419.                     isOk = false;
  420.                     convertForGetException = false; // forzo la non ricostruzione. C'e' un errore strutturale sul package
  421.                 }
  422.             }
  423.            
  424.             // ImportInformationMissingCredenziali
  425.             if(isOk){
  426.                 try{
  427.                     if(!archiviHelper.isEditModeInProgress()){
  428.                         strutsBean.importInformationMissingCredenziali = archiviHelper.readCredenzialiSA();
  429.                     }
  430.                     else{
  431.                         strutsBean.importInformationMissingCredenziali = null;
  432.                     }
  433.                 }catch(Exception e){
  434.                     ControlStationCore.getLog().error(e.getMessage(),e);
  435.                     pd.setMessage(e.getMessage());
  436.                     isOk = false;
  437.                     convertForGetException = false; // forzo la non ricostruzione. C'e' un errore strutturale sul package
  438.                 }
  439.             }
  440.            
  441.             // MapPlaceHolder          
  442.             MapPlaceholder importInformationMissingPlaceholder = null;
  443.             if(isOk){
  444.                 try{
  445.                     if(!archiviHelper.isEditModeInProgress()){
  446.                         importInformationMissingPlaceholder = archiviHelper.readPlaceholder();
  447.                         if(importInformationMissingPlaceholder!=null){
  448.                             strutsBean.importInformationMissingGlobalPlaceholder.putAll(importInformationMissingPlaceholder);
  449.                         }
  450.                     }
  451.                 }catch(Exception e){
  452.                     ControlStationCore.getLog().error(e.getMessage(),e);
  453.                     pd.setMessage(e.getMessage());
  454.                     isOk = false;
  455.                     convertForGetException = false; // forzo la non ricostruzione. C'e' un errore strutturale sul package
  456.                 }
  457.             }
  458.            
  459.             // Requisiti
  460.             HashMap<String, String> mapRequisitiInput = null;
  461.             HashMap<String, String> mapRequisitiInputStepIncrement = null;
  462.             if(isOk) {
  463.                 try{
  464.                     if(!archiviHelper.isEditModeInProgress()){
  465.                         mapRequisitiInput = archiviHelper.readRequisitiInput();
  466.                         mapRequisitiInputStepIncrement = archiviHelper.readRequisitiStepIncrementInput();
  467.                     }
  468.                 }catch(Exception e){
  469.                     ControlStationCore.getLog().error(e.getMessage(),e);
  470.                     pd.setMessage(e.getMessage());
  471.                     isOk = false;
  472.                     convertForGetException = false; // forzo la non ricostruzione. C'e' un errore strutturale sul package
  473.                 }
  474.             }
  475.            
  476.             // ImportInformationMissingCollection
  477.             ImportInformationMissingCollection importInformationMissingCollection = null;  
  478.             if(strutsBean.importInformationMissingCollectionFilePath!=null){
  479.                 importInformationMissingCollection = importerUtils.readImportInformationMissingCollectionFile(strutsBean.importInformationMissingCollectionFilePath);
  480.             }
  481.             if(isOk){
  482.                 importInformationMissingCollection =
  483.                         importerUtils.updateInformationMissingCheckData(mapRequisitiInput, mapRequisitiInputStepIncrement,
  484.                                 strutsBean.importInformationMissingSoggettoInput,
  485.                                 strutsBean.importInformationMissingVersioneInput,
  486.                                 strutsBean.importInformationMissingPortTypes,
  487.                                 strutsBean.importInformationMissingPortTypeImplementedInput,
  488.                                 strutsBean.importInformationMissingAccordoServizioParteComuneInput,
  489.                                 strutsBean.importInformationMissingAccordoCooperazioneInput,
  490.                                 strutsBean.importInformationMissingInvocazioneServizio,
  491.                                 strutsBean.importInformationMissingConnettore,
  492.                                 strutsBean.importInformationMissingCredenziali,
  493.                                 importInformationMissingPlaceholder,
  494.                                 strutsBean.importInformationMissingCollectionFilePath,
  495.                                 strutsBean.importInformationMissingObjectId,
  496.                                 importInformationMissingCollection);
  497.             }
  498.            
  499.            
  500.             // Step
  501.             if(!archiviHelper.isEditModeInProgress() && isOk){
  502.                 strutsBean.stepCounter.increment();
  503.             }
  504.                        
  505.             // trasformazione in archivio openspcoop2
  506.             Archive archive = null;
  507.             if(isOk || convertForGetException){
  508.                 try{
  509.                     archive = archiviCore.convert(ff.getFileData(), archiveModeType, archiveMode, protocolloEffettivo,strutsBean.validazioneDocumenti,
  510.                             strutsBean.importInformationMissingGlobalPlaceholder);
  511.                 }catch(Exception e){
  512.                     ControlStationCore.logError(e.getMessage(), e);
  513.                     pd.setMessage(e.getMessage());
  514.                     isOk = false;
  515.                 }
  516.             }
  517.            
  518.             // check requisiti wizard
  519.             if(isOk &&
  520.                 archive!=null && archive.getInformationMissing()!=null && archive.getInformationMissing().getWizard()!=null){
  521.                 try{
  522.                     isOk = archiviHelper.checkRequiisitiWizard(archive.getInformationMissing().getWizard());
  523.                 }catch(Exception e){
  524.                     ControlStationCore.logError(e.getMessage(), e);
  525.                     pd.setMessage(e.getMessage());
  526.                     isOk = false;
  527.                 }
  528.             }
  529.            
  530.             // validazione
  531.             ImportInformationMissingException importInformationMissingException = null;
  532.             if(isOk || convertForGetException){
  533.                 try{
  534.                     archiviCore.validateArchive(archive, protocolloEffettivo,
  535.                             strutsBean.validazioneDocumenti, importInformationMissingCollection, userLogin, deleter);
  536.                 }catch(ImportInformationMissingException e){
  537.                     /**ControlStationCore.logError(importInformationMissingException.getMessage(), importInformationMissingException);*/
  538.                     importInformationMissingException = e;
  539.                     isOk = false;
  540.                 }
  541.                 catch(Exception e){
  542.                     ControlStationCore.logError(e.getMessage(), e);
  543.                     pd.setMessage(e.getMessage());
  544.                     isOk = false;
  545.                 }
  546.             }
  547.            
  548.             // finalizeArchive
  549.             if(isOk &&
  550.                 archive!=null){
  551.                 try{
  552.                     archiviCore.finalizeArchive(archive, archiveModeType, archiveMode, protocolloEffettivo,strutsBean.validazioneDocumenti,
  553.                             strutsBean.importInformationMissingGlobalPlaceholder);
  554.                 }catch(Exception e){
  555.                     ControlStationCore.logError(e.getMessage(), e);
  556.                     pd.setMessage(e.getMessage());
  557.                     isOk = false;
  558.                 }
  559.             }
  560.                        
  561.             if (!isOk) {
  562.                
  563.                 // setto la barra del titolo
  564.                 ServletUtils.setPageDataTitle(pd,
  565.                         new Parameter(ArchiviCostanti.LABEL_ARCHIVI_IMPORT,null));

  566.                 // preparo i campi
  567.                 List<DataElement> dati = new ArrayList<>();

  568.                 dati.add(modalitaDataElement);
  569.                
  570.                 dati.add(ServletUtils.getDataElementForEditModeFinished());
  571.                
  572.                 if(importInformationMissingException!=null){
  573.                
  574.                     // Indicazione se ho letto i dati sull'InvocazioneServizio, Connettore
  575.                     boolean readedDatiConnettori = strutsBean.importInformationMissingInvocazioneServizio!=null ||
  576.                             strutsBean.importInformationMissingConnettore!=null || strutsBean.importInformationMissingCredenziali!=null;
  577.                    
  578.                     Wizard wizard = null;
  579.                     if(archive!=null && archive.getInformationMissing()!=null){
  580.                         wizard = archive.getInformationMissing().getWizard();
  581.                     }
  582.                    
  583.                     archiviHelper.addImportInformationMissingToDati(dati, importerUtils, ff,
  584.                             strutsBean.protocollo, strutsBean.importMode, protocolloEffettivo, strutsBean.importType,
  585.                             strutsBean.validazioneDocumenti, strutsBean.updateEnabled,
  586.                             strutsBean.importDeletePolicyConfig,
  587.                             strutsBean.importDeletePluginConfig,
  588.                             strutsBean.importConfig,
  589.                             importInformationMissingCollection, importInformationMissingException,
  590.                             strutsBean.importInformationMissingModalitaAcquisizioneInformazioniProtocollo,strutsBean.importInformationMissingPortTypes,
  591.                             protocolliForModes,readedDatiConnettori,
  592.                             wizard,strutsBean.stepCounter.getStep(),
  593.                             deleter);
  594.                    
  595.                     pd.setLabelBottoneInvia(ArchiviCostanti.LABEL_ARCHIVI_AVANTI);
  596.                 }
  597.                 else{
  598.                     archiviHelper.addImportToDati(dati, strutsBean.validazioneDocumenti, strutsBean.updateEnabled,
  599.                             strutsBean.importDeletePolicyConfig,
  600.                             strutsBean.importDeletePluginConfig,
  601.                             strutsBean.importConfig,
  602.                             showProtocols, protocolli, strutsBean.protocollo,
  603.                             importModes, strutsBean.importMode,
  604.                             importTypes, strutsBean.importType,
  605.                             deleter);
  606.                    
  607.                     pd.setLabelBottoneInvia(labelBottone);
  608.                 }
  609.                
  610.                 pd.setDati(dati);

  611.                 if(pd.getMessage()!=null &&
  612.                     importInformationMissingException==null){
  613.                     pd.setMessage(ArchiviCostanti.LABEL_IMPORT_ERROR_HEADER+StringEscapeUtils.escapeHtml(pd.getMessage()));
  614.                 }
  615.                
  616.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  617.                
  618.                 return ServletUtils.getStrutsForwardEditModeCheckError(mapping, ArchiviCostanti.OBJECT_NAME_ARCHIVI_IMPORT,
  619.                         ArchiviCostanti.TIPO_OPERAZIONE_IMPORT);
  620.             }
  621.                        
  622.            

  623.            
  624.            
  625.            
  626.             List<DataElement> dati = new ArrayList<>();

  627.             dati.add(ServletUtils.getDataElementForEditModeFinished());
  628.            
  629.             /**
  630.             System.out.println("IMPORT COME PROTOCOL["+protocolloEffettivo+"] MODE["+strutsBean.importMode+"] TIPO["+
  631.                     strutsBean.importType+"]");
  632.            
  633.             if(importInformationMissingCollection!=null){
  634.                 System.out.println("SIZE COLLECTION ["+importInformationMissingCollection.size()+"]");
  635.                 Enumeration<String> keys = importInformationMissingCollection.keys();
  636.                 while (keys.hasMoreElements()) {
  637.                     String key = (String) keys.nextElement();
  638.                     ImportInformationMissing i = importInformationMissingCollection.get(key);
  639.                     System.out.println("COLLECTION ["+key
  640.                             +"] soggetti["+i.getSoggetto()+"] versione["+i.getVersione()
  641.                             +"] portTypes["+i.getPortTypes().size()+"]");
  642.                 }
  643.             }
  644.             */
  645.            
  646.             String esito = null;
  647.             if(deleter){
  648.                 esito = archiviCore.deleteArchive(archive, archiveMode, protocolloEffettivo,
  649.                         userLogin, archiviHelper.smista(),
  650.                         strutsBean.importDeletePolicyConfig,
  651.                         strutsBean.importDeletePluginConfig);
  652.             }else{
  653.                 esito = archiviCore.importArchive(archive, archiveMode, protocolloEffettivo,
  654.                         userLogin, archiviHelper.smista(),
  655.                         strutsBean.updateEnabled,
  656.                         strutsBean.importDeletePolicyConfig,
  657.                         strutsBean.importDeletePluginConfig, archiviCore.isConfigurazionePluginsEnabled(),
  658.                         strutsBean.importConfig, nomePddOperativa,
  659.                         archiviHelper);
  660.             }
  661.                                    
  662.             dati.add(modalitaDataElement);
  663.            
  664.             DataElement de = new DataElement();
  665.             de.setLabel("Riepilogo Configurazioni Effettuate");
  666.             de.setType(DataElementType.TITLE);
  667.             dati.add(de);
  668.            
  669.             de = new DataElement();
  670.             de.setLabel("");
  671.             de.setType(DataElementType.TEXT_AREA_NO_EDIT);
  672.             de.setValue(esito);
  673.             de.setName("Resoconto");
  674.             de.setRows(30);
  675.             de.setCols(130);
  676.             dati.add(de);
  677.            
  678.             if(esito!=null && !"".equals(esito)){
  679.                
  680.                 // Salvo resoconto per fornirlo alla servlet
  681.                 ServletUtils.setObjectIntoSession(request, session, esito, ArchiviCostanti.PARAMETRO_DOWNLOAD_RESOCONTO_VALORE);
  682.                
  683.                 DataElement saveAs = new DataElement();
  684.                 saveAs.setValue(ArchiviCostanti.LABEL_DOWNLOAD);
  685.                 saveAs.setType(DataElementType.LINK);
  686.                 saveAs.setUrl(ArchiviCostanti.SERVLET_NAME_RESOCONTO_EXPORT);
  687.                 saveAs.setDisabilitaAjaxStatus();
  688.                 dati.add(saveAs);
  689.             }
  690.            
  691.             pd.disableEditMode();
  692.    
  693.             pd.setDati(dati);
  694.            
  695.             ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  696.            
  697.             return ServletUtils.getStrutsForwardEditModeFinished(mapping, ArchiviCostanti.OBJECT_NAME_ARCHIVI_IMPORT,
  698.                     ArchiviCostanti.TIPO_OPERAZIONE_IMPORT);
  699.            
  700.         } catch (Exception e) {
  701.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  702.                     ArchiviCostanti.OBJECT_NAME_ARCHIVI_IMPORT,
  703.                     ArchiviCostanti.TIPO_OPERAZIONE_IMPORT);
  704.         }
  705.        
  706.     }
  707.    
  708. }