ImporterUtils.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package org.openspcoop2.web.ctrlstat.servlet.archivi;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import org.apache.commons.lang.StringUtils;
- import org.apache.struts.action.ActionForm;
- import org.apache.struts.upload.FormFile;
- import org.openspcoop2.core.config.Credenziali;
- import org.openspcoop2.core.config.InvocazioneServizio;
- import org.openspcoop2.core.constants.Costanti;
- import org.openspcoop2.core.id.IDAccordo;
- import org.openspcoop2.core.id.IDAccordoCooperazione;
- import org.openspcoop2.core.id.IDSoggetto;
- import org.openspcoop2.core.registry.Connettore;
- import org.openspcoop2.core.registry.PortType;
- import org.openspcoop2.core.registry.Soggetto;
- import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
- import org.openspcoop2.core.registry.driver.FiltroRicercaAccordi;
- import org.openspcoop2.core.registry.driver.FiltroRicercaSoggetti;
- import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
- import org.openspcoop2.core.registry.driver.IDAccordoFactory;
- import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
- import org.openspcoop2.protocol.engine.archive.ImportInformationMissing;
- import org.openspcoop2.protocol.engine.archive.ImportInformationMissingCollection;
- import org.openspcoop2.protocol.information_missing.Wizard;
- import org.openspcoop2.protocol.sdk.IProtocolFactory;
- import org.openspcoop2.protocol.sdk.ProtocolException;
- import org.openspcoop2.protocol.sdk.archive.ArchiveMode;
- import org.openspcoop2.protocol.sdk.archive.ArchiveModeType;
- import org.openspcoop2.protocol.sdk.archive.IArchive;
- import org.openspcoop2.protocol.sdk.archive.ImportMode;
- import org.openspcoop2.protocol.sdk.archive.MapPlaceholder;
- import org.openspcoop2.utils.resources.FileSystemUtilities;
- import org.openspcoop2.utils.serialization.JavaDeserializer;
- import org.openspcoop2.utils.serialization.JavaSerializer;
- import org.openspcoop2.web.ctrlstat.core.SerialiableFormFile;
- import org.openspcoop2.web.ctrlstat.dao.PdDControlStation;
- import org.openspcoop2.web.ctrlstat.servlet.FileUploadForm;
- import org.openspcoop2.web.ctrlstat.servlet.ac.AccordiCooperazioneCore;
- import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCore;
- import org.openspcoop2.web.ctrlstat.servlet.pdd.PddCore;
- import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
- /**
- * ImporterUtils
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class ImporterUtils {
- private SoggettiCore soggettiCore = null;
- private AccordiServizioParteComuneCore aspcCore = null;
- private AccordiCooperazioneCore acCore = null;
- private PddCore pddCore = null;
- public ImporterUtils(ArchiviCore archiviCore) throws Exception{
- this.soggettiCore = new SoggettiCore(archiviCore);
- this.aspcCore = new AccordiServizioParteComuneCore(archiviCore);
- this.acCore = new AccordiCooperazioneCore(archiviCore);
- this.pddCore = new PddCore(archiviCore);
- }
- public List<String> getIdSoggetti(List<String> protocolli,String importMode,
- String protocolloMissingInput,String tipoPdDMissingInput, Wizard wizard, ArchiviHelper helper) throws Exception{
- List<String> listIdSoggetti = new ArrayList<>();
-
- List<String> protocolliDaScorrere = new ArrayList<>();
- if(wizard!=null && wizard.getRequisiti()!=null && wizard.getRequisiti().sizeProtocolloList()>0){
- for (int i = 0; i < wizard.getRequisiti().sizeProtocolloList(); i++) {
- protocolliDaScorrere.add(wizard.getRequisiti().getProtocollo(i).getNome());
- }
- }
- else{
- protocolliDaScorrere.addAll(protocolli);
- }
-
- for (int i = 0; i < protocolliDaScorrere.size(); i++) {
- String protocollo = protocolliDaScorrere.get(i);
- if(ArchiviCostanti.PARAMETRO_ARCHIVI_PROTOCOLLO_UNDEFINDED.equals(protocollo) == false){
-
- IProtocolFactory<?> pf = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(protocollo);
- IArchive archiveEngine = pf.createArchive();
- List<ImportMode> importModesByProtocol = archiveEngine.getImportModes();
- if(importModesByProtocol.contains(new ImportMode(importMode))){
-
- List<String> tipi = this.soggettiCore.getTipiSoggettiGestitiProtocollo(protocollo);
- for (int j = 0; j < tipi.size(); j++) {
- String tipo = tipi.get(j);
- FiltroRicercaSoggetti filtro = new FiltroRicercaSoggetti();
- filtro.setTipo(tipo);
- List<IDSoggetto> idSoggetti = this.soggettiCore.getAllIdSoggettiRegistro(filtro);
- for (int k = 0; k < idSoggetti.size(); k++) {
- IDSoggetto id = idSoggetti.get(k);
- listIdSoggetti.add(id.getTipo()+"/"+id.getNome());
- }
- }
-
- }
- }
- }
-
- if(protocolloMissingInput==null && tipoPdDMissingInput==null){
-
- if(listIdSoggetti.size()<=0){
- throw new ProtocolException("Non risulta configurato alcun soggetto. Tale configurazione è richiesta per procedere con l'importazione");
- }
-
- if(listIdSoggetti.size()!=1)
- listIdSoggetti.add(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_SOGGETTO_INPUT_UNDEFINDED);
- java.util.Collections.sort(listIdSoggetti);
- return listIdSoggetti;
- }
-
- // filtro per protocollo e/o tipoPdD
- List<String> listIdSoggettiFiltrati = new ArrayList<>();
- for (String tipoNome : listIdSoggetti) {
- String [] tmp = tipoNome.split("/");
- String tipo = tmp[0];
- String nome = tmp[1];
- IDSoggetto idSoggetto = new IDSoggetto(tipo, nome);
- if(protocolloMissingInput!=null){
- if(!protocolloMissingInput.equals(this.soggettiCore.getProtocolloAssociatoTipoSoggetto(tipo))){
- continue;
- }
- }
- if(tipoPdDMissingInput!=null){
- Soggetto sog = this.soggettiCore.getSoggettoRegistro(idSoggetto);
- if(sog.getPortaDominio()==null){
- continue;
- }
- PdDControlStation pdd = this.pddCore.getPdDControlStation(sog.getPortaDominio());
- if(!tipoPdDMissingInput.equals(pdd.getTipo())){
- continue;
- }
- }
- listIdSoggettiFiltrati.add(tipoNome);
- }
-
- String criteri = "";
- if(protocolloMissingInput!=null){
- criteri+=" "+Costanti.LABEL_PARAMETRO_PROTOCOLLO_DI+":"+helper.getLabelProtocollo(protocolloMissingInput);
- }
- if(tipoPdDMissingInput!=null){
- criteri+=" tipoPdDAssociata:"+tipoPdDMissingInput;
- }
-
- if(listIdSoggettiFiltrati.size()<=0){
- throw new ProtocolException("Non risulta configurato alcun soggetto che soddisfa i seguenti requisiti: "+criteri+". Tale configurazione è richiesta per procedere con l'importazione");
- }
-
- if(listIdSoggettiFiltrati.size()!=1)
- listIdSoggettiFiltrati.add(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_SOGGETTO_INPUT_UNDEFINDED);
- java.util.Collections.sort(listIdSoggettiFiltrati);
- return listIdSoggettiFiltrati;
- }
-
- public List<String> getIdAccordiServizioParteComune(List<String> protocolli,String importMode,
- String protocolloMissingInput, ArchiviHelper helper) throws Exception{
- List<String> listIdAccordiServizioParteComune = new ArrayList<>();
- for (int i = 0; i < protocolli.size(); i++) {
- String protocollo = protocolli.get(i);
-
- if(ArchiviCostanti.PARAMETRO_ARCHIVI_PROTOCOLLO_UNDEFINDED.equals(protocollo) == false){
-
- if(protocolloMissingInput!=null){
- if(protocolloMissingInput.equals(protocollo)==false) {
- continue;
- }
- }
-
- IProtocolFactory<?> pf = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(protocollo);
- IArchive archiveEngine = pf.createArchive();
- List<ImportMode> importModesByProtocol = archiveEngine.getImportModes();
- if(importModesByProtocol.contains(new ImportMode(importMode))){
-
- List<String> tipi = this.soggettiCore.getTipiSoggettiGestitiProtocollo(protocollo);
- for (int j = 0; j < tipi.size(); j++) {
- String tipo = tipi.get(j);
- FiltroRicercaAccordi filtro = new FiltroRicercaAccordi();
- filtro.setTipoSoggettoReferente(tipo);
- try{
- List<IDAccordo> idAccordi = this.aspcCore.getAllIdAccordiServizio(filtro);
- for (int k = 0; k < idAccordi.size(); k++) {
- listIdAccordiServizioParteComune.add(IDAccordoFactory.getInstance().getUriFromIDAccordo(idAccordi.get(k)));
- }
- }catch(DriverRegistroServiziNotFound dNotFound){
- // ignore
- }
- }
-
- }
- }
- }
-
- if(listIdAccordiServizioParteComune.size()<=0){
- if(protocolloMissingInput==null){
- throw new ProtocolException("Non risulta configurata alcuna API. Tale configurazione è richiesta per procedere con l'importazione");
- }
- else {
- throw new ProtocolException("Non risulta configurata alcuna API ("+Costanti.LABEL_PARAMETRO_PROTOCOLLO_DI+": "+helper.getLabelProtocollo(protocolloMissingInput)
- +"). Tale configurazione è richiesta per procedere con l'importazione");
- }
- }
-
- if(listIdAccordiServizioParteComune.size()!=1)
- listIdAccordiServizioParteComune.add(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_ACCORDO_INPUT_UNDEFINDED);
- java.util.Collections.sort(listIdAccordiServizioParteComune);
- return listIdAccordiServizioParteComune;
-
- }
-
- public List<String> getIdAccordiCooperazione(List<String> protocolli,String importMode,
- String protocolloMissingInput, ArchiviHelper helper) throws Exception{
- List<String> listIdAccordiCooperazione = new ArrayList<>();
- for (int i = 0; i < protocolli.size(); i++) {
- String protocollo = protocolli.get(i);
- if(ArchiviCostanti.PARAMETRO_ARCHIVI_PROTOCOLLO_UNDEFINDED.equals(protocollo) == false){
-
- if(protocolloMissingInput!=null){
- if(protocolloMissingInput.equals(protocollo)==false) {
- continue;
- }
- }
-
- IProtocolFactory<?> pf = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(protocollo);
- IArchive archiveEngine = pf.createArchive();
- List<ImportMode> importModesByProtocol = archiveEngine.getImportModes();
- if(importModesByProtocol.contains(new ImportMode(importMode))){
-
- List<String> tipi = this.soggettiCore.getTipiSoggettiGestitiProtocollo(protocollo);
- for (int j = 0; j < tipi.size(); j++) {
- String tipo = tipi.get(j);
- FiltroRicercaAccordi filtro = new FiltroRicercaAccordi();
- filtro.setTipoSoggettoReferente(tipo);
- try{
- List<IDAccordoCooperazione> idAccordi = this.acCore.getAllIdAccordiCooperazione(filtro);
- for (int k = 0; k < idAccordi.size(); k++) {
- listIdAccordiCooperazione.add(IDAccordoCooperazioneFactory.getInstance().getUriFromIDAccordo(idAccordi.get(k)));
- }
- }catch(DriverRegistroServiziNotFound dNotFound){
- // ignore
- }
- }
-
- }
- }
- }
-
- if(listIdAccordiCooperazione.size()<=0){
- if(protocolloMissingInput==null){
- throw new ProtocolException("Non risulta configurato alcun Accordo di Cooperazione. Tale configurazione è richiesta per procedere con l'importazione");
- }
- else {
- throw new ProtocolException("Non risulta configurato alcun Accordo di Cooperazione ("+Costanti.LABEL_PARAMETRO_PROTOCOLLO_DI+": "+helper.getLabelProtocollo(protocolloMissingInput)
- +"). Tale configurazione è richiesta per procedere con l'importazione");
- }
- }
-
- if(listIdAccordiCooperazione.size()!=1)
- listIdAccordiCooperazione.add(ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_ACCORDO_INPUT_UNDEFINDED);
- java.util.Collections.sort(listIdAccordiCooperazione);
- return listIdAccordiCooperazione;
-
- }
- public Map<String,String> getImportModesWithProtocol(List<String> protocolli) throws ProtocolException{
- Map<String,String> importModes = new HashMap<>();
- for (int i = 0; i < protocolli.size(); i++) {
- String protocolName = protocolli.get(i);
- if(ArchiviCostanti.PARAMETRO_ARCHIVI_PROTOCOLLO_UNDEFINDED.equals(protocolName)==false){
- IProtocolFactory<?> pf = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(protocolName);
- IArchive archiveEngine = pf.createArchive();
- List<ImportMode> importModesByProtocol = archiveEngine.getImportModes();
- for (ImportMode imp : importModesByProtocol) {
- if(importModes.containsKey(imp.toString())==false){
- importModes.put(imp.toString(),protocolName);
- }
- }
- }
- }
- return importModes;
- }
- public List<ArchiveModeType> getImportModeTypes(ArchiveMode mode,String protocol) throws ProtocolException{
- IProtocolFactory<?> pf = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(protocol);
- IArchive archiveEngine = pf.createArchive();
- return archiveEngine.getMappingTypesExtensions(mode).getAllTypes();
- }
- public List<String> getValidExtensions(ArchiveModeType type,ArchiveMode mode,String protocol) throws ProtocolException{
- IProtocolFactory<?> pf = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(protocol);
- IArchive archiveEngine = pf.createArchive();
- return archiveEngine.getMappingTypesExtensions(mode).mappingTypeToExts(type);
- }
- private void writeSerializeObject(File tmpF,Object object) throws Exception{
- JavaSerializer javaSerializer = new JavaSerializer();
- FileOutputStream fout = null;
- try{
- fout = new FileOutputStream(tmpF);
- javaSerializer.writeObject(object, fout);
- }
- finally{
- try{
- if(fout!=null){
- fout.flush();
- fout.close();
- }
- }catch(Exception eClose){
- // close
- }
- }
- }
- @SuppressWarnings("unchecked")
- private <T> T readObject(File f,Class<T> c,boolean deleteFile) throws Exception{
- FileInputStream fis = null;
- JavaDeserializer javaDeserializer = new JavaDeserializer();
- try{
- fis = new FileInputStream(f);
- return (T) javaDeserializer.readObject(fis, c);
- }finally{
- try{
- if(fis!=null){
- fis.close();
- }
- }catch(Exception eClose){
- // close
- }
- if(deleteFile){
- try{
- if(!f.delete()) {
- // ignore
- }
- }catch(Exception e){
- // ignore
- }
- }
- }
- }
- public File writeFormFile(String sessionId,FormFile ff) throws Exception{
- File tmpF = FileSystemUtilities.createTempFile(sessionId+"-"+ff.getFileName(), "tmp");
- this.writeSerializeObject(tmpF, ff);
- return tmpF;
- }
- public FormFile readFormFile(String filePath,ActionForm form) throws Exception{
- FormFile ff = null;
- if(StringUtils.isNotEmpty(filePath)){
- File f = new File(filePath);
- ff = this.readObject(f, FormFile.class, true);
- }else{
- FileUploadForm fileUpload = (FileUploadForm) form;
- ff = fileUpload.getTheFile();
- }
- return (ff!=null && !(ff instanceof SerialiableFormFile) ) ? new SerialiableFormFile(ff) : ff;
- }
- public File writeImportInformationMissingCollectionFile(String sessionId,ImportInformationMissingCollection importInformationMissingCollection) throws Exception{
- File tmpF = FileSystemUtilities.createTempFile(sessionId+"-importInformationMissingCollection", "tmp");
- this.writeSerializeObject(tmpF, importInformationMissingCollection);
- return tmpF;
- }
- public File writeImportInformationMissingObjectFile(String sessionId,Object object) throws Exception{
- File tmpF = FileSystemUtilities.createTempFile(sessionId+"-importInformationMissingObject", "tmp");
- this.writeSerializeObject(tmpF, object);
- return tmpF;
- }
- public ImportInformationMissingCollection readImportInformationMissingCollectionFile(String filePath) throws Exception{
- if(StringUtils.isNotEmpty(filePath)){
- File f = new File(filePath);
- return this.readObject(f, ImportInformationMissingCollection.class, true);
- }
- return null;
- }
- public <T> T readImportInformationMissingObjectFile(String filePath,Class<T> classObject) throws Exception{
- if(StringUtils.isNotEmpty(filePath)){
- File f = new File(filePath);
- return this.readObject(f, classObject, true);
- }
- return null;
- }
- public ImportInformationMissingCollection updateInformationMissingCheckData(
- HashMap<String, String> mapRequisitiInput, HashMap<String, String> mapRequisitiInputStepIncrement,
- String importInformationMissing_soggettoInput,String importInformationMissing_versioneInput,
- List<PortType> importInformationMissing_portTypes, String importInformationMissing_portTypeImplementedInput,
- String importInformationMissing_accordoServizioParteComuneInput,String importInformationMissing_accordoCooperazioneInput,
- InvocazioneServizio importInformationMissing_invocazioneServizio, Connettore importInformationMissing_connettore,
- Credenziali importInformationMissing_credenziali, MapPlaceholder importInformationMissing_placeholder,
- String importInformationMissingCollectionFilePath,String importInformationMissingObjectId,
- ImportInformationMissingCollection importInformationMissingCollection) throws Exception{
- // importInformationMissing: soggetto
- IDSoggetto idSoggetto = null;
- if(importInformationMissing_soggettoInput!=null &&
- !"".equals(importInformationMissing_soggettoInput) &&
- !ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_SOGGETTO_INPUT_UNDEFINDED.equals(importInformationMissing_soggettoInput) ) {
- String[]splitSoggetto = importInformationMissing_soggettoInput.split("/");
- idSoggetto = new IDSoggetto(splitSoggetto[0].trim(), splitSoggetto[1].trim());
- }
- // importInformationMissing: versione
- Integer versione = null;
- if(importInformationMissing_versioneInput!=null){
- try{
- versione = Integer.parseInt(importInformationMissing_versioneInput);
- }catch(Exception e){
- // ignore
- }
- }
- // importInformationMissing: accordoServizioParteComune
- IDAccordo idAccordoServizioParteComune = null;
- if(importInformationMissing_accordoServizioParteComuneInput!=null &&
- !"".equals(importInformationMissing_accordoServizioParteComuneInput) &&
- !ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_ACCORDO_INPUT_UNDEFINDED.equals(importInformationMissing_accordoServizioParteComuneInput) ) {
- idAccordoServizioParteComune = IDAccordoFactory.getInstance().getIDAccordoFromUri(importInformationMissing_accordoServizioParteComuneInput.trim());
- }
-
- // importInformationMissing: accordoCooperazione
- IDAccordoCooperazione idAccordoCooperazione = null;
- if(importInformationMissing_accordoCooperazioneInput!=null &&
- !"".equals(importInformationMissing_accordoCooperazioneInput) &&
- !ArchiviCostanti.PARAMETRO_ARCHIVI_IMPORT_INFO_MISSING_ACCORDO_INPUT_UNDEFINDED.equals(importInformationMissing_accordoCooperazioneInput) ) {
- idAccordoCooperazione = IDAccordoCooperazioneFactory.getInstance().getIDAccordoFromUri(importInformationMissing_accordoCooperazioneInput.trim());
- }
-
- // Import Information Missing
- ImportInformationMissing importInformationMissing = null;
- if(importInformationMissingObjectId!=null){
- if(importInformationMissingCollection!=null){
- importInformationMissing = importInformationMissingCollection.remove(importInformationMissingObjectId);
- }else{
- importInformationMissingCollection = new ImportInformationMissingCollection();
- }
- if(importInformationMissing==null){
- importInformationMissing = new ImportInformationMissing();
- }
- if(mapRequisitiInput!=null) {
- importInformationMissing.setRequisitiInput(mapRequisitiInput);
- }
- if(mapRequisitiInputStepIncrement!=null) {
- importInformationMissing.setRequisitiInputStepIncrement(mapRequisitiInputStepIncrement);
- }
- if(idSoggetto!=null){
- importInformationMissing.setSoggetto(idSoggetto);
- }
- if(versione!=null){
- importInformationMissing.setVersione(versione);
- }
- if(importInformationMissing_portTypes!=null){
- importInformationMissing.setPortTypes(importInformationMissing_portTypes);
- }
- if(importInformationMissing_portTypeImplementedInput!=null){
- importInformationMissing.setPortTypeImplemented(importInformationMissing_portTypeImplementedInput);
- }
- if(idAccordoServizioParteComune!=null){
- importInformationMissing.setIdAccordoServizioParteComune(idAccordoServizioParteComune);
- }
- if(idAccordoCooperazione!=null){
- importInformationMissing.setIdAccordoCooperazione(idAccordoCooperazione);
- }
- if(importInformationMissing_invocazioneServizio!=null){
- importInformationMissing.setInvocazioneServizio(importInformationMissing_invocazioneServizio);
- }
- if(importInformationMissing_connettore!=null){
- importInformationMissing.setConnettore(importInformationMissing_connettore);
- }
- if(importInformationMissing_credenziali!=null){
- importInformationMissing.setCredenziali(importInformationMissing_credenziali);
- }
- if(importInformationMissing_placeholder!=null){
- importInformationMissing.setInputPlaceholder(importInformationMissing_placeholder);
- }
- importInformationMissingCollection.add(importInformationMissingObjectId, importInformationMissing);
- }
- return importInformationMissingCollection;
- }
-
- }