MonitorUtilities.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.servlet.monitor;

import java.math.BigInteger;
import java.util.List;

import javax.xml.ws.BindingProvider;

import org.openspcoop2.pdd.monitor.Messaggio;
import org.openspcoop2.pdd.monitor.StatoPdd;
import org.openspcoop2.pdd.monitor.driver.FilterSearch;
import org.openspcoop2.pdd.monitor.driver.FiltroStatoConsegnaAsincrona;
import org.openspcoop2.pdd.monitor.driver.StatoConsegneAsincrone;
import org.openspcoop2.web.ctrlstat.core.ControlStationLogger;
import org.openspcoop2.web.ctrlstat.dao.PdDControlStation;

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

	public static long countListaRichiestePendenti(FilterSearch filter,String pddName, String sorgenteDati) throws Exception{
		if(Monitor.singlePdD){
			return Monitor.driverMonitoraggioLocale.get(sorgenteDati).countListaRichiestePendenti(filter);
		}
		else{
			return getMessaggioWS(pddName).count(convertToSearchFilterMessaggio(filter));
		}
	}
	
	public static List<Messaggio> getListaRichiestePendenti(FilterSearch filter,String pddName, String sorgenteDati) throws Exception{
		if(Monitor.singlePdD){
			return Monitor.driverMonitoraggioLocale.get(sorgenteDati).getListaRichiestePendenti(filter);
		}
		else{
			return getMessaggioWS(pddName).findAll(convertToSearchFilterMessaggio(filter));
		}
	}
	
	public static long deleteRichiestePendenti(FilterSearch filter,String pddName, String sorgenteDati) throws Exception{
		if(Monitor.singlePdD){
			return Monitor.driverMonitoraggioLocale.get(sorgenteDati).deleteRichiestePendenti(filter);
		}
		else{
			return getMessaggioWS(pddName).deleteAllByFilter(convertToSearchFilterMessaggio(filter));
		}
	}
	
	public static long aggiornaDataRispedizioneRichiestePendenti(FilterSearch filter,String pddName, String sorgenteDati) throws Exception{
		if(Monitor.singlePdD){
			return Monitor.driverMonitoraggioLocale.get(sorgenteDati).aggiornaDataRispedizioneRichiestePendenti(filter);
		}
		else{
			throw new Exception("Not Implemented");
		}
	}
	
	public static StatoPdd getStatoRichiestePendenti(FilterSearch filter,String pddName, String sorgenteDati) throws Exception{
		if(Monitor.singlePdD){
			return Monitor.driverMonitoraggioLocale.get(sorgenteDati).getStatoRichiestePendenti(filter);
		}
		else{
			return getStatoPddWS(pddName).find(convertToSearchFilterStatoPdd(filter));
		}
	}
	
	public static StatoConsegneAsincrone getStatoConsegneAsincrone(FiltroStatoConsegnaAsincrona filtro, String sorgenteDati) throws Exception{
		if(Monitor.singlePdD){
			return Monitor.driverMonitoraggioLocale.get(sorgenteDati).getStatoConsegneAsincrone(filtro);
		}
		else{
			throw new Exception("Non supportato");
		}
	}
	
	private static String getWSUrl(String pddName, boolean statoPdD) throws Exception{
		String ipPdd = null;
		String protocollo = null;
		int porta = 80;
		try {
			// ipPdd = backEndConnector.getIPPdd(queueName);
			PdDControlStation pdd = Monitor.pddCore.getPdDControlStation(pddName);
			ipPdd = pdd.getIpGestione();
			protocollo = pdd.getProtocolloGestione();
			porta = pdd.getPortaGestione();

			if (ipPdd == null || protocollo == null || porta <= 0)
				throw new Exception("Parametri Porta di Dominio non validi.");

		} catch (Exception e) {
			ControlStationLogger.getPddConsoleCoreLogger().error("Riscontrato errore durante la get dell'ip del pdd(" + pddName + "): " + e.toString(), e);
			throw new Exception("Riscontrato errore durante la get dell'ip del pdd(" + pddName + "): " + e.toString(), e);
		}
		String prefixUrl = protocollo + "://" + ipPdd + ":" + porta + "/";
		if(statoPdD){
			return prefixUrl + Monitor.consoleProperties.getGestioneCentralizzataWSMonitorEndpointSuffixStatoPdd();
		}
		else{
			return prefixUrl + Monitor.consoleProperties.getGestioneCentralizzataWSMonitorEndpointSuffixMessaggio();
		}
	}
	
	private static org.openspcoop2.pdd.monitor.ws.client.messaggio.all.Messaggio getMessaggioWS(String pddName) throws Exception{
		org.openspcoop2.pdd.monitor.ws.client.messaggio.all.MessaggioSoap11Service messaggioService = 
				new org.openspcoop2.pdd.monitor.ws.client.messaggio.all.MessaggioSoap11Service();
		org.openspcoop2.pdd.monitor.ws.client.messaggio.all.Messaggio messaggioPort = messaggioService.getMessaggioPortSoap11();
		((BindingProvider)messaggioPort).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
				getWSUrl(pddName, false));
		((BindingProvider)messaggioPort).getRequestContext().put("schema-validation-enabled", true);
		String username = Monitor.consoleProperties.getGestioneCentralizzataWSMonitorCredenzialiBasicUsername();
		String password = Monitor.consoleProperties.getGestioneCentralizzataWSMonitorCredenzialiBasicPassword();
		if(username !=null && password!=null){
			// to use Basic HTTP Authentication: 
			((BindingProvider)messaggioPort).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username);
			((BindingProvider)messaggioPort).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);
		}
		return messaggioPort;
	}
	
	private static org.openspcoop2.pdd.monitor.ws.client.statopdd.all.StatoPdd getStatoPddWS(String pddName) throws Exception{
		org.openspcoop2.pdd.monitor.ws.client.statopdd.all.StatoPddSoap11Service statoPddService = 
				new org.openspcoop2.pdd.monitor.ws.client.statopdd.all.StatoPddSoap11Service();
		org.openspcoop2.pdd.monitor.ws.client.statopdd.all.StatoPdd statoPddPort = statoPddService.getStatoPddPortSoap11();
		((BindingProvider)statoPddPort).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
				getWSUrl(pddName, true));
		((BindingProvider)statoPddPort).getRequestContext().put("schema-validation-enabled", true);
		String username = Monitor.consoleProperties.getGestioneCentralizzataWSMonitorCredenzialiBasicUsername();
		String password = Monitor.consoleProperties.getGestioneCentralizzataWSMonitorCredenzialiBasicPassword();
		if(username !=null && password!=null){
			// to use Basic HTTP Authentication: 
			((BindingProvider)statoPddPort).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username);
			((BindingProvider)statoPddPort).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);
		}
		return statoPddPort;
	}
	
	private static org.openspcoop2.pdd.monitor.ws.client.messaggio.all.SearchFilterMessaggio convertToSearchFilterMessaggio(FilterSearch filter){
		org.openspcoop2.pdd.monitor.ws.client.messaggio.all.SearchFilterMessaggio filterWS = new org.openspcoop2.pdd.monitor.ws.client.messaggio.all.SearchFilterMessaggio();
		
		if(filter.getLimit()>0){
			filterWS.setLimit(new BigInteger(filter.getLimit()+""));
		}
		if(filter.getOffset()>=0){
			filterWS.setOffset(new BigInteger(filter.getOffset()+""));
		}
		
		org.openspcoop2.pdd.monitor.ws.client.messaggio.all.Filtro filtroInternoWS = new org.openspcoop2.pdd.monitor.ws.client.messaggio.all.Filtro();
		filtroInternoWS.setTipo(filter.getTipo());
		filtroInternoWS.setStato(filter.getStato());
		if(filter.getSoglia()>0)
			filtroInternoWS.setSoglia(filter.getSoglia());
		filtroInternoWS.setMessagePattern(filter.getMessagePattern());
		filtroInternoWS.setIdMessaggio(filter.getIdMessaggio());
		filtroInternoWS.setCorrelazioneApplicativa(filter.getCorrelazioneApplicativa());
		org.openspcoop2.pdd.monitor.ws.client.messaggio.all.Busta busta = null;
		if(filter.getBusta()!=null){
			busta = new org.openspcoop2.pdd.monitor.ws.client.messaggio.all.Busta();
			
			busta.setAttesaRiscontro(filter.getBusta().getAttesaRiscontro());
			busta.setAzione(filter.getBusta().getAzione());
			busta.setCollaborazione(filter.getBusta().getCollaborazione());
			
			org.openspcoop2.pdd.monitor.ws.client.messaggio.all.BustaSoggetto bustaDestinatario = null;
			if(filter.getBusta().getDestinatario()!=null){
				bustaDestinatario = new org.openspcoop2.pdd.monitor.ws.client.messaggio.all.BustaSoggetto();
				bustaDestinatario.setNome(filter.getBusta().getDestinatario().getNome());
				bustaDestinatario.setTipo(filter.getBusta().getDestinatario().getTipo());
			}
			busta.setDestinatario(bustaDestinatario);
			
			org.openspcoop2.pdd.monitor.ws.client.messaggio.all.BustaSoggetto bustaMittente = null;
			if(filter.getBusta().getMittente()!=null){
				bustaMittente = new org.openspcoop2.pdd.monitor.ws.client.messaggio.all.BustaSoggetto();
				bustaMittente.setNome(filter.getBusta().getMittente().getNome());
				bustaMittente.setTipo(filter.getBusta().getMittente().getTipo());
			}
			busta.setMittente(bustaMittente);
			
			org.openspcoop2.pdd.monitor.ws.client.messaggio.all.BustaServizio bustaServizio = null;
			if(filter.getBusta().getServizio()!=null){
				bustaServizio = new org.openspcoop2.pdd.monitor.ws.client.messaggio.all.BustaServizio();
				bustaServizio.setNome(filter.getBusta().getServizio().getNome());
				bustaServizio.setTipo(filter.getBusta().getServizio().getTipo());
				//bustaServizio.setVersione(filter.getBusta().getServizio().getVersione());
			}
			busta.setServizio(bustaServizio);
			
			busta.setProfiloCollaborazione(filter.getBusta().getProfiloCollaborazione());
			busta.setRiferimentoMessaggio(filter.getBusta().getRiferimentoMessaggio());
		}
		filtroInternoWS.setBusta(busta);
		filterWS.setFiltro(filtroInternoWS);
		
		return filterWS;
	}
	
	private static org.openspcoop2.pdd.monitor.ws.client.statopdd.all.SearchFilterStatoPdd convertToSearchFilterStatoPdd(FilterSearch filter){
		org.openspcoop2.pdd.monitor.ws.client.statopdd.all.SearchFilterStatoPdd filterWS = new org.openspcoop2.pdd.monitor.ws.client.statopdd.all.SearchFilterStatoPdd();
		
		if(filter.getLimit()>0){
			filterWS.setLimit(new BigInteger(filter.getLimit()+""));
		}
		if(filter.getOffset()>=0){
			filterWS.setOffset(new BigInteger(filter.getOffset()+""));
		}
		
		org.openspcoop2.pdd.monitor.ws.client.statopdd.all.Filtro filtroInternoWS = new org.openspcoop2.pdd.monitor.ws.client.statopdd.all.Filtro();
		filtroInternoWS.setTipo(filter.getTipo());
		filtroInternoWS.setStato(filter.getStato());
		if(filter.getSoglia()>0)
			filtroInternoWS.setSoglia(filter.getSoglia());
		filtroInternoWS.setMessagePattern(filter.getMessagePattern());
		filtroInternoWS.setIdMessaggio(filter.getIdMessaggio());
		filtroInternoWS.setCorrelazioneApplicativa(filter.getCorrelazioneApplicativa());
		org.openspcoop2.pdd.monitor.ws.client.statopdd.all.Busta busta = null;
		if(filter.getBusta()!=null){
			busta = new org.openspcoop2.pdd.monitor.ws.client.statopdd.all.Busta();
			
			busta.setAttesaRiscontro(filter.getBusta().getAttesaRiscontro());
			busta.setAzione(filter.getBusta().getAzione());
			busta.setCollaborazione(filter.getBusta().getCollaborazione());
			
			org.openspcoop2.pdd.monitor.ws.client.statopdd.all.BustaSoggetto bustaDestinatario = null;
			if(filter.getBusta().getDestinatario()!=null){
				bustaDestinatario = new org.openspcoop2.pdd.monitor.ws.client.statopdd.all.BustaSoggetto();
				bustaDestinatario.setNome(filter.getBusta().getDestinatario().getNome());
				bustaDestinatario.setTipo(filter.getBusta().getDestinatario().getTipo());
			}
			busta.setDestinatario(bustaDestinatario);
			
			org.openspcoop2.pdd.monitor.ws.client.statopdd.all.BustaSoggetto bustaMittente = null;
			if(filter.getBusta().getMittente()!=null){
				bustaMittente = new org.openspcoop2.pdd.monitor.ws.client.statopdd.all.BustaSoggetto();
				bustaMittente.setNome(filter.getBusta().getMittente().getNome());
				bustaMittente.setTipo(filter.getBusta().getMittente().getTipo());
			}
			busta.setMittente(bustaMittente);
			
			org.openspcoop2.pdd.monitor.ws.client.statopdd.all.BustaServizio bustaServizio = null;
			if(filter.getBusta().getServizio()!=null){
				bustaServizio = new org.openspcoop2.pdd.monitor.ws.client.statopdd.all.BustaServizio();
				bustaServizio.setNome(filter.getBusta().getServizio().getNome());
				bustaServizio.setTipo(filter.getBusta().getServizio().getTipo());
				//bustaServizio.setVersione(filter.getBusta().getServizio().getVersione());
			}
			busta.setServizio(bustaServizio);
			
			busta.setProfiloCollaborazione(filter.getBusta().getProfiloCollaborazione());
			busta.setRiferimentoMessaggio(filter.getBusta().getRiferimentoMessaggio());
		}
		filtroInternoWS.setBusta(busta);
		filterWS.setFiltro(filtroInternoWS);
		
		return filterWS;
	}
	

	
}