GestoreRegistroServiziRemoto.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.web.ctrlstat.registro;

import java.util.Properties;

import org.slf4j.Logger;
import org.openspcoop2.core.config.constants.CostantiConfigurazione;
import org.openspcoop2.core.registry.driver.IDriverRegistroServiziGet;
import org.openspcoop2.core.registry.driver.db.DriverRegistroServiziDB;
import org.openspcoop2.core.registry.driver.uddi.DriverRegistroServiziUDDI;
import org.openspcoop2.core.registry.driver.web.DriverRegistroServiziWEB;
import org.openspcoop2.core.registry.driver.ws.DriverRegistroServiziWS;
import org.openspcoop2.core.registry.driver.xml.DriverRegistroServiziXML;
import org.openspcoop2.web.ctrlstat.config.RegistroServiziRemotoProperties;


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

	
	public static IDriverRegistroServiziGet getDriverRegistroServizi(Logger log) throws Exception{
		if(gestore==null){
			init(log);
		}
		return gestore.driverRegistroServizi;
	} 
	public static String getTipoRegistroServizi(Logger log) throws Exception{
		if(gestore==null){
			init(log);
		}
		return gestore.tipoRegistro;
	} 
	
	private static GestoreRegistroServiziRemoto gestore = null;
	private static synchronized void init(Logger log) throws Exception{
		if(gestore==null){
			gestore = new GestoreRegistroServiziRemoto(log);
		}
	}
	
	
	
	private String tipoRegistro;
	private IDriverRegistroServiziGet driverRegistroServizi = null;
	
	public GestoreRegistroServiziRemoto(Logger log) throws Exception{
		
		RegistroServiziRemotoProperties registroServiziRemotoProperties = RegistroServiziRemotoProperties.getInstance();
		
		
		/* CONFIGURAZIONE GENERALE */
		this.tipoRegistro = registroServiziRemotoProperties.getTipoRegistroServiziRemoto();
		
		
		/* REGISTRO XML */
		if(CostantiConfigurazione.REGISTRO_XML.equals(this.tipoRegistro)){
			
			String location = registroServiziRemotoProperties.getRegistroServiziXML_Location();
			
			
			this.driverRegistroServizi = new DriverRegistroServiziXML(location, log);
			if(((DriverRegistroServiziXML)this.driverRegistroServizi).create==false){
				throw new Exception("[RegistroServiziRemoto] DriverRegistroServiziXML non correttamente inizializzato");
			}
		}
		
		/* REGISTRO WS */
		else if(CostantiConfigurazione.REGISTRO_WS.equals(this.tipoRegistro)){
			
			String location = registroServiziRemotoProperties.getRegistroServiziWS_Location();
			
			String username = registroServiziRemotoProperties.getRegistroServiziWS_Username();
			if(username!=null){
				username = username.trim();
			}
			String password = registroServiziRemotoProperties.getRegistroServiziWS_Password();
			if(password!=null){
				password = password.trim();
			}
			
			if(username!=null && password!=null){
				this.driverRegistroServizi = new DriverRegistroServiziWS(location,username,password, log);
			}else{
				this.driverRegistroServizi = new DriverRegistroServiziWS(location, log);
			}
			if(((DriverRegistroServiziWS)this.driverRegistroServizi).create==false){
				throw new Exception("[RegistroServiziRemoto] DriverRegistroServiziWS non correttamente inizializzato");
			}
		}
		
		/* REGISTRO DB */
		else if(CostantiConfigurazione.REGISTRO_DB.equals(this.tipoRegistro)){
			
			String tipoDatabase = registroServiziRemotoProperties.getRegistroServiziDB_TipoDatabase();
			
			String datasource = registroServiziRemotoProperties.getRegistroServiziDB_DataSource();
		
			Properties ctxProperties = registroServiziRemotoProperties.getRegistroServiziDB_DataSourceContext();
			
			this.driverRegistroServizi = new DriverRegistroServiziDB(datasource,ctxProperties, log,tipoDatabase);
			if(((DriverRegistroServiziDB)this.driverRegistroServizi).create==false){
				throw new Exception("[RegistroServiziRemoto] DriverRegistroServiziDB non correttamente inizializzato");
			}
			
		}
		
		/* REGISTRO UDDI */
		else if(CostantiConfigurazione.REGISTRO_UDDI.equals(this.tipoRegistro)){
			
			String location = registroServiziRemotoProperties.getRegistroServiziUDDI_InquiryURL();
			
			String username = registroServiziRemotoProperties.getRegistroServiziUDDI_Username();
			if(username!=null){
				username = username.trim();
			}
			String password = registroServiziRemotoProperties.getRegistroServiziUDDI_Password();
			if(password!=null){
				password = password.trim();
			}
			
			if(username!=null && password!=null){
				this.driverRegistroServizi = new DriverRegistroServiziUDDI(location,username,password, log);
			}else{
				this.driverRegistroServizi = new DriverRegistroServiziUDDI(location, log);
			}
			if(((DriverRegistroServiziUDDI)this.driverRegistroServizi).create==false){
				throw new Exception("[RegistroServiziRemoto] DriverRegistroServiziUDDI non correttamente inizializzato");
			}
	
		} 
		
		/* REGISTRO WEB */
		else if(CostantiConfigurazione.REGISTRO_WEB.equals(this.tipoRegistro)){
			
			String location = registroServiziRemotoProperties.getRegistroServiziWEB_URLPrefix();
			
			this.driverRegistroServizi = new DriverRegistroServiziWEB(location, log);
			if(((DriverRegistroServiziWEB)this.driverRegistroServizi).create==false){
				throw new Exception("[RegistroServiziRemoto] DriverRegistroServiziWEB non correttamente inizializzato");
			}
			
			
		} 
		
		else{
			throw new Exception("Tipo di registro non gestito: "+this.tipoRegistro);
		}
		
		log.info("Accesso al registro dei servizi remoto di tipo ["+this.tipoRegistro+"] correttamente effettuato."); 
			
		
	}
	
}