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

import org.openspcoop2.core.registry.AccordoCooperazione;
import org.openspcoop2.core.registry.AccordoServizioParteComune;
import org.openspcoop2.core.registry.AccordoServizioParteComuneServizioCompostoServizioComponente;
import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
import org.openspcoop2.core.registry.Azione;
import org.openspcoop2.core.registry.ConfigurazioneServizioAzione;
import org.openspcoop2.core.registry.Documento;
import org.openspcoop2.core.registry.Fruitore;
import org.openspcoop2.core.registry.Gruppo;
import org.openspcoop2.core.registry.IdSoggetto;
import org.openspcoop2.core.registry.Operation;
import org.openspcoop2.core.registry.PortType;
import org.openspcoop2.core.registry.PortaDominio;
import org.openspcoop2.core.registry.ProtocolProperty;
import org.openspcoop2.core.registry.Resource;
import org.openspcoop2.core.registry.ResourceResponse;
import org.openspcoop2.core.registry.Ruolo;
import org.openspcoop2.core.registry.Scope;
import org.openspcoop2.core.registry.constants.BindingUse;
import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;

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

	public void clean(PortaDominio portaDominio){

		portaDominio.setSuperUser(null);
		
	}
	
	public void clean(Gruppo gruppo){

		gruppo.setSuperUser(null);
		
	}
	
	public void clean(Ruolo ruolo){

		ruolo.setSuperUser(null);
		
	}
	
	public void clean(Scope scope){

		scope.setSuperUser(null);
		
	}
		
	public void clean(org.openspcoop2.core.registry.Soggetto soggettoRegistro){
		
		soggettoRegistro.setSuperUser(null);
		soggettoRegistro.setPrivato(null);
		
		if(soggettoRegistro.getConnettore()!=null){
			this.clean(soggettoRegistro.getConnettore());
		}
		
		if(soggettoRegistro.sizeProtocolPropertyList()>0) {
			for (ProtocolProperty pp : soggettoRegistro.getProtocolPropertyList()) {
				this.clean(pp);
			}
		}
	}

	public void clean(AccordoServizioParteComune accordo){

		accordo.setSuperUser(null);
		accordo.setStatoPackage(null);
		accordo.setPrivato(null);
		accordo.setByteWsdlDefinitorio(null);
		accordo.setByteWsdlConcettuale(null);
		accordo.setByteWsdlLogicoErogatore(null);
		accordo.setByteWsdlLogicoFruitore(null);
		accordo.setByteSpecificaConversazioneConcettuale(null);
		accordo.setByteSpecificaConversazioneErogatore(null);
		accordo.setByteSpecificaConversazioneFruitore(null);
		
		if(accordo.getServizioComposto()!=null){
			accordo.getServizioComposto().setIdAccordoCooperazione(null);
			
			if(accordo.getServizioComposto().sizeServizioComponenteList()>0){
				for (AccordoServizioParteComuneServizioCompostoServizioComponente servizioComponente : accordo.getServizioComposto().getServizioComponenteList()) {
					servizioComponente.setIdServizioComponente(null);
				}
			}
			
			if(accordo.getServizioComposto().sizeSpecificaCoordinamentoList()>0){
				for (Documento documento : accordo.getServizioComposto().getSpecificaCoordinamentoList()) {
					this.clean(documento);
				}
			}
		}
		
		if(accordo.sizePortTypeList()>0){
			for (PortType portType : accordo.getPortTypeList()) {
				
				if(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT.equals(portType.getProfiloPT())){
					// si reimpostano tutti, poiche' viene eliminato il profiloPT
					portType.setProfiloCollaborazione(accordo.getProfiloCollaborazione());
					portType.setConfermaRicezione(accordo.getConfermaRicezione());
					portType.setConsegnaInOrdine(accordo.getConsegnaInOrdine());
					portType.setFiltroDuplicati(accordo.getFiltroDuplicati());
					portType.setIdCollaborazione(accordo.getIdCollaborazione());
					portType.setIdRiferimentoRichiesta(accordo.getIdRiferimentoRichiesta());
					portType.setScadenza(accordo.getScadenza());
				}
				portType.setProfiloPT(null);
				portType.setIdAccordo(null);
				
				if(portType.sizeAzioneList()>0){
					for (Operation operation : portType.getAzioneList()) {
						
						if(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT.equals(operation.getProfAzione())){
							// si reimpostano tutti, poiche' viene eliminato il profAzione
							if(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT.equals(portType.getProfiloPT())){
								operation.setProfiloCollaborazione(accordo.getProfiloCollaborazione());
								operation.setConfermaRicezione(accordo.getConfermaRicezione());
								operation.setConsegnaInOrdine(accordo.getConsegnaInOrdine());
								operation.setFiltroDuplicati(accordo.getFiltroDuplicati());
								operation.setIdCollaborazione(accordo.getIdCollaborazione());
								operation.setIdRiferimentoRichiesta(accordo.getIdRiferimentoRichiesta());
								operation.setScadenza(accordo.getScadenza());
							}
							else {
								operation.setProfiloCollaborazione(portType.getProfiloCollaborazione());
								operation.setConfermaRicezione(portType.getConfermaRicezione());
								operation.setConsegnaInOrdine(portType.getConsegnaInOrdine());
								operation.setFiltroDuplicati(portType.getFiltroDuplicati());
								operation.setIdCollaborazione(portType.getIdCollaborazione());
								operation.setIdRiferimentoRichiesta(portType.getIdRiferimentoRichiesta());
								operation.setScadenza(portType.getScadenza());
							}
						}
						operation.setProfAzione(null);
						operation.setIdPortType(null);
						if(operation.getMessageInput()!=null){
							if(operation.getMessageInput().sizePartList()<=0){
								if(operation.getMessageInput().getSoapNamespace()==null && 
										(operation.getMessageInput().getUse()==null || BindingUse.LITERAL.equals(operation.getMessageInput().getUse())) // il default non viene serializzato
									){
									operation.setMessageInput(null);
								}
							}
						}
						if(operation.getMessageOutput()!=null){
							if(operation.getMessageOutput().sizePartList()<=0){
								if(operation.getMessageOutput().getSoapNamespace()==null && 
										(operation.getMessageOutput().getUse()==null || BindingUse.LITERAL.equals(operation.getMessageOutput().getUse())) // il default non viene serializzato
									){
									operation.setMessageOutput(null);
								}
							}
						}
						
						if(operation.sizeProtocolPropertyList()>0) {
							for (ProtocolProperty pp : operation.getProtocolPropertyList()) {
								this.clean(pp);
							}
						}
					}
				}
				
				if(portType.sizeProtocolPropertyList()>0) {
					for (ProtocolProperty pp : portType.getProtocolPropertyList()) {
						this.clean(pp);
					}
				}
			}
		}
		
		if(accordo.sizeAzioneList()>0){
			for (Azione azione : accordo.getAzioneList()) {
				
				if(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT.equals(azione.getProfAzione())){
					// si reimpostano tutti, poiche' viene eliminato il profAzione
					azione.setProfiloCollaborazione(accordo.getProfiloCollaborazione());
					azione.setConfermaRicezione(accordo.getConfermaRicezione());
					azione.setConsegnaInOrdine(accordo.getConsegnaInOrdine());
					azione.setFiltroDuplicati(accordo.getFiltroDuplicati());
					azione.setIdCollaborazione(accordo.getIdCollaborazione());
					azione.setIdRiferimentoRichiesta(accordo.getIdRiferimentoRichiesta());
					azione.setScadenza(accordo.getScadenza());
				}
				azione.setProfAzione(null);
				azione.setIdAccordo(null);
				
				if(azione.sizeProtocolPropertyList()>0) {
					for (ProtocolProperty pp : azione.getProtocolPropertyList()) {
						this.clean(pp);
					}
				}
			}
		}
		
		if(accordo.sizeResourceList()>0){
			for (Resource resource : accordo.getResourceList()) {
				
				if(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT.equals(resource.getProfAzione())){
					// si reimpostano tutti, poiche' viene eliminato il profAzione
					//resource.setProfiloCollaborazione(accordo.getProfiloCollaborazione());
					resource.setConfermaRicezione(accordo.getConfermaRicezione());
					resource.setConsegnaInOrdine(accordo.getConsegnaInOrdine());
					resource.setFiltroDuplicati(accordo.getFiltroDuplicati());
					resource.setIdCollaborazione(accordo.getIdCollaborazione());
					resource.setIdRiferimentoRichiesta(accordo.getIdRiferimentoRichiesta());
					resource.setScadenza(accordo.getScadenza());
				}
				resource.setProfAzione(null);
				resource.setIdAccordo(null);
				
				if(resource.getRequest()!=null) {
					resource.getRequest().setIdResource(null);
				}
				
				if(resource.sizeResponseList()>0) {
					for (ResourceResponse rr : resource.getResponseList()) {
						rr.setIdResource(null);
					}
				}
				
				if(resource.sizeProtocolPropertyList()>0) {
					for (ProtocolProperty pp : resource.getProtocolPropertyList()) {
						this.clean(pp);
					}
				}
			}
		}
		
		if(accordo.sizeAllegatoList()>0){
			for (Documento documento : accordo.getAllegatoList()) {
				this.clean(documento);
			}
		}
		if(accordo.sizeSpecificaSemiformaleList()>0){
			for (Documento documento : accordo.getSpecificaSemiformaleList()) {
				this.clean(documento);
			}
		}
		
		if(accordo.sizeProtocolPropertyList()>0) {
			for (ProtocolProperty pp : accordo.getProtocolPropertyList()) {
				this.clean(pp);
			}
		}
	}

	public void clean(AccordoServizioParteSpecifica accordo){
		
		accordo.setSuperUser(null);
		accordo.setStatoPackage(null);
		accordo.setPrivato(null);
		accordo.setIdAccordo(null);
		accordo.setIdSoggetto(null);
		accordo.setByteWsdlImplementativoErogatore(null);
		accordo.setByteWsdlImplementativoFruitore(null);
		
		accordo.setTipoSoggettoErogatore(null);
		accordo.setNomeSoggettoErogatore(null);
		
		if(accordo.getConfigurazioneServizio()!=null){
						
			if(accordo.getConfigurazioneServizio().getConnettore()!=null){
				this.clean(accordo.getConfigurazioneServizio().getConnettore());
			}
			
			if(accordo.getConfigurazioneServizio().sizeConfigurazioneAzioneList()>0){
				for (ConfigurazioneServizioAzione servizioAzione : accordo.getConfigurazioneServizio().getConfigurazioneAzioneList()) {
					if(servizioAzione.getConnettore()!=null){
						this.clean(servizioAzione.getConnettore());
					}
				}
			}
			
		}
		
		if(accordo.sizeFruitoreList()>0){
			for (Fruitore fruitore : accordo.getFruitoreList()) {
				this.clean(fruitore);
				
				if(fruitore.sizeConfigurazioneAzioneList()>0){
					for (ConfigurazioneServizioAzione servizioAzione : fruitore.getConfigurazioneAzioneList()) {
						if(servizioAzione.getConnettore()!=null){
							this.clean(servizioAzione.getConnettore());
						}
					}
				}
			}
		}
		
		if(accordo.sizeAllegatoList()>0){
			for (Documento documento : accordo.getAllegatoList()) {
				this.clean(documento);
			}
		}
		if(accordo.sizeSpecificaSemiformaleList()>0){
			for (Documento documento : accordo.getSpecificaSemiformaleList()) {
				this.clean(documento);
			}
		}
		if(accordo.sizeSpecificaLivelloServizioList()>0){
			for (Documento documento : accordo.getSpecificaLivelloServizioList()) {
				this.clean(documento);
			}
		}
		if(accordo.sizeSpecificaSicurezzaList()>0){
			for (Documento documento : accordo.getSpecificaSicurezzaList()) {
				this.clean(documento);
			}
		}
		
		if(accordo.sizeProtocolPropertyList()>0) {
			for (ProtocolProperty pp : accordo.getProtocolPropertyList()) {
				this.clean(pp);
			}
		}
	}
	
	public void clean(AccordoCooperazione accordo){

		accordo.setSuperUser(null);
		accordo.setStatoPackage(null);
		accordo.setPrivato(null);
		
		while(accordo.sizeUriServiziCompostiList()>0){
			accordo.removeUriServiziComposti(0);
		}
		
		if(accordo.sizeAllegatoList()>0){
			for (Documento documento : accordo.getAllegatoList()) {
				this.clean(documento);
			}
		}
		if(accordo.sizeSpecificaSemiformaleList()>0){
			for (Documento documento : accordo.getSpecificaSemiformaleList()) {
				this.clean(documento);
			}
		}
		
		if(accordo.getElencoPartecipanti()!=null){
			if(accordo.getElencoPartecipanti().sizeSoggettoPartecipanteList()>0){
				for (IdSoggetto idSoggetto : accordo.getElencoPartecipanti().getSoggettoPartecipanteList()) {
					if(idSoggetto.getIdSoggetto()!=null){
						idSoggetto.setIdSoggetto(null);
					}
				}	
			}	
		}
		
		if(accordo.sizeProtocolPropertyList()>0) {
			for (ProtocolProperty pp : accordo.getProtocolPropertyList()) {
				this.clean(pp);
			}
		}
		
	}
	
	public void clean(Fruitore fruitore){
		
		fruitore.setStatoPackage(null);
		fruitore.setByteWsdlImplementativoErogatore(null);
		fruitore.setByteWsdlImplementativoFruitore(null);
		fruitore.setIdSoggetto(null);
		fruitore.setIdServizio(null);
		
		if(fruitore.getConnettore()!=null){
			this.clean(fruitore.getConnettore());
		}
		
		if(fruitore.sizeConfigurazioneAzioneList()>0) {
			for (ConfigurazioneServizioAzione configServizioAzione : fruitore.getConfigurazioneAzioneList()) {
				if(configServizioAzione.getConnettore()!=null) {
					this.clean(configServizioAzione.getConnettore());
				}
			}
		}
		
		while(fruitore.sizeServizioApplicativoList()>0){
			fruitore.removeServizioApplicativo(0);
		}
		
		if(fruitore.sizeProtocolPropertyList()>0) {
			for (ProtocolProperty pp : fruitore.getProtocolPropertyList()) {
				this.clean(pp);
			}
		}
		
	}

	
	// ---- UTILITY
	
	private void clean(org.openspcoop2.core.registry.Connettore connettoreRegistry){
		connettoreRegistry.setCustom(null);
	}
	
	private void clean(Documento documento){
		documento.setByteContenuto(null);
		documento.setRuolo(null);
		documento.setTipoProprietarioDocumento(null);
		documento.setIdProprietarioDocumento(null);
	}
	
	private void clean(ProtocolProperty pp){
		pp.setByteFile(null);
		pp.setIdProprietario(null);
		pp.setTipoProprietario(null);
	}
}