IDBuilder.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.config.driver;

  21. import java.util.ArrayList;
  22. import java.util.List;

  23. import org.openspcoop2.core.config.AccessoConfigurazione;
  24. import org.openspcoop2.core.config.AccessoDatiAttributeAuthority;
  25. import org.openspcoop2.core.config.AccessoDatiAutenticazione;
  26. import org.openspcoop2.core.config.AccessoDatiAutorizzazione;
  27. import org.openspcoop2.core.config.AccessoDatiConsegnaApplicativi;
  28. import org.openspcoop2.core.config.AccessoDatiGestioneToken;
  29. import org.openspcoop2.core.config.AccessoDatiKeystore;
  30. import org.openspcoop2.core.config.AccessoDatiRichieste;
  31. import org.openspcoop2.core.config.AccessoRegistro;
  32. import org.openspcoop2.core.config.AccessoRegistroRegistro;
  33. import org.openspcoop2.core.config.Configurazione;
  34. import org.openspcoop2.core.config.ConfigurazioneUrlInvocazione;
  35. import org.openspcoop2.core.config.ConfigurazioneUrlInvocazioneRegola;
  36. import org.openspcoop2.core.config.GestioneErrore;
  37. import org.openspcoop2.core.config.PortaApplicativa;
  38. import org.openspcoop2.core.config.PortaDelegata;
  39. import org.openspcoop2.core.config.RegistroPlugin;
  40. import org.openspcoop2.core.config.RegistroPluginArchivio;
  41. import org.openspcoop2.core.config.RoutingTable;
  42. import org.openspcoop2.core.config.ServizioApplicativo;
  43. import org.openspcoop2.core.config.Soggetto;
  44. import org.openspcoop2.core.config.SystemProperties;
  45. import org.openspcoop2.core.config.utils.UpdateProprietaOggetto;
  46. import org.openspcoop2.core.id.IDSoggetto;
  47. import org.openspcoop2.utils.serialization.IOException;





  48. /**
  49.  * Classe utilizzata per generare gli identificatori degli oggetti presenti nella configurazione della PdD.
  50.  *
  51.  *
  52.  * @author Poli Andrea (apoli@link.it)
  53.  * @author $Author$
  54.  * @version $Rev$, $Date$
  55.  */

  56. public class IDBuilder implements org.openspcoop2.utils.serialization.IDBuilder {

  57.     protected boolean prefix = false;
  58.    
  59.     public IDBuilder(boolean insertClassNamePrefix){
  60.         this.prefix = insertClassNamePrefix;
  61.     }
  62.     public IDBuilder(){
  63.         this.prefix = false;
  64.     }
  65.    
  66.     public static IDBuilder getIDBuilder(){
  67.         return new IDBuilder();
  68.     }
  69.    
  70.     @Override
  71.     public String toID(Object o) throws IOException {
  72.        
  73.         if(o==null)
  74.             throw new IOException("Oggetto is null");
  75.        
  76.         try{
  77.        
  78.             if(o instanceof Soggetto){
  79.                 Soggetto s = (Soggetto) o;
  80.                 String id = s.getTipo()+"/"+s.getNome();
  81.                 if(this.prefix){
  82.                     return "[Soggetto] "+ id;
  83.                 }else{
  84.                     return id;
  85.                 }
  86.             }else if(o instanceof ServizioApplicativo){
  87.                 ServizioApplicativo s = (ServizioApplicativo) o;
  88.                 String id = s.getTipoSoggettoProprietario()+"/"+s.getNomeSoggettoProprietario()+"_"+s.getNome();
  89.                 if(this.prefix){
  90.                     return "[ServizioApplicativo] "+ id;
  91.                 }else{
  92.                     return id;
  93.                 }
  94.             }
  95.             else if(o instanceof PortaDelegata){
  96.                 PortaDelegata pd = (PortaDelegata) o;
  97.                 String id = pd.getTipoSoggettoProprietario()+"/"+pd.getNomeSoggettoProprietario()+"_"+pd.getNome();
  98.                 if(this.prefix){
  99.                     return "[PortaDelegata] "+ id;
  100.                 }else{
  101.                     return id;
  102.                 }
  103.             }
  104.             else if(o instanceof PortaApplicativa){
  105.                 PortaApplicativa pa = (PortaApplicativa) o;
  106.                 String id = pa.getTipoSoggettoProprietario()+"/"+pa.getNomeSoggettoProprietario()+"_"+pa.getNome();
  107.                 if(this.prefix){
  108.                     return "[PortaApplicativa] "+ id;
  109.                 }else{
  110.                     return id;
  111.                 }
  112.             }else if(o instanceof RoutingTable){
  113.                 return "RoutingTable";
  114.             }else if(o instanceof GestioneErrore){
  115.                 return "GestioneErrore";
  116.             }else if(o instanceof Configurazione){
  117.                 return "Configurazione";
  118.             }else if(o instanceof AccessoRegistro){
  119.                 return "ConfigurazioneRegistroServizi";
  120.             }else if(o instanceof AccessoRegistroRegistro){
  121.                 AccessoRegistroRegistro registro = (AccessoRegistroRegistro) o;
  122.                 String id = registro.getNome();
  123.                 if(this.prefix){
  124.                     return "[ConfigurazioneRegistroServizi] "+ id;
  125.                 }else{
  126.                     return id;
  127.                 }
  128.             }else if(o instanceof AccessoConfigurazione){
  129.                 return "ConfigurazioneAccessoDati";
  130.             }else if(o instanceof AccessoDatiAutenticazione){
  131.                 return "ConfigurazioneAccessoDatiAutenticazione";
  132.             }else if(o instanceof AccessoDatiAutorizzazione){
  133.                 return "ConfigurazioneAccessoDatiAutorizzazione";
  134.             }else if(o instanceof AccessoDatiGestioneToken){
  135.                 return "ConfigurazioneAccessoDatiGestioneToken";
  136.             }else if(o instanceof AccessoDatiAttributeAuthority){
  137.                 return "ConfigurazioneAccessoDatiAttributeAuthority";
  138.             }else if(o instanceof AccessoDatiKeystore){
  139.                 return "ConfigurazioneAccessoDatiKeystore";
  140.             }else if(o instanceof AccessoDatiConsegnaApplicativi){
  141.                 return "ConfigurazioneAccessoDatiConsegnaApplicativi";
  142.             }else if(o instanceof AccessoDatiRichieste){
  143.                 return "ConfigurazioneAccessoDatiRichieste";
  144.             }else if(o instanceof SystemProperties){
  145.                 return "ProprietàDiSistema";
  146.             }else if(o instanceof RegistroPlugin){
  147.                 RegistroPlugin plugin = (RegistroPlugin) o;
  148.                 String id = plugin.getNome();
  149.                 if(this.prefix){
  150.                     return "[RegistroPlugin] "+ id;
  151.                 }else{
  152.                     return id;
  153.                 }
  154.             }else if(o instanceof RegistroPluginArchivio){
  155.                 RegistroPluginArchivio plugin = (RegistroPluginArchivio) o;
  156.                 String id = plugin.getNome();
  157.                 if(this.prefix){
  158.                     return "[RegistroPluginArchivio] "+ plugin.getNomePlugin()+"-"+id;
  159.                 }else{
  160.                     return id;
  161.                 }
  162.             }else if(o instanceof ConfigurazioneUrlInvocazioneRegola){
  163.                 ConfigurazioneUrlInvocazioneRegola regola = (ConfigurazioneUrlInvocazioneRegola) o;
  164.                 String id = regola.getNome();
  165.                 if(this.prefix){
  166.                     return "[UrlInvocazioneRegola] "+ id;
  167.                 }else{
  168.                     return id;
  169.                 }
  170.             }else if(o instanceof ConfigurazioneUrlInvocazione){
  171.                 return "Configurazione UrlInvocazione";
  172.             }
  173.             else if(o instanceof UpdateProprietaOggetto) {
  174.                 UpdateProprietaOggetto up = (UpdateProprietaOggetto) o;
  175.                 if(up.getIdPortaApplicativa()!=null) {
  176.                     if(this.prefix){
  177.                         return "[UpdateProprietaOggettoPortaApplicativa] "+ up.getIdPortaApplicativa().getNome();
  178.                     }else{
  179.                         return "PA-"+up.getIdPortaApplicativa().getNome();
  180.                     }
  181.                 }
  182.                 else if(up.getIdPortaDelegata()!=null) {
  183.                     if(this.prefix){
  184.                         return "[UpdateProprietaOggettoPortaDelegata] "+ up.getIdPortaDelegata().getNome();
  185.                     }else{
  186.                         return "PD-"+up.getIdPortaDelegata().getNome();
  187.                     }
  188.                 }
  189.                 else if(up.getIdServizioApplicativo()!=null) {
  190.                     IDSoggetto idSog = up.getIdServizioApplicativo().getIdSoggettoProprietario();
  191.                     String idSA = idSog.getTipo()+"/"+idSog.getNome()+"_"+up.getIdServizioApplicativo().getNome();
  192.                     if(this.prefix){
  193.                         return "[UpdateProprietaOggettoServizioApplicativo] "+ idSA;
  194.                     }else{
  195.                         return "SA-"+idSA;
  196.                     }
  197.                 }
  198.                 else {
  199.                     throw new IOException("Tipo di Oggetto gestito ["+o.getClass().getName()+"] senza id");
  200.                 }
  201.             }
  202.                        
  203.         }catch(Exception e){
  204.             throw new IOException("Trasformazione non riuscita: "+e.getMessage(),e);
  205.         }
  206.        
  207.         throw new IOException("Tipo di Oggetto non gestito ["+o.getClass().getName()+"]");
  208.     }

  209.     @Override
  210.     public String toID(Object o, String field) throws IOException {
  211.         return this.toID(o) + "." + field;
  212.     }

  213.     /**
  214.      * Genera il vecchio identificatore che identificava l'oggetto passato come parametro prima di un update in corso
  215.      * L'oggetto in corso deve essere valorizzato negli elementi old_XXX
  216.      *
  217.      * @param o Oggetto su cui generare un identificatore univoco
  218.      * @return identificatore univoco
  219.      */
  220.     @Override
  221.     public String toOldID(Object o) throws IOException{
  222.        
  223.         if(o==null)
  224.             throw new IOException("Oggetto is null");
  225.        
  226.         try{
  227.        
  228.             if(o instanceof Soggetto){
  229.                 Soggetto s = (Soggetto) o;
  230.                 if(s.getOldIDSoggettoForUpdate()==null){
  231.                     return null; // non lancio un errore
  232.                 }
  233.                 String id = s.getOldIDSoggettoForUpdate().getTipo()+"/"+s.getOldIDSoggettoForUpdate().getNome();
  234.                 if(this.prefix){
  235.                     return "[Soggetto] "+ id;
  236.                 }else{
  237.                     return id;
  238.                 }
  239.             }else if(o instanceof ServizioApplicativo){
  240.                 ServizioApplicativo s = (ServizioApplicativo) o;
  241.                 if( (s.getOldIDServizioApplicativoForUpdate()==null)) {
  242.                     return null; // non lancio un errore
  243.                 }
  244.                 if( (s.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario()==null ||
  245.                         s.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario().getTipo()==null ||
  246.                         s.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario().getNome()==null)
  247.                         && s.getOldIDServizioApplicativoForUpdate().getNome()==null) {
  248.                     return null; // non lancio un errore
  249.                 }
  250.                 String id = null;
  251.                 if(s.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario()!=null && s.getOldIDServizioApplicativoForUpdate().getNome()!=null){
  252.                     id = s.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario().getTipo()+"/"+
  253.                             s.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario().getNome()+"_"+
  254.                             s.getOldIDServizioApplicativoForUpdate().getNome();
  255.                 }
  256.                 else if(s.getOldIDServizioApplicativoForUpdate().getNome()!=null){
  257.                     id = s.getTipoSoggettoProprietario()+"/"+s.getNomeSoggettoProprietario()+"_"+
  258.                             s.getOldIDServizioApplicativoForUpdate().getNome();
  259.                 }
  260.                 else if(s.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario()==null){
  261.                     throw new DriverConfigurazioneException("Oggetto in modifica non correttamente valorizzato");
  262.                 }
  263.                 else{
  264.                     id = s.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario().getTipo()+"/"+
  265.                             s.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario().getNome()+"_"+
  266.                             "_"+s.getNome();
  267.                 }              
  268.                 if(this.prefix){
  269.                     return "[ServizioApplicativo] "+ id;
  270.                 }else{
  271.                     return id;
  272.                 }
  273.             }
  274.             else if(o instanceof PortaDelegata){
  275.                 PortaDelegata pd = (PortaDelegata) o;
  276.                 if(pd.getOldIDPortaDelegataForUpdate()==null || pd.getOldIDPortaDelegataForUpdate().getNome()==null){
  277.                     return null; // non lancio un errore
  278.                 }
  279.                 String id = pd.getOldIDPortaDelegataForUpdate().getNome();
  280.                 if(this.prefix){
  281.                     return "[PortaDelegata] "+ id;
  282.                 }else{
  283.                     return id;
  284.                 }
  285.             }
  286.             else if(o instanceof PortaApplicativa){
  287.                 PortaApplicativa pa = (PortaApplicativa) o;
  288.                 if(pa.getOldIDPortaApplicativaForUpdate()==null || pa.getOldIDPortaApplicativaForUpdate().getNome()==null){
  289.                     return null; // non lancio un errore
  290.                 }
  291.                 String id = pa.getOldIDPortaApplicativaForUpdate().getNome();
  292.                 if(this.prefix){
  293.                     return "[PortaApplicativa] "+ id;
  294.                 }else{
  295.                     return id;
  296.                 }
  297.             }else if(o instanceof RoutingTable){
  298.                 return null; // oggetto non modificabile nei dati identificativi
  299.             }else if(o instanceof GestioneErrore){
  300.                 return null; // oggetto non modificabile nei dati identificativi
  301.             }else if(o instanceof Configurazione){
  302.                 return null; // oggetto non modificabile nei dati identificativi
  303.             }else if(o instanceof AccessoRegistro){
  304.                 return null; // oggetto non modificabile nei dati identificativi
  305.             }else if(o instanceof AccessoRegistroRegistro){
  306.                 return null; // oggetto non modificabile nei dati identificativi
  307.             }else if(o instanceof AccessoConfigurazione){
  308.                 return null; // oggetto non modificabile nei dati identificativi
  309.             }else if(o instanceof AccessoDatiAutenticazione){
  310.                 return null; // oggetto non modificabile nei dati identificativi
  311.             }else if(o instanceof AccessoDatiAutorizzazione){
  312.                 return null; // oggetto non modificabile nei dati identificativi
  313.             }else if(o instanceof AccessoDatiGestioneToken){
  314.                 return null; // oggetto non modificabile nei dati identificativi
  315.             }else if(o instanceof AccessoDatiAttributeAuthority){
  316.                 return null; // oggetto non modificabile nei dati identificativi
  317.             }else if(o instanceof AccessoDatiKeystore){
  318.                 return null; // oggetto non modificabile nei dati identificativi
  319.             }else if(o instanceof AccessoDatiConsegnaApplicativi){
  320.                 return null; // oggetto non modificabile nei dati identificativi
  321.             }else if(o instanceof AccessoDatiRichieste){
  322.                 return null; // oggetto non modificabile nei dati identificativi
  323.             }else if(o instanceof SystemProperties){
  324.                 return null; // oggetto non modificabile nei dati identificativi
  325.             }else if(o instanceof RegistroPlugin){
  326.                 RegistroPlugin plugin = (RegistroPlugin) o;
  327.                 if(plugin.getOldNome()==null) {
  328.                     return null; // non lancio un errore
  329.                 }
  330.                 String id = plugin.getOldNome();
  331.                 if(this.prefix){
  332.                     return "[RegistroPlugin] "+ id;
  333.                 }else{
  334.                     return id;
  335.                 }
  336.             }else if(o instanceof RegistroPluginArchivio){
  337.                 return null; // oggetto non modificabile nei dati identificativi
  338.             }else if(o instanceof ConfigurazioneUrlInvocazioneRegola){
  339.                 ConfigurazioneUrlInvocazioneRegola regola = (ConfigurazioneUrlInvocazioneRegola) o;
  340.                 if(regola.getOldNome()==null) {
  341.                     return null; // non lancio un errore
  342.                 }
  343.                 String id = regola.getOldNome();
  344.                 if(this.prefix){
  345.                     return "[UrlInvocazioneRegola] "+ id;
  346.                 }else{
  347.                     return id;
  348.                 }
  349.             }else if(o instanceof ConfigurazioneUrlInvocazione){
  350.                 return null; // oggetto non modificabile nei dati identificativi
  351.             }
  352.             else if(o instanceof UpdateProprietaOggetto) {
  353.                 return null; // oggetto non modificabile nei dati identificativi
  354.             }
  355.                        
  356.         }catch(Exception e){
  357.             throw new IOException("Trasformazione non riuscita: "+e.getMessage(),e);
  358.         }
  359.        
  360.         throw new IOException("Tipo di Oggetto non gestito ["+o.getClass().getName()+"]");
  361.        
  362.     }
  363.    
  364.    
  365.     /**
  366.      * Ritorna gli oggetti gestiti
  367.      *
  368.      * @return oggetti gestiti
  369.      * @throws DriverException
  370.      */
  371.     @Override
  372.     public String[] getManagedObjects(boolean simpleName) throws IOException{
  373.         List<String> oggetti = new ArrayList<>();
  374.        
  375.         if(simpleName){
  376.             oggetti.add(Soggetto.class.getSimpleName());
  377.             oggetti.add(ServizioApplicativo.class.getSimpleName());
  378.             oggetti.add(PortaDelegata.class.getSimpleName());
  379.             oggetti.add(PortaApplicativa.class.getSimpleName());
  380.             oggetti.add(RoutingTable.class.getSimpleName());
  381.             oggetti.add(GestioneErrore.class.getSimpleName());
  382.             oggetti.add(Configurazione.class.getSimpleName());
  383.             oggetti.add(AccessoRegistro.class.getSimpleName());
  384.             /** non serve come simple name: oggetti.add(AccessoRegistroRegistro.class.getSimpleName()); */
  385.             oggetti.add(AccessoConfigurazione.class.getSimpleName());
  386.             oggetti.add(AccessoDatiAutenticazione.class.getSimpleName());
  387.             oggetti.add(AccessoDatiAutorizzazione.class.getSimpleName());
  388.             oggetti.add(AccessoDatiGestioneToken.class.getSimpleName());
  389.             oggetti.add(AccessoDatiAttributeAuthority.class.getSimpleName());
  390.             oggetti.add(AccessoDatiKeystore.class.getSimpleName());
  391.             oggetti.add(AccessoDatiConsegnaApplicativi.class.getSimpleName());
  392.             oggetti.add(AccessoDatiRichieste.class.getSimpleName());
  393.             oggetti.add(SystemProperties.class.getSimpleName());
  394.             oggetti.add(RegistroPlugin.class.getSimpleName());
  395.             oggetti.add(RegistroPluginArchivio.class.getSimpleName());
  396.             oggetti.add(ConfigurazioneUrlInvocazioneRegola.class.getSimpleName());
  397.             oggetti.add(ConfigurazioneUrlInvocazione.class.getSimpleName());
  398.             oggetti.add(UpdateProprietaOggetto.class.getSimpleName());
  399.         }
  400.         else{
  401.             oggetti.add(Soggetto.class.getName());
  402.             oggetti.add(ServizioApplicativo.class.getName());
  403.             oggetti.add(PortaDelegata.class.getName());
  404.             oggetti.add(PortaApplicativa.class.getName());
  405.             oggetti.add(RoutingTable.class.getName());
  406.             oggetti.add(GestioneErrore.class.getName());
  407.             oggetti.add(Configurazione.class.getName());
  408.             oggetti.add(AccessoRegistro.class.getName());
  409.             oggetti.add(AccessoRegistroRegistro.class.getName());
  410.             oggetti.add(AccessoConfigurazione.class.getName());
  411.             oggetti.add(AccessoDatiAutenticazione.class.getName());
  412.             oggetti.add(AccessoDatiAutorizzazione.class.getName());
  413.             oggetti.add(AccessoDatiGestioneToken.class.getName());
  414.             oggetti.add(AccessoDatiAttributeAuthority.class.getName());
  415.             oggetti.add(AccessoDatiKeystore.class.getName());
  416.             oggetti.add(AccessoDatiConsegnaApplicativi.class.getName());
  417.             oggetti.add(AccessoDatiRichieste.class.getName());
  418.             oggetti.add(SystemProperties.class.getName());
  419.             oggetti.add(RegistroPlugin.class.getName());
  420.             oggetti.add(RegistroPluginArchivio.class.getName());    
  421.             oggetti.add(ConfigurazioneUrlInvocazioneRegola.class.getName());    
  422.             oggetti.add(ConfigurazioneUrlInvocazione.class.getName());  
  423.             oggetti.add(UpdateProprietaOggetto.class.getName());    
  424.         }
  425.        
  426.         String[]tmp = new String[1];
  427.         return oggetti.toArray(tmp);
  428.     }
  429.    
  430.     /**
  431.      * Ritorna un nome descrittivo dell'oggetto.
  432.      *
  433.      * @param o
  434.      * @return nome descrittivo dell'oggetto.
  435.      * @throws DriverException
  436.      */
  437.     @Override
  438.     public String getSimpleName(Object o) throws IOException{
  439.        
  440.         if(o instanceof AccessoRegistroRegistro){
  441.             return AccessoRegistro.class.getSimpleName();
  442.         }
  443.         else{
  444.             return o.getClass().getSimpleName();
  445.         }
  446.        
  447.     }

  448. }