BeanUtilities.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.core.registry.driver;

  21. import java.lang.reflect.Method;
  22. import java.util.ArrayList;
  23. import java.util.List;

  24. import org.openspcoop2.core.id.IDAccordo;
  25. import org.openspcoop2.core.id.IDAccordoCooperazione;
  26. import org.openspcoop2.core.id.IDServizio;
  27. import org.openspcoop2.core.id.IDSoggetto;
  28. import org.openspcoop2.core.registry.AccordoCooperazione;
  29. import org.openspcoop2.core.registry.IdSoggetto;
  30. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  31. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  32. import org.openspcoop2.core.registry.Documento;
  33. import org.openspcoop2.core.registry.PortaDominio;
  34. import org.openspcoop2.core.registry.RegistroServizi;
  35. import org.openspcoop2.core.registry.Soggetto;
  36. import org.openspcoop2.core.registry.constants.RuoliDocumento;
  37. import org.openspcoop2.core.registry.constants.TipiDocumentoCoordinamento;
  38. import org.openspcoop2.core.registry.constants.TipiDocumentoLivelloServizio;
  39. import org.openspcoop2.core.registry.constants.TipiDocumentoSemiformale;
  40. import org.openspcoop2.core.registry.constants.TipiDocumentoSicurezza;

  41. /**
  42.  * Utility sui bean del package
  43.  *  
  44.  * @author Poli Andrea (apoli@link.it)
  45.  * @author $Author$
  46.  * @version $Rev$, $Date$
  47.  */
  48. public abstract class BeanUtilities implements IDriverRegistroServiziGet {

  49.    
  50.     private static final String DRIVER_REGISTRO_SERVIZI_DB = "org.openspcoop2.core.registry.driver.db.DriverRegistroServiziDB";
  51.    
  52.    
  53.     /**
  54.      * Controlla che il bean presente nel registro, sia uguale al bean passato come parametro
  55.      *
  56.      * @param idAccordo
  57.      * @param accordoCooperazione
  58.      * @return true se il bean presente nel registro, sia uguale al bean passato come parametro
  59.      */
  60.     @Override
  61.     public boolean verificaAccordoCooperazione(IDAccordoCooperazione idAccordo,AccordoCooperazione accordoCooperazione)throws DriverRegistroServiziException {
  62.         return verificaAccordoCooperazione(idAccordo,accordoCooperazione,true);
  63.     }
  64.     @Override
  65.     public boolean verificaAccordoCooperazione(IDAccordoCooperazione idAccordo,AccordoCooperazione accordoCooperazione,boolean checkID)throws DriverRegistroServiziException{
  66.         AccordoCooperazione beanRegistro = null;
  67.         try{
  68.             if(this.getClass().getName().equals(BeanUtilities.DRIVER_REGISTRO_SERVIZI_DB)){
  69.                 Method m = this.getClass().getMethod("getAccordoCooperazione", IDAccordoCooperazione.class,boolean.class);
  70.                 beanRegistro = (AccordoCooperazione) m.invoke(this, idAccordo, true);
  71.             }
  72.             else
  73.                 beanRegistro =  this.getAccordoCooperazione(idAccordo);
  74.         }catch(DriverRegistroServiziNotFound dNotFound){}
  75.         catch(Exception e){
  76.             throw new DriverRegistroServiziException(e.getMessage(),e);
  77.         }
  78.         if(beanRegistro==null){
  79.             if(accordoCooperazione==null)
  80.                 return true;
  81.             else
  82.                 return false;
  83.         }else{
  84.             if(accordoCooperazione==null)
  85.                 return false;
  86.             else
  87.                 return beanRegistro.equals(accordoCooperazione,checkID);
  88.         }
  89.     }
  90.    
  91.    
  92.    
  93.     /**
  94.      * Controlla che il bean presente nel registro, sia uguale al bean passato come parametro
  95.      *
  96.      * @param idAccordo
  97.      * @param accordoServizioParteComune
  98.      * @return true se il bean presente nel registro, sia uguale al bean passato come parametro
  99.      */
  100.     @Override
  101.     public boolean verificaAccordoServizioParteComune(IDAccordo idAccordo,AccordoServizioParteComune accordoServizioParteComune)throws DriverRegistroServiziException {
  102.         return verificaAccordoServizioParteComune(idAccordo,accordoServizioParteComune,true);
  103.     }
  104.     @Override
  105.     public boolean verificaAccordoServizioParteComune(IDAccordo idAccordo,AccordoServizioParteComune accordoServizioParteComune,boolean checkID)throws DriverRegistroServiziException{
  106.         AccordoServizioParteComune beanRegistro = null;
  107.         try{
  108.             if(this.getClass().getName().equals(BeanUtilities.DRIVER_REGISTRO_SERVIZI_DB)){
  109.                 Method m = this.getClass().getMethod("getAccordoServizioParteComune", IDAccordo.class,boolean.class);
  110.                 beanRegistro = (AccordoServizioParteComune) m.invoke(this, idAccordo, true);
  111.             }
  112.             else
  113.                 beanRegistro =  this.getAccordoServizioParteComune(idAccordo);
  114.         }catch(DriverRegistroServiziNotFound dNotFound){}
  115.         catch(Exception e){
  116.             throw new DriverRegistroServiziException(e.getMessage(),e);
  117.         }
  118.         if(beanRegistro==null){
  119.             if(accordoServizioParteComune==null)
  120.                 return true;
  121.             else
  122.                 return false;
  123.         }else{
  124.             if(accordoServizioParteComune==null)
  125.                 return false;
  126.             else
  127.                 return beanRegistro.equals(accordoServizioParteComune,checkID);
  128.         }
  129.     }
  130.    
  131.    
  132.     /**
  133.      * Controlla che il bean presente nel registro, sia uguale al bean passato come parametro
  134.      *
  135.      * @param nomePdd
  136.      * @param pdd
  137.      * @return true se il bean presente nel registro, sia uguale al bean passato come parametro
  138.      */
  139.     @Override
  140.     public boolean verificaPortaDominio(String nomePdd,PortaDominio pdd)throws DriverRegistroServiziException{
  141.         return this.verificaPortaDominio(nomePdd, pdd,true);
  142.     }
  143.     @Override
  144.     public boolean verificaPortaDominio(String nomePdd,PortaDominio pdd,boolean checkID)throws DriverRegistroServiziException{
  145.         PortaDominio beanRegistro = null;
  146.         try{
  147.             beanRegistro = this.getPortaDominio(nomePdd);
  148.         }catch(DriverRegistroServiziNotFound dNotFound){}
  149.         if(beanRegistro==null){
  150.             if(pdd==null)
  151.                 return true;
  152.             else
  153.                 return false;
  154.         }else{
  155.             if(pdd==null)
  156.                 return false;
  157.             else
  158.                 return beanRegistro.equals(pdd,checkID);
  159.         }
  160.     }
  161.    
  162.    
  163.     /**
  164.      * Controlla che il bean presente nel registro, sia uguale al bean passato come parametro
  165.      *
  166.      * @param idSoggetto
  167.      * @param soggetto
  168.      * @return true se il bean presente nel registro, sia uguale al bean passato come parametro
  169.      * @throws DriverRegistroServiziException
  170.      */
  171.     @Override
  172.     public boolean verificaSoggetto(IDSoggetto idSoggetto,Soggetto soggetto)throws DriverRegistroServiziException {
  173.         return verificaSoggetto(idSoggetto, soggetto,true);
  174.     }
  175.     @Override
  176.     public boolean verificaSoggetto(IDSoggetto idSoggetto,Soggetto soggetto,boolean checkID)throws DriverRegistroServiziException{
  177.         Soggetto beanRegistro = null;
  178.         try{
  179.             beanRegistro = this.getSoggetto(idSoggetto);
  180.         }catch(DriverRegistroServiziNotFound dNotFound){}
  181.         if(beanRegistro==null){
  182.             if(soggetto==null)
  183.                 return true;
  184.             else
  185.                 return false;
  186.         }else{
  187.             if(soggetto==null)
  188.                 return false;
  189.             else
  190.                 return beanRegistro.equals(soggetto,checkID);
  191.         }
  192.     }

  193.    
  194.     /**
  195.      * Controlla che il bean presente nel registro, sia uguale al bean passato come parametro
  196.      *
  197.      * @param idServizio
  198.      * @param accordoServizioParteSpecifica
  199.      * @return true se il bean presente nel registro, sia uguale al bean passato come parametro
  200.      * @throws DriverRegistroServiziException
  201.      */
  202.     @Override
  203.     public boolean verificaAccordoServizioParteSpecifica(IDServizio idServizio,AccordoServizioParteSpecifica accordoServizioParteSpecifica)throws DriverRegistroServiziException {
  204.         return verificaAccordoServizioParteSpecifica(idServizio,accordoServizioParteSpecifica,true);
  205.     }
  206.     @Override
  207.     public boolean verificaAccordoServizioParteSpecifica(IDServizio idServizio,AccordoServizioParteSpecifica accordoServizioParteSpecifica,boolean checkID)throws DriverRegistroServiziException{
  208.         AccordoServizioParteSpecifica beanRegistro = null;
  209.         try{
  210.             if(this.getClass().getName().equals(BeanUtilities.DRIVER_REGISTRO_SERVIZI_DB)){
  211.                 Method m = this.getClass().getMethod("getAccordoServizioParteSpecifica", IDServizio.class,boolean.class);
  212.                 beanRegistro = (AccordoServizioParteSpecifica) m.invoke(this, idServizio, true);
  213.             }
  214.             else
  215.                 beanRegistro =  this.getAccordoServizioParteSpecifica(idServizio);
  216.         }catch(DriverRegistroServiziNotFound dNotFound){}
  217.         catch(Exception e){
  218.             throw new DriverRegistroServiziException(e.getMessage(),e);
  219.         }
  220.         if(beanRegistro==null){
  221.             if(accordoServizioParteSpecifica==null)
  222.                 return true;
  223.             else
  224.                 return false;
  225.         }else{
  226.             if(accordoServizioParteSpecifica==null)
  227.                 return false;
  228.             else
  229.                 return beanRegistro.equals(accordoServizioParteSpecifica,checkID);
  230.         }
  231.     }
  232.    
  233.     /**
  234.      * Controlla che il bean presente nel registro, sia uguale al bean passato come parametro
  235.      *
  236.      * @param idSoggetto Identificatore del Soggetto di tipo {@link org.openspcoop2.core.id.IDSoggetto}.
  237.      * @param idAccordoServizioParteComune ID dell'accordo che deve implementare il servizio correlato
  238.      * @param accordoServizioParteSpecifica
  239.      * @return true se il bean presente nel registro, sia uguale al bean passato come parametro
  240.      * @throws DriverRegistroServiziException
  241.      */
  242.     @Override
  243.     public boolean verificaAccordoServizioParteSpecifica_ServizioCorrelato(IDSoggetto idSoggetto, IDAccordo idAccordoServizioParteComune,AccordoServizioParteSpecifica accordoServizioParteSpecifica)throws DriverRegistroServiziException {
  244.         return verificaAccordoServizioParteSpecifica_ServizioCorrelato(idSoggetto,idAccordoServizioParteComune,accordoServizioParteSpecifica,true);
  245.     }
  246.     @Override
  247.     public boolean verificaAccordoServizioParteSpecifica_ServizioCorrelato(IDSoggetto idSoggetto, IDAccordo idAccordoServizioParteComune,AccordoServizioParteSpecifica accordoServizioParteSpecifica,boolean checkID)throws DriverRegistroServiziException{
  248.         AccordoServizioParteSpecifica beanRegistro = null;
  249.         try{
  250.             if(this.getClass().getName().equals(BeanUtilities.DRIVER_REGISTRO_SERVIZI_DB)){
  251.                 Method m = this.getClass().getMethod("getAccordoServizioParteSpecifica_ServizioCorrelato", IDSoggetto.class,IDAccordo.class,boolean.class);
  252.                 beanRegistro = (AccordoServizioParteSpecifica) m.invoke(this, idSoggetto, idAccordoServizioParteComune, true);
  253.             }
  254.             else
  255.                 beanRegistro =  this.getAccordoServizioParteSpecifica_ServizioCorrelato(idSoggetto,idAccordoServizioParteComune);
  256.         }catch(DriverRegistroServiziNotFound dNotFound){}
  257.         catch(Exception e){
  258.             throw new DriverRegistroServiziException(e.getMessage(),e);
  259.         }
  260.         if(beanRegistro==null){
  261.             if(accordoServizioParteSpecifica==null)
  262.                 return true;
  263.             else
  264.                 return false;
  265.         }else{
  266.             if(accordoServizioParteSpecifica==null)
  267.                 return false;
  268.             else
  269.                 return beanRegistro.equals(accordoServizioParteSpecifica,checkID);
  270.         }
  271.     }
  272.    
  273.    
  274.    
  275.    
  276.     public static IDSoggetto getSoggettoReferenteID(IdSoggetto ass){
  277.         if(ass!=null && ass.getTipo()!=null && ass.getNome()!=null){
  278.             return new IDSoggetto(ass.getTipo(),ass.getNome());
  279.         }else{
  280.             return null;
  281.         }
  282.     }

  283.     public static IDSoggetto getSoggettoErogatore(AccordoServizioParteSpecifica asps){
  284.         if(asps!=null && asps.getTipoSoggettoErogatore()!=null && asps.getNomeSoggettoErogatore()!=null){
  285.             return new IDSoggetto(asps.getTipoSoggettoErogatore(),asps.getNomeSoggettoErogatore());
  286.         }else{
  287.             return null;
  288.         }
  289.     }
  290.    
  291.    
  292.     public static void validateTipoRuolo(String tipo,String ruolo)throws DriverRegistroServiziException{
  293.         if(RuoliDocumento.allegato.toString().equals(ruolo)){
  294.             // qualsiasi tipo e' accettato
  295.             return;
  296.         }else if(RuoliDocumento.specificaSemiformale.toString().equals(ruolo)){
  297.             if(TipiDocumentoSemiformale.HTML.toString().equals(tipo)==false &&
  298.                     TipiDocumentoSemiformale.LINGUAGGIO_NATURALE.toString().equals(tipo)==false &&
  299.                     TipiDocumentoSemiformale.UML.toString().equals(tipo)==false &&
  300.                     TipiDocumentoSemiformale.XML.toString().equals(tipo)==false &&
  301.                     TipiDocumentoSemiformale.XSD.toString().equals(tipo)==false &&
  302.                     TipiDocumentoSemiformale.JSON.toString().equals(tipo)==false &&
  303.                     TipiDocumentoSemiformale.YAML.toString().equals(tipo)==false){
  304.                 throw new DriverRegistroServiziException("Tipo["+tipo+"] non accettato per il Ruolo["+ruolo+"], valori ammessi sono: "+
  305.                         TipiDocumentoSemiformale.HTML.toString()+","
  306.                         +TipiDocumentoSemiformale.LINGUAGGIO_NATURALE.toString()+","
  307.                         +TipiDocumentoSemiformale.UML.toString()+","
  308.                         +TipiDocumentoSemiformale.XML.toString()+","
  309.                         +TipiDocumentoSemiformale.XSD.toString()+","
  310.                         +TipiDocumentoSemiformale.JSON.toString()+","
  311.                         +TipiDocumentoSemiformale.YAML.toString());
  312.             }
  313.         }else if(RuoliDocumento.specificaLivelloServizio.toString().equals(ruolo)){
  314.             if(TipiDocumentoLivelloServizio.WSAGREEMENT.toString().equals(tipo)==false &&
  315.                     TipiDocumentoLivelloServizio.WSLA.toString().equals(tipo)==false){
  316.                 throw new DriverRegistroServiziException("Tipo["+tipo+"] non accettato per il Ruolo["+ruolo+"], valori ammessi sono: "+
  317.                         TipiDocumentoLivelloServizio.WSAGREEMENT.toString()+","
  318.                         +TipiDocumentoLivelloServizio.WSLA.toString());
  319.             }
  320.         }else if(RuoliDocumento.specificaSicurezza.toString().equals(ruolo)){
  321.             if(TipiDocumentoSicurezza.LINGUAGGIO_NATURALE.toString().equals(tipo)==false &&
  322.                     TipiDocumentoSicurezza.WSPOLICY.toString().equals(tipo)==false &&
  323.                     TipiDocumentoSicurezza.XACML_POLICY.toString().equals(tipo)==false){
  324.                 throw new DriverRegistroServiziException("Tipo["+tipo+"] non accettato per il Ruolo["+ruolo+"], valori ammessi sono: "+
  325.                         TipiDocumentoSicurezza.LINGUAGGIO_NATURALE.toString()+","
  326.                         +TipiDocumentoSicurezza.WSPOLICY.toString()+","
  327.                         +TipiDocumentoSicurezza.XACML_POLICY.toString());
  328.             }
  329.         }else if(RuoliDocumento.specificaCoordinamento.toString().equals(ruolo)){
  330.             if(TipiDocumentoCoordinamento.BPEL.toString().equals(tipo)==false &&
  331.                     TipiDocumentoCoordinamento.WSCDL.toString().equals(tipo)==false){
  332.                 throw new DriverRegistroServiziException("Tipo["+tipo+"] non accettato per il Ruolo["+ruolo+"], valori ammessi sono: "+
  333.                         TipiDocumentoCoordinamento.BPEL.toString()+","
  334.                         +TipiDocumentoCoordinamento.WSCDL.toString());
  335.             }
  336.         }else{
  337.             throw new DriverRegistroServiziException("Ruolo non conosciuto");
  338.         }
  339.     }
  340.    
  341.     /**
  342.      * Dato un bean {@link AccordoServizioParteComune}, {@link AccordoCooperazione}, {@link AccordoServizioParteSpecifica} ritorna la lista
  343.      * di tutti i {@link Documento} contenuti nel bean, recuperandoli dagli array interni al bean.
  344.      * @param <T> -{@link AccordoServizioParteComune}, {@link AccordoCooperazione}, {@link AccordoServizioParteSpecifica}
  345.      * @param o -Il bean del quale si vogliono tutti i documenti
  346.      * @return La lista dei documenti. La lista non e' mai null.
  347.      */
  348.     public static <T> ArrayList<Documento> getAllDocumenti(T o){
  349.         ArrayList<Documento> lista = new ArrayList<Documento>();
  350.        
  351.         if(o instanceof AccordoServizioParteComune){
  352.             AccordoServizioParteComune b = (AccordoServizioParteComune)o;
  353.            
  354.             if(b.sizeAllegatoList()>0){
  355.                 for (Documento documento : b.getAllegatoList()) {
  356.                     lista.add(documento);
  357.                 }
  358.             }
  359.             if(b.sizeSpecificaSemiformaleList()>0){
  360.                 for (Documento documento : b.getSpecificaSemiformaleList()) {
  361.                     lista.add(documento);
  362.                 }
  363.             }
  364.         }else if (o instanceof AccordoCooperazione){
  365.             AccordoCooperazione b = (AccordoCooperazione)o;
  366.            
  367.             if(b.sizeAllegatoList()>0){
  368.                 for (Documento documento : b.getAllegatoList()) {
  369.                     lista.add(documento);
  370.                 }
  371.             }
  372.             if(b.sizeSpecificaSemiformaleList()>0){
  373.                 for (Documento documento : b.getSpecificaSemiformaleList()) {
  374.                     lista.add(documento);
  375.                 }
  376.             }
  377.            
  378.         }else if(o instanceof AccordoServizioParteSpecifica){
  379.             AccordoServizioParteSpecifica b = (AccordoServizioParteSpecifica)o;
  380.            
  381.             if(b.sizeAllegatoList()>0){
  382.                 for (Documento documento : b.getAllegatoList()) {
  383.                     lista.add(documento);
  384.                 }
  385.             }
  386.             if(b.sizeSpecificaSemiformaleList()>0){
  387.                 for (Documento documento : b.getSpecificaSemiformaleList()) {
  388.                     lista.add(documento);
  389.                 }
  390.             }
  391.             if(b.sizeSpecificaLivelloServizioList()>0){
  392.                 for (Documento documento : b.getSpecificaLivelloServizioList()) {
  393.                     lista.add(documento);
  394.                 }
  395.             }
  396.             if(b.sizeSpecificaSicurezzaList()>0){
  397.                 for (Documento documento : b.getSpecificaSicurezzaList()) {
  398.                     lista.add(documento);
  399.                 }
  400.             }
  401.         }
  402.        
  403.         //lista vuota
  404.         return lista;
  405.        
  406.     }
  407.    
  408.    
  409.    
  410.    
  411.    
  412.    
  413.     public RegistroServizi getImmagineCompletaRegistroServizi() throws DriverRegistroServiziException{

  414.         RegistroServizi registroServizi = new RegistroServizi();
  415.        
  416.         // Porte di Dominio
  417.         List<String> idPdd = null;
  418.         try{
  419.             idPdd = this.getAllIdPorteDominio(new FiltroRicerca());
  420.         }catch(DriverRegistroServiziNotFound dNotFound){}
  421.         if(idPdd!=null){
  422.             for(int i=0; i<idPdd.size(); i++){
  423.                 try{
  424.                     registroServizi.addPortaDominio(this.getPortaDominio(idPdd.get(i)));
  425.                 }catch(DriverRegistroServiziNotFound dNotfound){
  426.                     throw new DriverRegistroServiziException("Porta di Dominio ["+idPdd.get(i)+"] trovato tramite getAllId ma poi non recuperabile: "+dNotfound.getMessage(),dNotfound);
  427.                 }
  428.             }
  429.         }
  430.        
  431.         // Accordi di Cooperazione
  432.         List<IDAccordoCooperazione> idAccordiCooperazione = null;
  433.         try{
  434.             idAccordiCooperazione = this.getAllIdAccordiCooperazione(new FiltroRicercaAccordi());
  435.         }catch(DriverRegistroServiziNotFound dNotFound){}
  436.         if(idAccordiCooperazione!=null){
  437.             for(int i=0; i<idAccordiCooperazione.size(); i++){
  438.                 try{
  439.                     registroServizi.addAccordoCooperazione(this.getAccordoCooperazione(idAccordiCooperazione.get(i)));
  440.                 }catch(DriverRegistroServiziNotFound dNotfound){
  441.                     throw new DriverRegistroServiziException("Accordo di cooperazione ["+idAccordiCooperazione.get(i)+"] trovato tramite getAllId ma poi non recuperabile: "+dNotfound.getMessage(),dNotfound);
  442.                 }
  443.             }
  444.         }
  445.        
  446.         // Accordi di Servizio
  447.         List<IDAccordo> idAccordiServizio = null;
  448.         try{
  449.             idAccordiServizio = this.getAllIdAccordiServizioParteComune(new FiltroRicercaAccordi());
  450.         }catch(DriverRegistroServiziNotFound dNotFound){}
  451.         if(idAccordiServizio!=null){
  452.             for(int i=0; i<idAccordiServizio.size(); i++){
  453.                 try{
  454.                     registroServizi.addAccordoServizioParteComune(this.getAccordoServizioParteComune(idAccordiServizio.get(i)));
  455.                 }catch(DriverRegistroServiziNotFound dNotfound){
  456.                     throw new DriverRegistroServiziException("Accordo di servizio parte comune ["+idAccordiServizio.get(i)+"] trovato tramite getAllId ma poi non recuperabile: "+dNotfound.getMessage(),dNotfound);
  457.                 }
  458.             }
  459.         }
  460.        
  461.         // Soggetti
  462.         List<IDSoggetto> idSoggetti = null;
  463.         try{
  464.             idSoggetti = this.getAllIdSoggetti(new FiltroRicercaSoggetti());
  465.         }catch(DriverRegistroServiziNotFound dNotFound){}
  466.         if(idSoggetti!=null){
  467.             for(int i=0; i<idSoggetti.size(); i++){
  468.                 try{
  469.                     Soggetto soggetto = this.getSoggetto(idSoggetti.get(i));
  470.                    
  471.                     // I servizi possono contenere solo meta-informazioni (es. Driver DB)
  472.                     while(soggetto.sizeAccordoServizioParteSpecificaList()>0){
  473.                         soggetto.removeAccordoServizioParteSpecifica(0);
  474.                     }
  475.                    
  476.                     FiltroRicercaServizi filtro = new FiltroRicercaServizi();
  477.                     filtro.setTipoSoggettoErogatore(soggetto.getTipo());
  478.                     filtro.setNomeSoggettoErogatore(soggetto.getNome());
  479.                    
  480.                     // Recupero servizi con informazioni complete
  481.                     List<IDServizio> idServizi = null;
  482.                     try{
  483.                         idServizi = this.getAllIdServizi(filtro);
  484.                     }catch(DriverRegistroServiziNotFound dNotFound){}
  485.                     if(idServizi!=null){
  486.                         for(int j=0; j<idServizi.size(); j++){
  487.                             try{
  488.                                 AccordoServizioParteSpecifica s = this.getAccordoServizioParteSpecifica(idServizi.get(j));
  489.                                 soggetto.addAccordoServizioParteSpecifica(s);
  490.                             }catch(DriverRegistroServiziNotFound dNotfound){
  491.                                 throw new DriverRegistroServiziException("Accordo Servizio Parte Specifica ["+idServizi.get(j)+"] trovato tramite getAllId ma poi non recuperabile: "+dNotfound.getMessage(),dNotfound);
  492.                             }
  493.                         }
  494.                     }
  495.                    
  496.                     registroServizi.addSoggetto(soggetto);
  497.                 }catch(DriverRegistroServiziNotFound dNotfound){
  498.                     throw new DriverRegistroServiziException("Soggetto ["+idSoggetti.get(i)+"] trovato tramite getAllId ma poi non recuperabile: "+dNotfound.getMessage(),dNotfound);
  499.                 }
  500.             }
  501.         }
  502.        
  503.         return registroServizi;
  504.     }
  505. }