SoggettoVirtuale.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.pdd.config;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.openspcoop2.core.id.IDPortaApplicativa;
import org.openspcoop2.core.id.IDServizioApplicativo;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.pdd.core.GestoreMessaggi;
import org.openspcoop2.pdd.core.PdDContext;
import org.openspcoop2.pdd.core.behaviour.Behaviour;
import org.openspcoop2.pdd.core.behaviour.BehaviourForwardToFilter;
import org.openspcoop2.pdd.core.behaviour.BehaviourLoader;
import org.openspcoop2.pdd.core.behaviour.IBehaviour;
import org.openspcoop2.protocol.sdk.Busta;
import org.openspcoop2.protocol.sdk.IProtocolFactory;
import org.openspcoop2.protocol.sdk.state.IState;
import org.openspcoop2.protocol.sdk.state.RequestInfo;
/**
* Classe utilizzata per raccogliere le informazioni su servizi applicativi e
* soggetti reali associati ad un unico soggetto virtuale
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class SoggettoVirtuale implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private List<SoggettoVirtualeServizioApplicativo> soggettoVirtuale_serviziApplicativi = new ArrayList<SoggettoVirtualeServizioApplicativo>();
private int count = 0;
/* ******** C O S T R U T T O R E ******** */
/**
* Costruttore.
*
*
*/
public SoggettoVirtuale(){
}
public synchronized void addServizioApplicativo(SoggettoVirtualeServizioApplicativo sa){
this.count++;
sa.setId("SoggettoVirtuale-SA-"+this.count);
this.soggettoVirtuale_serviziApplicativi.add(sa);
}
public List<IDSoggetto> getSoggettiRealiSenzaDuplicati() {
List<IDSoggetto> list = new ArrayList<IDSoggetto>();
for (SoggettoVirtualeServizioApplicativo sa : this.soggettoVirtuale_serviziApplicativi) {
boolean find = false;
for (IDSoggetto giaTrovato : list) {
if( (sa.getIdSoggettoReale().getTipo().equals(giaTrovato.getTipo())) &&
(sa.getIdSoggettoReale().getNome().equals(giaTrovato.getNome())) ){
find = true;
break;
}
}
if(find == false){
list.add(sa.getIdSoggettoReale());
}
}
return list;
}
public List<String> getIdServiziApplicativi(boolean gestisciBehaviuorPerFiltri,GestoreMessaggi gestoreMessaggi,Busta busta, RequestInfo requestInfo,
PdDContext pddContext, IProtocolFactory<?> protocolFactory, IState state) throws Exception{
List<String> list = new ArrayList<>();
for (SoggettoVirtualeServizioApplicativo sa : this.soggettoVirtuale_serviziApplicativi) {
boolean filtrato = false;
if(gestisciBehaviuorPerFiltri){
if(sa.getPortaApplicativa().getBehaviour()!=null && sa.getPortaApplicativa().getBehaviour().getNome()!=null){
IBehaviour behaviourImpl = BehaviourLoader.newInstance(sa.getPortaApplicativa().getBehaviour(), null,
pddContext, protocolFactory, state);
Busta bustaConSoggettiReali = busta.newInstance();
// Inverto mitt-dest
// il mittente e' il SoggettoVirtuale
bustaConSoggettiReali.setMittente(busta.getDestinatario());
bustaConSoggettiReali.setTipoMittente(busta.getTipoDestinatario());
// sogg. destinatario reale
bustaConSoggettiReali.setDestinatario(sa.getIdSoggettoReale().getNome());
bustaConSoggettiReali.setTipoDestinatario(sa.getIdSoggettoReale().getTipo());
Behaviour behaviour = behaviourImpl.behaviour(gestoreMessaggi, bustaConSoggettiReali,
sa.getPortaApplicativa(), requestInfo);
if(behaviour!=null && behaviour.getForwardTo()!=null &&
behaviour.getForwardTo().size()==1){
BehaviourForwardToFilter filter = behaviour.getForwardTo().get(0).getFilter();
if(filter!=null){
// Provo a vedere se il sa รจ filtrato
List<IDServizioApplicativo> saAttuale = new ArrayList<IDServizioApplicativo>();
IDServizioApplicativo idSA = new IDServizioApplicativo();
idSA.setIdSoggettoProprietario(sa.getIdSoggettoReale());
idSA.setNome(sa.getNomeServizioApplicativo());
saAttuale.add(idSA);
List<IDServizioApplicativo> saFiltrato = filter.aggiornaDestinatariAbilitati(saAttuale);
if(saFiltrato.size()<=0){
filtrato=true;
}
}
}
}
}
if(filtrato==false){
list.add(sa.getId());
}
}
return list;
}
public String getNomeServizioApplicativo(String idServizioApplicativo){
for (SoggettoVirtualeServizioApplicativo sa : this.soggettoVirtuale_serviziApplicativi) {
if(sa.getId().equals(idServizioApplicativo)){
return sa.getNomeServizioApplicativo();
}
}
return null;
}
public IDSoggetto getSoggettoReale(String idServizioApplicativo){
for (SoggettoVirtualeServizioApplicativo sa : this.soggettoVirtuale_serviziApplicativi) {
if(sa.getId().equals(idServizioApplicativo)){
return sa.getIdSoggettoReale();
}
}
return null;
}
public IDPortaApplicativa getIDPortaApplicativa(String idServizioApplicativo){
for (SoggettoVirtualeServizioApplicativo sa : this.soggettoVirtuale_serviziApplicativi) {
if(sa.getId().equals(idServizioApplicativo)){
IDPortaApplicativa idPA = new IDPortaApplicativa();
idPA.setNome(sa.getPortaApplicativa().getNome());
return idPA;
}
}
return null;
}
}