Importer.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.protocol.engine.archive;

import org.openspcoop2.core.config.driver.db.DriverConfigurazioneDB;
import org.openspcoop2.core.registry.driver.db.DriverRegistroServiziDB;
import org.openspcoop2.protocol.basic.registry.ConfigIntegrationReader;
import org.openspcoop2.protocol.basic.registry.RegistryReader;
import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
import org.openspcoop2.protocol.sdk.ConfigurazionePdD;
import org.openspcoop2.protocol.sdk.IProtocolFactory;
import org.openspcoop2.protocol.sdk.archive.Archive;
import org.openspcoop2.protocol.sdk.archive.ArchiveEsitoImport;
import org.openspcoop2.protocol.sdk.archive.ArchiveMode;
import org.openspcoop2.protocol.sdk.archive.ArchiveModeType;
import org.openspcoop2.protocol.sdk.archive.IArchive;
import org.openspcoop2.utils.LoggerWrapperFactory;
import org.openspcoop2.utils.resources.FileSystemUtilities;
import org.openspcoop2.utils.resources.Loader;
import org.slf4j.Logger;

/**
 *  Importer
 *
 * @author Poli Andrea (apoli@link.it)
 * @author $Author$
 * @version $Rev$, $Date$
 */
public class Importer {

	public static void main(String[] args) throws Exception {
		
		Logger log = LoggerWrapperFactory.getLogger(Importer.class);
		
		// Lettura file
		String archiveFile = args[0];
		byte[] archiveBytes = FileSystemUtilities.readBytesFromFile(archiveFile);
		
		// Protocollo
		String protocollo = args[1];
		
		// Mode
		String mode = args[2]; // es. cnipa, openspcoop
		ArchiveMode archiveMode = new ArchiveMode(mode);
		
		// tipoArchivio
		String type = args[3]; // es. *, apc, aps ...
		ArchiveModeType archiveModeType = new ArchiveModeType(type);
		
		// validateDocuments
		boolean validateDocuments = Boolean.parseBoolean(args[4]); 
		
		// userLogin
		String userLogin = args[5];
		
		// nomePddOperativa
		String nomePddOperativa = args[6];
		
		// tipoPddDefault
		String tipoPddDefault = args[7];
		
		// updateAbilitato
		boolean updateAbilitato = Boolean.parseBoolean(args[8]); 
		boolean importPolicyConfig = Boolean.parseBoolean(args[9]); 
		boolean importPluginConfig = Boolean.parseBoolean(args[10]);
		boolean checkExistsPluginConfig = Boolean.parseBoolean(args[11]);
		boolean importConfig = Boolean.parseBoolean(args[12]); 

		// other
		boolean isShowCorrelazioneAsincronaInAccordi = true;
		boolean isShowGestioneWorkflowStatoDocumenti = true;
		boolean isShowAccordiColonnaAzioni = true;
		boolean isAbilitatoControlloUnicitaImplementazioneAccordoPerSoggetto = false;
		boolean isAbilitatoControlloUnicitaImplementazionePortTypePerSoggetto = false;
		boolean isSoggettiApplicativiCredenzialiBasicPermitSameCredentials = false;
		boolean isSoggettiApplicativiCredenzialiSslPermitSameCredentials = false;
		boolean isSoggettiApplicativiCredenzialiPrincipalPermitSameCredentials = false;
		
		// Inizializzazione ProtocolFactoryManager
		ConfigurazionePdD configPdD = new ConfigurazionePdD();
		configPdD.setLoader(new Loader());
		configPdD.setLog(log);
		ProtocolFactoryManager.initializeSingleProtocol(log, configPdD, protocollo);
		
		
		// Inizializzo Reader
		DriverRegistroServiziDB driverRegistroServizi = null; 
		DriverConfigurazioneDB driverConfigurazione = null;
		org.openspcoop2.core.plugins.dao.jdbc.JDBCServiceManager serviceManagerPlugins = null;
		org.openspcoop2.core.controllo_traffico.dao.jdbc.JDBCServiceManager serviceManagerControlloTraffico = null;
		org.openspcoop2.core.allarmi.dao.jdbc.JDBCServiceManager serviceManagerAllarmi = null;
		// TODO INIT
		RegistryReader archiveRegistryReader = new RegistryReader(driverRegistroServizi,log);
		ConfigIntegrationReader archiveConfigIntegrationReader = new ConfigIntegrationReader(driverConfigurazione,log);
		
		
		// trasformazione in archivio openspcoop2
		IProtocolFactory<?> pf = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(protocollo);
		IArchive archiveEngine = pf.createArchive();
		Archive archive = archiveEngine.importArchive(archiveBytes, archiveMode, archiveModeType, archiveRegistryReader, archiveConfigIntegrationReader, validateDocuments,null);
		
		
		// validazione
		ArchiveValidator validator = new ArchiveValidator(archiveRegistryReader);
		ImportInformationMissingCollection importInformationMissingCollection = new ImportInformationMissingCollection();
		validator.validateArchive(archive, protocollo, validateDocuments, importInformationMissingCollection, userLogin, 
				isShowCorrelazioneAsincronaInAccordi, false);
		// TODO: Gestore correttamente le eccezioni
		
		
		// Import
		ArchiveEngine importerEngine = new ArchiveEngine(driverRegistroServizi, driverConfigurazione, 
				serviceManagerPlugins,
				serviceManagerControlloTraffico, 
				serviceManagerAllarmi);
		ImporterArchiveUtils importerArchiveUtils = 
				new ImporterArchiveUtils(importerEngine, log, userLogin, nomePddOperativa, tipoPddDefault,
						isShowGestioneWorkflowStatoDocumenti, updateAbilitato,
						importPolicyConfig, 
						importPluginConfig, checkExistsPluginConfig,
						importConfig);
		ArchiveEsitoImport result = importerArchiveUtils.importArchive(archive, userLogin, 
				isShowAccordiColonnaAzioni,
				isAbilitatoControlloUnicitaImplementazioneAccordoPerSoggetto, 
				isAbilitatoControlloUnicitaImplementazionePortTypePerSoggetto,
				isSoggettiApplicativiCredenzialiBasicPermitSameCredentials,
				isSoggettiApplicativiCredenzialiSslPermitSameCredentials,
				isSoggettiApplicativiCredenzialiPrincipalPermitSameCredentials);
		String resultAsString = archiveEngine.toString(result, archiveMode);
		log.info(resultAsString);
		

	}

}