ConnettoreAPIHelper.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.core.config.rs.server.api.impl.erogazioni;

import java.util.HashMap;
import java.util.Map;

import org.openspcoop2.core.config.Connettore;
import org.openspcoop2.core.config.ServizioApplicativo;
import org.openspcoop2.core.config.constants.StatoFunzionalita;
import org.openspcoop2.core.config.rs.server.model.ConnettoreEnum;
import org.openspcoop2.core.config.rs.server.model.ConnettoreErogazione;
import org.openspcoop2.core.config.rs.server.model.ConnettoreFruizione;
import org.openspcoop2.core.config.rs.server.model.OneOfApplicativoServerConnettore;
import org.openspcoop2.core.config.rs.server.model.OneOfConnettoreErogazioneConnettore;
import org.openspcoop2.core.config.rs.server.model.OneOfConnettoreFruizioneConnettore;
import org.openspcoop2.core.constants.TipiConnettore;

/**
 * ConnettoreAPIHelper
 * 
 * @author $Author$
 * @version $Rev$, $Date$
 * 
 */
public class ConnettoreAPIHelper {

	public static String getUrlConnettore(ServizioApplicativo sa, boolean isRidefinito) throws Exception {
		if(isRidefinito) {
			return "Connettori ridefiniti nei gruppi";
		}

		return getUrlConnettore(sa.getInvocazioneServizio().getConnettore().getProperties(), sa.getInvocazioneServizio().getConnettore().getTipo(), sa.getInvocazioneServizio().getConnettore().getCustom(), sa.getInvocazioneServizio().getGetMessage().equals(StatoFunzionalita.ABILITATO));
	}

	private static String getUrlConnettore(Map<String, String> properties, String tipo, Boolean custom, boolean isMessageBox) throws Exception {
		IConnettoreApiHelper helper = ConnettoreAPIHelper.getHelper(tipo, custom, isMessageBox);
		
		if(helper == null) return null;
		return helper.getUrlConnettore(properties, tipo);
	}

	private static String CUSTOM_KEY = "CUSTOM";
	private static Map<String, IConnettoreApiHelper> helpers;
	private static Map<ConnettoreEnum, IConnettoreApiHelper> helpersByEnum;
	
	private static synchronized void initHelper() {
		if(helpers== null) {
			helpers = new HashMap<>();
			ConnettoreHTTPApiHelper connHttpApiHelper = new ConnettoreHTTPApiHelper();
			helpers.put(TipiConnettore.HTTP.toString(), connHttpApiHelper);
			helpers.put(TipiConnettore.HTTPS.toString(), connHttpApiHelper);
			helpers.put(TipiConnettore.FILE.toString(), new ConnettoreFileApiHelper());
			helpers.put(TipiConnettore.JMS.toString(), new ConnettoreJmsApiHelper());
			helpers.put(TipiConnettore.NULL.toString(), new ConnettoreNullApiHelper());
			helpers.put(TipiConnettore.NULLECHO.toString(), new ConnettoreEchoApiHelper());
			helpers.put(TipiConnettore.DISABILITATO.toString(), new ConnettoreMessageBoxApiHelper());
			helpers.put(CUSTOM_KEY, new ConnettorePluginApiHelper());
		}
	}
	
	private static IConnettoreApiHelper getHelper(String tipo, Boolean custom, boolean isMessageBox) throws Exception {
		
		if(helpers== null) {
			initHelper();
		}
		
		if(helpers.containsKey(tipo)) {
			
			IConnettoreApiHelper iConnettoreApiHelper = helpers.get(tipo);
			if(iConnettoreApiHelper instanceof ConnettoreMessageBoxApiHelper && !isMessageBox) {
				return null; //Connettore disabilitato
			}
			return iConnettoreApiHelper;
		} else if(custom && helpers.containsKey(CUSTOM_KEY)) {
			return helpers.get(CUSTOM_KEY);
		} else {
			return null;
//			throw new Exception("Connettore tipo ["+tipo+"] custom ["+custom+"] non supportato");
		}
	}

	private static synchronized void initHelperByEnum() {
		if(helpersByEnum== null) {
			helpersByEnum = new HashMap<>();
			helpersByEnum.put(ConnettoreEnum.HTTP, new ConnettoreHTTPApiHelper());
			helpersByEnum.put(ConnettoreEnum.FILE, new ConnettoreFileApiHelper());
			helpersByEnum.put(ConnettoreEnum.JMS, new ConnettoreJmsApiHelper());
			helpersByEnum.put(ConnettoreEnum.NULL, new ConnettoreNullApiHelper());
			helpersByEnum.put(ConnettoreEnum.ECHO, new ConnettoreEchoApiHelper());
			helpersByEnum.put(ConnettoreEnum.PLUGIN, new ConnettorePluginApiHelper());
			helpersByEnum.put(ConnettoreEnum.MESSAGE_BOX, new ConnettoreMessageBoxApiHelper());
		}
	}
	
	private static IConnettoreApiHelper getHelper(ConnettoreEnum tipo) throws Exception {
		
		if(helpersByEnum== null) {
			initHelperByEnum();
		}
		
		if(helpersByEnum.containsKey(tipo)) {
			return helpersByEnum.get(tipo);
		} else {
			throw new Exception("Connettore tipo ["+tipo+"] non supportato");
		}
	}

	public static String getUrlConnettore(org.openspcoop2.core.registry.Connettore connettore, boolean isRidefinito) throws Exception {
		if(isRidefinito) {
			return "Connettori ridefiniti nei gruppi";
		}

		if(connettore == null) return null;
		
		boolean isMessageBox = false; //FRUIZIONI NO MSG BOX
		return getUrlConnettore(connettore.getProperties(), connettore.getTipo(), connettore.getCustom(), isMessageBox);
	}

	public static final ConnettoreErogazione buildConnettoreErogazione(ServizioApplicativo sa) throws Exception {
		ConnettoreErogazione connettoreErogazione = new ConnettoreErogazione();
		connettoreErogazione.setConnettore(ConnettoreAPIHelper.getConnettoreErogazione(sa));
		return connettoreErogazione;
	}
	public static final ConnettoreFruizione buildConnettoreFruizione(org.openspcoop2.core.registry.Connettore connettore) throws Exception {
		ConnettoreFruizione connettoreFruizione = new ConnettoreFruizione();
		connettoreFruizione.setConnettore(ConnettoreAPIHelper.getConnettoreFruizione(connettore));
		return connettoreFruizione;
	}

	private static OneOfConnettoreFruizioneConnettore getConnettoreFruizione(
			org.openspcoop2.core.registry.Connettore connettore) throws Exception {
		IConnettoreApiHelper helper = ConnettoreAPIHelper.getHelper(connettore.getTipo(), connettore.getCustom(), false); //MessageBox disabilitato in fruizioni
		
		if(helper == null) return null;
		return helper.buildConnettoreFruizione(connettore.getProperties(), connettore.getTipo());
	}

	private static OneOfConnettoreErogazioneConnettore getConnettoreErogazione(ServizioApplicativo sa) throws Exception {
		IConnettoreApiHelper helper = ConnettoreAPIHelper.getHelper(sa.getInvocazioneServizio().getConnettore().getTipo(), sa.getInvocazioneServizio().getConnettore().getCustom(), sa.getInvocazioneServizio().getGetMessage().equals(StatoFunzionalita.ABILITATO));
		
		if(helper == null) return null;
		return helper.buildConnettoreErogazione(sa);
	}

	public static OneOfApplicativoServerConnettore getConnettoreApplicativoServer(ServizioApplicativo sa) throws Exception {
		IConnettoreApiHelper helper = ConnettoreAPIHelper.getHelper(sa.getInvocazioneServizio().getConnettore().getTipo(), sa.getInvocazioneServizio().getConnettore().getCustom(), sa.getInvocazioneServizio().getGetMessage().equals(StatoFunzionalita.ABILITATO));
		
		if(helper == null) return null;
		return helper.buildConnettoreApplicativoServer(sa);
	}

	public static boolean connettoreCheckData(OneOfApplicativoServerConnettore connettore, ErogazioniEnv erogEnv, boolean erogazione) throws Exception {
		IConnettoreApiHelper helper = ConnettoreAPIHelper.getHelper(connettore.getTipo());
		
		if(helper == null) return true;
		return helper.connettoreCheckData(connettore, erogEnv, erogazione);
	}

	public static boolean connettoreCheckData(OneOfConnettoreErogazioneConnettore connettore, ErogazioniEnv erogEnv, boolean erogazione) throws Exception {
		IConnettoreApiHelper helper = ConnettoreAPIHelper.getHelper(connettore.getTipo()); 
		
		if(helper == null) return true;
		return helper.connettoreCheckData(connettore, erogEnv, erogazione);
	}

	public static boolean connettoreCheckData(OneOfConnettoreFruizioneConnettore connettore, ErogazioniEnv erogEnv, boolean erogazione) throws Exception {
		IConnettoreApiHelper helper = ConnettoreAPIHelper.getHelper(connettore.getTipo());
		
		if(helper == null) return true;
		return helper.connettoreCheckData(connettore, erogEnv, erogazione);
	}

	public static void fillConnettoreConfigurazione(ServizioApplicativo sa, ErogazioniEnv erogEnv, OneOfApplicativoServerConnettore connettore, String oldConnT) throws Exception {
		IConnettoreApiHelper helper = ConnettoreAPIHelper.getHelper(connettore.getTipo());
		
		if(helper == null) return;
		helper.buildConnettoreConfigurazione(sa, erogEnv, connettore, oldConnT);
	}

	public static void fillConnettoreConfigurazione(ServizioApplicativo sa, ErogazioniEnv erogEnv, OneOfConnettoreErogazioneConnettore connettore, String oldConnT) throws Exception {
		IConnettoreApiHelper helper = ConnettoreAPIHelper.getHelper(connettore.getTipo());
		
		if(helper == null) return;
		helper.buildConnettoreConfigurazione(sa, erogEnv, connettore, oldConnT);
	}

	public static void fillConnettoreConfigurazione(Connettore connis, ErogazioniEnv erogEnv, OneOfConnettoreFruizioneConnettore connettore, String oldConnT) throws Exception {
		IConnettoreApiHelper helper = ConnettoreAPIHelper.getHelper(connettore.getTipo());
		
		if(helper == null) return;
		helper.buildConnettoreConfigurazione(connis, erogEnv, connettore, oldConnT);
	}

	public static void fillConnettoreRegistro(org.openspcoop2.core.registry.Connettore connis, ErogazioniEnv erogEnv, OneOfApplicativoServerConnettore connettore, String oldConnT) throws Exception {
		IConnettoreApiHelper helper = ConnettoreAPIHelper.getHelper(connettore.getTipo());
		
		if(helper == null) return;
		helper.fillConnettoreRegistro(connis, erogEnv, connettore, oldConnT);
	}

	public static void fillConnettoreRegistro(org.openspcoop2.core.registry.Connettore connis, ErogazioniEnv erogEnv, OneOfConnettoreErogazioneConnettore connettore, String oldConnT) throws Exception {
		IConnettoreApiHelper helper = ConnettoreAPIHelper.getHelper(connettore.getTipo());
		
		if(helper == null) return;
		helper.fillConnettoreRegistro(connis, erogEnv, connettore, oldConnT);
	}

	public static void fillConnettoreRegistro(org.openspcoop2.core.registry.Connettore connis, ErogazioniEnv erogEnv, OneOfConnettoreFruizioneConnettore connettore, String oldConnT) throws Exception {
		IConnettoreApiHelper helper = ConnettoreAPIHelper.getHelper(connettore.getTipo());
		
		if(helper == null) return;
		helper.fillConnettoreRegistro(connis, erogEnv, connettore, oldConnT);
	}

	public static org.openspcoop2.core.registry.Connettore buildConnettoreRegistro(ErogazioniEnv erogEnv, OneOfApplicativoServerConnettore connettore) throws Exception {
		IConnettoreApiHelper helper = ConnettoreAPIHelper.getHelper(connettore.getTipo());
		
		if(helper == null) return null;
		return helper.buildConnettoreRegistro(erogEnv, connettore);
	}

	public static org.openspcoop2.core.registry.Connettore buildConnettoreRegistro(ErogazioniEnv erogEnv, OneOfConnettoreErogazioneConnettore connettore) throws Exception {
		IConnettoreApiHelper helper = ConnettoreAPIHelper.getHelper(connettore.getTipo());
		
		if(helper == null) return null;
		return helper.buildConnettoreRegistro(erogEnv, connettore);
	}

	public static org.openspcoop2.core.registry.Connettore buildConnettoreRegistro(ErogazioniEnv erogEnv, OneOfConnettoreFruizioneConnettore connettore) throws Exception {
		IConnettoreApiHelper helper = ConnettoreAPIHelper.getHelper(connettore.getTipo());
		
		if(helper == null) return null;
		return helper.buildConnettoreRegistro(erogEnv, connettore);
	}

}