CleanerOpenSPCoop2Extensions.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.utils;

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

import org.openspcoop2.core.config.AccessoRegistroRegistro;
import org.openspcoop2.core.config.Configurazione;
import org.openspcoop2.core.config.PortaApplicativa;
import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
import org.openspcoop2.core.config.PortaDelegata;
import org.openspcoop2.core.config.Proprieta;
import org.openspcoop2.core.config.ProtocolProperty;
import org.openspcoop2.core.config.ServizioApplicativo;

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

	public void clean(Configurazione configurazionePdD){

		if(configurazionePdD.getRoutingTable()!=null){
			configurazionePdD.getRoutingTable().setAbilitata(null);
		}	

		if(configurazionePdD.getAccessoRegistro()!=null){
			if(configurazionePdD.getAccessoRegistro().sizeRegistroList()>0){
				for (AccessoRegistroRegistro accessoRegistro : configurazionePdD.getAccessoRegistro().getRegistroList()) {
					accessoRegistro.setTipoDatabase(null);
					accessoRegistro.setGenericPropertiesMap(null);
				}
			}
		}
		
		if(configurazionePdD.getGestioneErrore()!=null){
			if(configurazionePdD.getGestioneErrore().getComponenteCooperazione()!=null){
				this.clean(configurazionePdD.getGestioneErrore().getComponenteCooperazione());
			}	
			if(configurazionePdD.getGestioneErrore().getComponenteIntegrazione()!=null){
				this.clean(configurazionePdD.getGestioneErrore().getComponenteIntegrazione());
			}
		}
		
		if(configurazionePdD.getSystemProperties()!=null && configurazionePdD.getSystemProperties().sizeSystemPropertyList()<=0) {
			configurazionePdD.setSystemProperties(null); // altrimeni da errore di validazione in fase di import
		}
		
	}

	public void clean(org.openspcoop2.core.config.ConfigurazioneUrlInvocazione configUrlInvocazione) {
		
	}
	
	public void clean(org.openspcoop2.core.config.ConfigurazioneUrlInvocazioneRegola configUrlInvocazioneRegola) {
		
	}
	
	public void clean(org.openspcoop2.core.config.RegistroPlugin plugin) {
		
	}
	
	public void clean(org.openspcoop2.core.config.GenericProperties policy) {
		
	}
	
	public void clean(org.openspcoop2.core.config.Soggetto soggettoConfig){
		
		soggettoConfig.setSuperUser(null);
		
		if(soggettoConfig.sizeConnettoreList()>0){
			for (org.openspcoop2.core.config.Connettore connettore : soggettoConfig.getConnettoreList()) {
				this.clean(connettore);	
			}
		}
	}

	public void clean(ServizioApplicativo servizioApplicativo){
		
		servizioApplicativo.setIdSoggetto(null);
		servizioApplicativo.setTipoSoggettoProprietario(null);
		servizioApplicativo.setNomeSoggettoProprietario(null);
		servizioApplicativo.setTipologiaErogazione(null);
		servizioApplicativo.setTipologiaFruizione(null);
		
		if(servizioApplicativo.getInvocazioneServizio()!=null){
			if(servizioApplicativo.getInvocazioneServizio().getConnettore()!=null){
				this.clean(servizioApplicativo.getInvocazioneServizio().getConnettore());	
			}
			if(servizioApplicativo.getInvocazioneServizio().getGestioneErrore()!=null){
				this.clean(servizioApplicativo.getInvocazioneServizio().getGestioneErrore());	
			}
		}
		
		if(servizioApplicativo.getRispostaAsincrona()!=null){
			if(servizioApplicativo.getRispostaAsincrona().getConnettore()!=null){
				this.clean(servizioApplicativo.getRispostaAsincrona().getConnettore());	
			}
			if(servizioApplicativo.getRispostaAsincrona().getGestioneErrore()!=null){
				this.clean(servizioApplicativo.getRispostaAsincrona().getGestioneErrore());	
			}
		}
		
		if(servizioApplicativo.sizeProtocolPropertyList()>0) {
			for (ProtocolProperty pp : servizioApplicativo.getProtocolPropertyList()) {
				this.clean(pp);
			}
		}
	}

	public void clean(PortaDelegata portaDelegata){

		portaDelegata.setIdSoggetto(null);
		portaDelegata.setIdAccordo(null);
		portaDelegata.setIdPortType(null);
		portaDelegata.setStatoMessageSecurity(null);
		portaDelegata.setTipoSoggettoProprietario(null);
		portaDelegata.setNomeSoggettoProprietario(null);
		
		if(portaDelegata.getMessageSecurity()!=null) {
			if(portaDelegata.getMessageSecurity().getRequestFlow()!=null && portaDelegata.getMessageSecurity().getRequestFlow().sizeParameterList()<=0) {
				portaDelegata.getMessageSecurity().setRequestFlow(null); // altrimeni da errore di validazione in fase di import
			}
			if(portaDelegata.getMessageSecurity().getResponseFlow()!=null && portaDelegata.getMessageSecurity().getResponseFlow().sizeParameterList()<=0) {
				portaDelegata.getMessageSecurity().setResponseFlow(null); // altrimeni da errore di validazione in fase di import
			}
		}
		
		if(portaDelegata.getRuoli()!=null && portaDelegata.getRuoli().sizeRuoloList()<=0) {
			portaDelegata.setRuoli(null); // altrimeni da errore di validazione in fase di import
		}
		
		if(portaDelegata.getScope()!=null && portaDelegata.getScope().sizeScopeList()<=0) {
			portaDelegata.setScope(null); // altrimeni da errore di validazione in fase di import
		}
		
		if(portaDelegata.getCorrelazioneApplicativa()!=null && portaDelegata.getCorrelazioneApplicativa().sizeElementoList()<=0) {
			portaDelegata.setCorrelazioneApplicativa(null); // altrimeni da errore di validazione in fase di import
		}
		if(portaDelegata.getCorrelazioneApplicativaRisposta()!=null && portaDelegata.getCorrelazioneApplicativaRisposta().sizeElementoList()<=0) {
			portaDelegata.setCorrelazioneApplicativaRisposta(null); // altrimeni da errore di validazione in fase di import
		}
		
		// Fix altrimenti viene serializzato un xml vuoto di local forward, e quando viene re-importato il default e' abilitato
		if(portaDelegata.getLocalForward()!=null) {
			if(portaDelegata.getLocalForward().getStato()==null) {
				portaDelegata.setLocalForward(null);
			}
		}
	}

	public void clean(PortaApplicativa portaApplicativa){

		portaApplicativa.setIdSoggetto(null);
		portaApplicativa.setIdAccordo(null);
		portaApplicativa.setIdPortType(null);
		portaApplicativa.setStatoMessageSecurity(null);
		portaApplicativa.setTipoSoggettoProprietario(null);
		portaApplicativa.setNomeSoggettoProprietario(null);
	
		if(portaApplicativa.sizeServizioApplicativoList()>0) {
			for (PortaApplicativaServizioApplicativo pasa : portaApplicativa.getServizioApplicativoList()) {
				pasa.setIdServizioApplicativo(null);
				if(pasa.getDatiConnettore()!=null) {
					if(pasa.getDatiConnettore().sizeProprietaList()>0) {
						
						List<String> nomiDaEliminare = new ArrayList<>();
						
						for (Proprieta p : pasa.getDatiConnettore().getProprietaList()) {
							if(p.getValore()==null || "".equals(p.getValore())) {
								// non devo serializzare valori vuoti o null (DB oracle non lo permette)
								nomiDaEliminare.add(p.getNome());
							}
						}
						
						while(nomiDaEliminare.size()>0) {
							String nome = nomiDaEliminare.remove(0);
							for (int i = 0; i < pasa.getDatiConnettore().sizeProprietaList(); i++) {
								Proprieta p = pasa.getDatiConnettore().getProprieta(i);
								if(p.getNome().equals(nome)) {
									pasa.getDatiConnettore().removeProprieta(i);
									break;
								}
							}
						}
					}
				}
			}
		}
		
		if(portaApplicativa.getMessageSecurity()!=null) {
			if(portaApplicativa.getMessageSecurity().getRequestFlow()!=null && portaApplicativa.getMessageSecurity().getRequestFlow().sizeParameterList()<=0) {
				portaApplicativa.getMessageSecurity().setRequestFlow(null); // altrimeni da errore di validazione in fase di import
			}
			if(portaApplicativa.getMessageSecurity().getResponseFlow()!=null && portaApplicativa.getMessageSecurity().getResponseFlow().sizeParameterList()<=0) {
				portaApplicativa.getMessageSecurity().setResponseFlow(null); // altrimeni da errore di validazione in fase di import
			}
		}
		
		if(portaApplicativa.getSoggetti()!=null && portaApplicativa.getSoggetti().sizeSoggettoList()<=0) {
			portaApplicativa.setSoggetti(null); // altrimeni da errore di validazione in fase di import
		}
		
		if(portaApplicativa.getRuoli()!=null && portaApplicativa.getRuoli().sizeRuoloList()<=0) {
			portaApplicativa.setRuoli(null); // altrimeni da errore di validazione in fase di import
		}
			
		if(portaApplicativa.getScope()!=null && portaApplicativa.getScope().sizeScopeList()<=0) {
			portaApplicativa.setScope(null); // altrimeni da errore di validazione in fase di import
		}
		
		if(portaApplicativa.getCorrelazioneApplicativa()!=null && portaApplicativa.getCorrelazioneApplicativa().sizeElementoList()<=0) {
			portaApplicativa.setCorrelazioneApplicativa(null); // altrimeni da errore di validazione in fase di import
		}
		if(portaApplicativa.getCorrelazioneApplicativaRisposta()!=null && portaApplicativa.getCorrelazioneApplicativaRisposta().sizeElementoList()<=0) {
			portaApplicativa.setCorrelazioneApplicativaRisposta(null); // altrimeni da errore di validazione in fase di import
		}
	}

	

	
	// ---- UTILITY
	
	private void clean(org.openspcoop2.core.config.Connettore connettoreConfigurazione){
		connettoreConfigurazione.setNomeRegistro(null);
		connettoreConfigurazione.setTipoDestinatarioTrasmissioneBusta(null);
		connettoreConfigurazione.setNomeDestinatarioTrasmissioneBusta(null);
		connettoreConfigurazione.setCustom(null);
	}
	
	private void clean(org.openspcoop2.core.config.GestioneErrore gestioneErrore){
		gestioneErrore.setNome(null);
	}
	
	private void clean(ProtocolProperty pp){
		pp.setByteFile(null);
		pp.setIdProprietario(null);
		pp.setTipoProprietario(null);
	}
	
}