ErogazioniUtilities.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.aps.erogazioni;

import java.util.ArrayList;
import java.util.List;

import org.openspcoop2.core.allarmi.constants.RuoloPorta;
import org.openspcoop2.core.config.PortaApplicativa;
import org.openspcoop2.core.config.PortaDelegata;
import org.openspcoop2.core.config.TrasformazioneRegola;
import org.openspcoop2.core.controllo_traffico.AttivazionePolicy;
import org.openspcoop2.core.controllo_traffico.constants.RuoloPolicy;
import org.openspcoop2.core.id.IDPortaApplicativa;
import org.openspcoop2.core.id.IDPortaDelegata;
import org.openspcoop2.core.id.IDServizio;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.core.mapping.MappingErogazionePortaApplicativa;
import org.openspcoop2.core.mapping.MappingFruizionePortaDelegata;
import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
import org.openspcoop2.core.registry.Fruitore;
import org.openspcoop2.core.registry.Soggetto;
import org.openspcoop2.core.registry.driver.IDServizioFactory;
import org.openspcoop2.monitor.engine.alarm.wrapper.ConfigurazioneAllarmeBean;
import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
import org.openspcoop2.web.ctrlstat.driver.DriverControlStationException;
import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCore;
import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCore;
import org.openspcoop2.web.ctrlstat.servlet.pa.PorteApplicativeCore;
import org.openspcoop2.web.ctrlstat.servlet.pd.PorteDelegateCore;
import org.openspcoop2.web.ctrlstat.servlet.pdd.PddCore;
import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;

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

	public static boolean isChangeAPIEnabled(AccordoServizioParteSpecifica asps, AccordiServizioParteSpecificaCore aspsCore) throws Exception {
		
		IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromAccordo(asps);
		SoggettiCore soggettiCore = new SoggettiCore(aspsCore);
		PddCore pddCore = new PddCore(aspsCore);
		PorteDelegateCore porteDelegateCore = new PorteDelegateCore(aspsCore);
		PorteApplicativeCore porteApplicativeCore = new PorteApplicativeCore(aspsCore);
		ConfigurazioneCore confCore = new ConfigurazioneCore(aspsCore);
			
		List<IDServizio> lIdServizio = new ArrayList<IDServizio>();
		lIdServizio.add(idServizio);
		
		boolean addDefault = true;
		boolean addNotDefault = true;
		
		// Fruizioni
		for (Fruitore fruitore : asps.getFruitoreList()) {
			IDSoggetto idSoggettoFr = new IDSoggetto(fruitore.getTipo(), fruitore.getNome());
			Soggetto soggetto = soggettiCore.getSoggettoRegistro(idSoggettoFr);
			if(!pddCore.isPddEsterna(soggetto.getPortaDominio())){
				
				List<MappingFruizionePortaDelegata> listNotDefault = porteDelegateCore.getMapping(lIdServizio, !addDefault, addNotDefault);
				if(listNotDefault!=null && !listNotDefault.isEmpty()) {
					return false;
				}
				
				List<MappingFruizionePortaDelegata> listDefault = porteDelegateCore.getMapping(lIdServizio, addDefault, !addNotDefault);
				for (MappingFruizionePortaDelegata mappingDefault : listDefault) {
					IDPortaDelegata idPD = mappingDefault.getIdPortaDelegata();
					PortaDelegata pd = porteDelegateCore.getPortaDelegata(idPD);
					if(isChangeAPIEnabled(pd,confCore)==false) {
						return false;
					}
				}
			}	
		}
			
		// Erogazioni
		List<MappingErogazionePortaApplicativa> listNotDefault = porteApplicativeCore.getMapping(lIdServizio, !addDefault, addNotDefault);
		if(listNotDefault!=null && !listNotDefault.isEmpty()) {
			return false;
		}
		
		List<MappingErogazionePortaApplicativa> listDefault = porteApplicativeCore.getMapping(lIdServizio, addDefault, !addNotDefault);
		for (MappingErogazionePortaApplicativa mappingDefault : listDefault) {
			IDPortaApplicativa idPA = mappingDefault.getIdPortaApplicativa();
			PortaApplicativa pa = porteApplicativeCore.getPortaApplicativa(idPA);
			if(isChangeAPIEnabled(pa,confCore)==false) {
				return false;
			}
		}
			
		return true;
	}
	
	private static boolean isChangeAPIEnabled(PortaDelegata pd, ConfigurazioneCore confCore) throws DriverControlStationException {
		
		if(pd.getTrasformazioni()!=null) {
			if(pd.getTrasformazioni().sizeRegolaList()>0) {
				for (TrasformazioneRegola regola : pd.getTrasformazioni().getRegolaList()) {
					if(regola.getApplicabilita()!=null && regola.getApplicabilita().sizeAzioneList()>0) {
						return false;
					}
				}
			}
		}
		
		List<AttivazionePolicy> list = confCore.attivazionePolicyList(new ConsoleSearch(true), RuoloPolicy.DELEGATA, pd.getNome());
		if(list!=null && !list.isEmpty()) {
			for (AttivazionePolicy attivazionePolicy : list) {
				if(attivazionePolicy.getFiltro()!=null && attivazionePolicy.getFiltro().isEnabled() && attivazionePolicy.getFiltro().getAzione()!=null) {
					return false;
				}
			}
		}
		
		if(confCore.isConfigurazioneAllarmiEnabled()) {
			List<ConfigurazioneAllarmeBean> listAllarmi = confCore.allarmiList(new ConsoleSearch(true), RuoloPorta.DELEGATA, pd.getNome());
			if(listAllarmi!=null && !listAllarmi.isEmpty()) {
				for (ConfigurazioneAllarmeBean allarme : listAllarmi) {
					if(allarme.getFiltro()!=null && allarme.getFiltro().isEnabled() && allarme.getFiltro().getAzione()!=null) {
						return false;
					}
				}
			}
		}
		
		return true;
	}
	
	private static boolean isChangeAPIEnabled(PortaApplicativa pa, ConfigurazioneCore confCore) throws DriverControlStationException {
		
		if(pa.getTrasformazioni()!=null) {
			if(pa.getTrasformazioni().sizeRegolaList()>0) {
				for (TrasformazioneRegola regola : pa.getTrasformazioni().getRegolaList()) {
					if(regola.getApplicabilita()!=null && regola.getApplicabilita().sizeAzioneList()>0) {
						return false;
					}
				}
			}
		}
		
		List<AttivazionePolicy> list = confCore.attivazionePolicyList(new ConsoleSearch(true), RuoloPolicy.APPLICATIVA, pa.getNome());
		if(list!=null && !list.isEmpty()) {
			for (AttivazionePolicy attivazionePolicy : list) {
				if(attivazionePolicy.getFiltro()!=null && attivazionePolicy.getFiltro().isEnabled() && attivazionePolicy.getFiltro().getAzione()!=null) {
					return false;
				}
			}
		}
		
		if(confCore.isConfigurazioneAllarmiEnabled()) {
			List<ConfigurazioneAllarmeBean> listAllarmi = confCore.allarmiList(new ConsoleSearch(true), RuoloPorta.APPLICATIVA, pa.getNome());
			if(listAllarmi!=null && !listAllarmi.isEmpty()) {
				for (ConfigurazioneAllarmeBean allarme : listAllarmi) {
					if(allarme.getFiltro()!=null && allarme.getFiltro().isEnabled() && allarme.getFiltro().getAzione()!=null) {
						return false;
					}
				}
			}
		}
		
		return true;
	}
}