SoggettoVirtuale.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */



  20. package org.openspcoop2.pdd.config;

  21. import java.io.Serializable;
  22. import java.util.ArrayList;
  23. import java.util.List;

  24. import org.openspcoop2.core.id.IDPortaApplicativa;
  25. import org.openspcoop2.core.id.IDServizioApplicativo;
  26. import org.openspcoop2.core.id.IDSoggetto;
  27. import org.openspcoop2.pdd.core.GestoreMessaggi;
  28. import org.openspcoop2.pdd.core.PdDContext;
  29. import org.openspcoop2.pdd.core.behaviour.Behaviour;
  30. import org.openspcoop2.pdd.core.behaviour.BehaviourForwardToFilter;
  31. import org.openspcoop2.pdd.core.behaviour.BehaviourLoader;
  32. import org.openspcoop2.pdd.core.behaviour.IBehaviour;
  33. import org.openspcoop2.protocol.sdk.Busta;
  34. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  35. import org.openspcoop2.protocol.sdk.state.IState;
  36. import org.openspcoop2.protocol.sdk.state.RequestInfo;



  37. /**
  38.  * Classe utilizzata per raccogliere le informazioni su servizi applicativi e
  39.  * soggetti reali associati ad un unico soggetto virtuale
  40.  *
  41.  * @author Poli Andrea (apoli@link.it)
  42.  * @author $Author$
  43.  * @version $Rev$, $Date$
  44.  */

  45. public class SoggettoVirtuale implements Serializable  {

  46.     /**
  47.      *
  48.      */
  49.     private static final long serialVersionUID = 1L;
  50.    
  51.     private List<SoggettoVirtualeServizioApplicativo> soggettoVirtuale_serviziApplicativi = new ArrayList<SoggettoVirtualeServizioApplicativo>();
  52.     private int count = 0;

  53.     /* ********  C O S T R U T T O R E  ******** */

  54.     /**
  55.      * Costruttore.
  56.      *
  57.      *
  58.      */
  59.     public SoggettoVirtuale(){
  60.     }


  61.     public synchronized void addServizioApplicativo(SoggettoVirtualeServizioApplicativo sa){
  62.         this.count++;
  63.         sa.setId("SoggettoVirtuale-SA-"+this.count);
  64.         this.soggettoVirtuale_serviziApplicativi.add(sa);
  65.     }
  66.    
  67.    
  68.     public List<IDSoggetto> getSoggettiRealiSenzaDuplicati() {
  69.         List<IDSoggetto> list = new ArrayList<IDSoggetto>();
  70.         for (SoggettoVirtualeServizioApplicativo sa : this.soggettoVirtuale_serviziApplicativi) {
  71.             boolean find = false;
  72.             for (IDSoggetto giaTrovato : list) {
  73.                 if( (sa.getIdSoggettoReale().getTipo().equals(giaTrovato.getTipo())) &&
  74.                         (sa.getIdSoggettoReale().getNome().equals(giaTrovato.getNome())) ){
  75.                     find = true;
  76.                     break;
  77.                 }
  78.             }
  79.             if(find == false){
  80.                 list.add(sa.getIdSoggettoReale());
  81.             }
  82.         }
  83.         return list;
  84.     }
  85.    
  86.     public List<String> getIdServiziApplicativi(boolean gestisciBehaviuorPerFiltri,GestoreMessaggi gestoreMessaggi,Busta busta, RequestInfo requestInfo,
  87.             PdDContext pddContext, IProtocolFactory<?> protocolFactory, IState state) throws Exception{
  88.         List<String> list = new ArrayList<>();
  89.         for (SoggettoVirtualeServizioApplicativo sa : this.soggettoVirtuale_serviziApplicativi) {

  90.             boolean filtrato = false;
  91.            
  92.             if(gestisciBehaviuorPerFiltri){
  93.                
  94.                 if(sa.getPortaApplicativa().getBehaviour()!=null && sa.getPortaApplicativa().getBehaviour().getNome()!=null){
  95.                    
  96.                     IBehaviour behaviourImpl = BehaviourLoader.newInstance(sa.getPortaApplicativa().getBehaviour(), null,
  97.                             pddContext, protocolFactory, state);
  98.                    
  99.                     Busta bustaConSoggettiReali = busta.newInstance();
  100.                     // Inverto mitt-dest
  101.                     // il mittente e' il SoggettoVirtuale
  102.                     bustaConSoggettiReali.setMittente(busta.getDestinatario());
  103.                     bustaConSoggettiReali.setTipoMittente(busta.getTipoDestinatario());
  104.                     // sogg. destinatario reale
  105.                     bustaConSoggettiReali.setDestinatario(sa.getIdSoggettoReale().getNome());
  106.                     bustaConSoggettiReali.setTipoDestinatario(sa.getIdSoggettoReale().getTipo());
  107.                    
  108.                     Behaviour behaviour = behaviourImpl.behaviour(gestoreMessaggi, bustaConSoggettiReali,
  109.                             sa.getPortaApplicativa(), requestInfo);
  110.                     if(behaviour!=null && behaviour.getForwardTo()!=null &&
  111.                             behaviour.getForwardTo().size()==1){
  112.                         BehaviourForwardToFilter filter = behaviour.getForwardTo().get(0).getFilter();
  113.                        
  114.                         if(filter!=null){
  115.                             // Provo a vedere se il sa รจ filtrato
  116.                             List<IDServizioApplicativo> saAttuale = new ArrayList<IDServizioApplicativo>();
  117.                             IDServizioApplicativo idSA = new IDServizioApplicativo();
  118.                             idSA.setIdSoggettoProprietario(sa.getIdSoggettoReale());
  119.                             idSA.setNome(sa.getNomeServizioApplicativo());
  120.                             saAttuale.add(idSA);
  121.                             List<IDServizioApplicativo> saFiltrato = filter.aggiornaDestinatariAbilitati(saAttuale);
  122.                             if(saFiltrato.size()<=0){
  123.                                 filtrato=true;
  124.                             }
  125.                         }
  126.                     }
  127.                 }
  128.                        
  129.             }
  130.            
  131.             if(filtrato==false){
  132.                 list.add(sa.getId());
  133.             }
  134.         }
  135.         return list;
  136.     }
  137.    
  138.     public String getNomeServizioApplicativo(String idServizioApplicativo){
  139.         for (SoggettoVirtualeServizioApplicativo sa : this.soggettoVirtuale_serviziApplicativi) {
  140.             if(sa.getId().equals(idServizioApplicativo)){
  141.                 return sa.getNomeServizioApplicativo();
  142.             }
  143.         }
  144.         return null;
  145.     }
  146.    
  147.     public IDSoggetto getSoggettoReale(String idServizioApplicativo){
  148.         for (SoggettoVirtualeServizioApplicativo sa : this.soggettoVirtuale_serviziApplicativi) {
  149.             if(sa.getId().equals(idServizioApplicativo)){
  150.                 return sa.getIdSoggettoReale();
  151.             }
  152.         }
  153.         return null;
  154.     }
  155.    
  156.     public IDPortaApplicativa getIDPortaApplicativa(String idServizioApplicativo){
  157.         for (SoggettoVirtualeServizioApplicativo sa : this.soggettoVirtuale_serviziApplicativi) {
  158.             if(sa.getId().equals(idServizioApplicativo)){
  159.                 IDPortaApplicativa idPA = new IDPortaApplicativa();
  160.                 idPA.setNome(sa.getPortaApplicativa().getNome());
  161.                 return idPA;
  162.             }
  163.         }
  164.         return null;
  165.     }
  166.    

  167. }