EsitiPropertiesSQLInitializer.java

/*
 * GovWay - A customizable API Gateway 
 * https://govway.org
 * 
 * Copyright (c) 2005-2024 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.utils;

import java.util.List;

import org.openspcoop2.core.constants.CostantiDB;
import org.openspcoop2.utils.LoggerWrapperFactory;
import org.openspcoop2.utils.resources.FileSystemUtilities;
import org.openspcoop2.utils.resources.Loader;
import org.slf4j.Logger;

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

	private static Logger log = LoggerWrapperFactory.getLogger(EsitiPropertiesSQLInitializer.class);
	
	public static void main(String[] args) throws Exception {
		
		String file = "/var/tmp/ArchivioTransazioni_data.sql";
		if(args.length>0) {
			file = args[0];
		}
		
		EsitiProperties.initialize(null, log, new Loader(), null);
		
		EsitiProperties esitiProperties = EsitiProperties.getInstance(log, EsitiProperties.NO_PROTOCOL_CONFIG);
		
		StringBuilder sbInit = new StringBuilder();
		
		String completateConSuccesso = "Completata con Successo";
		String faultApplicativo = "Fault Applicativo";
		String richiestaScartata = "Richiesta Scartata";
		String erroriConsegna = "Errore di Consegna";
		String autorizzazioneNegata = "Autorizzazione Negata";
		String policyViolata = "Policy Controllo Traffico Violate";
		String erroriIM = "Errori Servizio IntegrationManager/MessageBox";
		String erroriRichiesta = "Errori Processamento Richiesta";
		String erroriRisposta = "Errori Processamento Risposta";
		String erroreGenerico = "Errore Generico";
		String erroreClientNonDisponibile = "Errore Client Indisponibile";
		
		int completateConSuccesso_code = 1;
		int faultApplicativo_code = 2;
		int richiestaScartata_code = 3;
		int erroriConsegna_code = 4;
		int autorizzazioneNegata_code = 5;
		int policyViolata_code = 6;
		int erroriIM_code = 7;
		int erroriRichiesta_code = 8;
		int erroriRisposta_code = 9;
		int erroreGenerico_code = 10;
		int erroreClientNonDisponibile_code = 11;
		
		sbInit.append("-- classe esiti\n");
		sbInit.append(buildClassInsert(completateConSuccesso_code, completateConSuccesso));
		sbInit.append("\n");
		sbInit.append(buildClassInsert(faultApplicativo_code, faultApplicativo));
		sbInit.append("\n");
		sbInit.append(buildClassInsert(richiestaScartata_code, richiestaScartata));
		sbInit.append("\n");
		sbInit.append(buildClassInsert(erroriConsegna_code, erroriConsegna));
		sbInit.append("\n");
		sbInit.append(buildClassInsert(autorizzazioneNegata_code, autorizzazioneNegata));
		sbInit.append("\n");
		sbInit.append(buildClassInsert(policyViolata_code, policyViolata));
		sbInit.append("\n");
		sbInit.append(buildClassInsert(erroriIM_code, erroriIM));
		sbInit.append("\n");
		sbInit.append(buildClassInsert(erroriRichiesta_code, erroriRichiesta));
		sbInit.append("\n");
		sbInit.append(buildClassInsert(erroriRisposta_code, erroriRisposta));
		sbInit.append("\n");
		sbInit.append(buildClassInsert(erroreGenerico_code, erroreGenerico));
		sbInit.append("\n");
		sbInit.append(buildClassInsert(erroreClientNonDisponibile_code, erroreClientNonDisponibile));
		sbInit.append("\n");

		
		sbInit.append("\n");
		sbInit.append("-- esiti\n");
		List<Integer> codes = esitiProperties.getEsitiCode();
		for (Integer code : codes) {
			
			int classCode = -1;
			if(esitiProperties.getEsitiCodeOk_senzaFaultApplicativo().contains(code)) {
				classCode = completateConSuccesso_code; // Completata con Successo
			}
			else if(esitiProperties.getEsitiCodeFaultApplicativo().contains(code)) {
				classCode = faultApplicativo_code; // Fault Applicativo
			}
			else if(esitiProperties.getEsitiCodeRichiestaScartate().contains(code)) {
				classCode = richiestaScartata_code; // Richiesta Scartata
			}
			else if(esitiProperties.getEsitiCodeErroriConsegna().contains(code)) {
				classCode = erroriConsegna_code; // Errore di Consegna
			}
			else if(esitiProperties.getEsitiCodeAutorizzazioneNegata().contains(code)) {
				classCode = autorizzazioneNegata_code; // Autorizzazione Negata
			}
			else if(esitiProperties.getEsitiCodeControlloTrafficoPolicyViolate().contains(code)) {
				classCode = policyViolata_code; // Policy Controllo Traffico Violate
			}
			else if(esitiProperties.getEsitiCodeServizioIntegrationManager().contains(code)) {
				classCode = erroriIM_code; // Errori Servizio I.M. MessageBox
			}
			else if(esitiProperties.getEsitiCodeErroriProcessamentoRichiesta().contains(code)) {
				classCode = erroriRichiesta_code; // Errori Processamento Richiesta
			}
			else if(esitiProperties.getEsitiCodeErroriProcessamentoRisposta().contains(code)) {
				classCode = erroriRisposta_code; // Errori Processamento Risposta
			}
			else if(esitiProperties.getEsitiCodeErroriClientNonDisponibile().contains(code)) {
				classCode = erroreClientNonDisponibile_code; // Errore Client Indisponibile
			}
			else if(esitiProperties.getEsitiCodeErroriGenerici().contains(code)) {
				classCode = erroreGenerico_code; // Errore Generico
			}
			else {
				throw new Exception("Classificazione del codice '"+code+"' non riuscita");
			}
						
			StringBuilder sb = new StringBuilder("INSERT INTO ");
			sb.append(CostantiDB.TRANSAZIONI_ESITI);
			sb.append(" (govway_status, govway_status_key, govway_status_detail, govway_status_description, govway_status_class) VALUES ( ");
			sb.append(code);
			sb.append(" , ");
			sb.append("'").append(esitiProperties.getEsitoName(code).replaceAll("'", "''")).append("'");
			sb.append(" , ");
			sb.append("'").append(esitiProperties.getEsitoLabel(code).replaceAll("'", "''")).append("'");
			sb.append(" , ");
			sb.append("'").append(esitiProperties.getEsitoDescription(code).replaceAll("'", "''")).append("'");
			sb.append(" , ");
			sb.append("(select id from ").append(CostantiDB.TRANSAZIONI_CLASSE_ESITI).append(" WHERE govway_status="+classCode+")");
			sb.append(" );");
			
			sbInit.append(sb.toString());
			sbInit.append("\n");
		}
		

		FileSystemUtilities.writeFile(file, sbInit.toString().getBytes());
		System.out.println("Script di inizializzazione serializzato in '"+file+"'");

		
	}
	
	private static String buildClassInsert(int code, String detail) {
		StringBuilder sb = new StringBuilder("INSERT INTO ");
		sb.append(CostantiDB.TRANSAZIONI_CLASSE_ESITI);
		sb.append(" (govway_status, govway_status_detail) VALUES ( ");
		sb.append(code);
		sb.append(" , ");
		sb.append("'").append(detail).append("'");
		sb.append(" );");
		return sb.toString();
	}

}