IDBuilder.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.config.driver;
import java.util.ArrayList;
import java.util.List;
import org.openspcoop2.core.config.AccessoConfigurazione;
import org.openspcoop2.core.config.AccessoDatiAttributeAuthority;
import org.openspcoop2.core.config.AccessoDatiAutenticazione;
import org.openspcoop2.core.config.AccessoDatiAutorizzazione;
import org.openspcoop2.core.config.AccessoDatiConsegnaApplicativi;
import org.openspcoop2.core.config.AccessoDatiGestioneToken;
import org.openspcoop2.core.config.AccessoDatiKeystore;
import org.openspcoop2.core.config.AccessoDatiRichieste;
import org.openspcoop2.core.config.AccessoRegistro;
import org.openspcoop2.core.config.AccessoRegistroRegistro;
import org.openspcoop2.core.config.Configurazione;
import org.openspcoop2.core.config.ConfigurazioneUrlInvocazione;
import org.openspcoop2.core.config.ConfigurazioneUrlInvocazioneRegola;
import org.openspcoop2.core.config.GestioneErrore;
import org.openspcoop2.core.config.PortaApplicativa;
import org.openspcoop2.core.config.PortaDelegata;
import org.openspcoop2.core.config.RegistroPlugin;
import org.openspcoop2.core.config.RegistroPluginArchivio;
import org.openspcoop2.core.config.RoutingTable;
import org.openspcoop2.core.config.ServizioApplicativo;
import org.openspcoop2.core.config.Soggetto;
import org.openspcoop2.core.config.SystemProperties;
import org.openspcoop2.core.config.utils.UpdateProprietaOggetto;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.utils.serialization.IOException;
/**
* Classe utilizzata per generare gli identificatori degli oggetti presenti nella configurazione della PdD.
*
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class IDBuilder implements org.openspcoop2.utils.serialization.IDBuilder {
protected boolean prefix = false;
public IDBuilder(boolean insertClassNamePrefix){
this.prefix = insertClassNamePrefix;
}
public IDBuilder(){
this.prefix = false;
}
public static IDBuilder getIDBuilder(){
return new IDBuilder();
}
@Override
public String toID(Object o) throws IOException {
if(o==null)
throw new IOException("Oggetto is null");
try{
if(o instanceof Soggetto){
Soggetto s = (Soggetto) o;
String id = s.getTipo()+"/"+s.getNome();
if(this.prefix){
return "[Soggetto] "+ id;
}else{
return id;
}
}else if(o instanceof ServizioApplicativo){
ServizioApplicativo s = (ServizioApplicativo) o;
String id = s.getTipoSoggettoProprietario()+"/"+s.getNomeSoggettoProprietario()+"_"+s.getNome();
if(this.prefix){
return "[ServizioApplicativo] "+ id;
}else{
return id;
}
}
else if(o instanceof PortaDelegata){
PortaDelegata pd = (PortaDelegata) o;
String id = pd.getTipoSoggettoProprietario()+"/"+pd.getNomeSoggettoProprietario()+"_"+pd.getNome();
if(this.prefix){
return "[PortaDelegata] "+ id;
}else{
return id;
}
}
else if(o instanceof PortaApplicativa){
PortaApplicativa pa = (PortaApplicativa) o;
String id = pa.getTipoSoggettoProprietario()+"/"+pa.getNomeSoggettoProprietario()+"_"+pa.getNome();
if(this.prefix){
return "[PortaApplicativa] "+ id;
}else{
return id;
}
}else if(o instanceof RoutingTable){
return "RoutingTable";
}else if(o instanceof GestioneErrore){
return "GestioneErrore";
}else if(o instanceof Configurazione){
return "Configurazione";
}else if(o instanceof AccessoRegistro){
return "ConfigurazioneRegistroServizi";
}else if(o instanceof AccessoRegistroRegistro){
AccessoRegistroRegistro registro = (AccessoRegistroRegistro) o;
String id = registro.getNome();
if(this.prefix){
return "[ConfigurazioneRegistroServizi] "+ id;
}else{
return id;
}
}else if(o instanceof AccessoConfigurazione){
return "ConfigurazioneAccessoDati";
}else if(o instanceof AccessoDatiAutenticazione){
return "ConfigurazioneAccessoDatiAutenticazione";
}else if(o instanceof AccessoDatiAutorizzazione){
return "ConfigurazioneAccessoDatiAutorizzazione";
}else if(o instanceof AccessoDatiGestioneToken){
return "ConfigurazioneAccessoDatiGestioneToken";
}else if(o instanceof AccessoDatiAttributeAuthority){
return "ConfigurazioneAccessoDatiAttributeAuthority";
}else if(o instanceof AccessoDatiKeystore){
return "ConfigurazioneAccessoDatiKeystore";
}else if(o instanceof AccessoDatiConsegnaApplicativi){
return "ConfigurazioneAccessoDatiConsegnaApplicativi";
}else if(o instanceof AccessoDatiRichieste){
return "ConfigurazioneAccessoDatiRichieste";
}else if(o instanceof SystemProperties){
return "ProprietàDiSistema";
}else if(o instanceof RegistroPlugin){
RegistroPlugin plugin = (RegistroPlugin) o;
String id = plugin.getNome();
if(this.prefix){
return "[RegistroPlugin] "+ id;
}else{
return id;
}
}else if(o instanceof RegistroPluginArchivio){
RegistroPluginArchivio plugin = (RegistroPluginArchivio) o;
String id = plugin.getNome();
if(this.prefix){
return "[RegistroPluginArchivio] "+ plugin.getNomePlugin()+"-"+id;
}else{
return id;
}
}else if(o instanceof ConfigurazioneUrlInvocazioneRegola){
ConfigurazioneUrlInvocazioneRegola regola = (ConfigurazioneUrlInvocazioneRegola) o;
String id = regola.getNome();
if(this.prefix){
return "[UrlInvocazioneRegola] "+ id;
}else{
return id;
}
}else if(o instanceof ConfigurazioneUrlInvocazione){
return "Configurazione UrlInvocazione";
}
else if(o instanceof UpdateProprietaOggetto) {
UpdateProprietaOggetto up = (UpdateProprietaOggetto) o;
if(up.getIdPortaApplicativa()!=null) {
if(this.prefix){
return "[UpdateProprietaOggettoPortaApplicativa] "+ up.getIdPortaApplicativa().getNome();
}else{
return "PA-"+up.getIdPortaApplicativa().getNome();
}
}
else if(up.getIdPortaDelegata()!=null) {
if(this.prefix){
return "[UpdateProprietaOggettoPortaDelegata] "+ up.getIdPortaDelegata().getNome();
}else{
return "PD-"+up.getIdPortaDelegata().getNome();
}
}
else if(up.getIdServizioApplicativo()!=null) {
IDSoggetto idSog = up.getIdServizioApplicativo().getIdSoggettoProprietario();
String idSA = idSog.getTipo()+"/"+idSog.getNome()+"_"+up.getIdServizioApplicativo().getNome();
if(this.prefix){
return "[UpdateProprietaOggettoServizioApplicativo] "+ idSA;
}else{
return "SA-"+idSA;
}
}
else {
throw new IOException("Tipo di Oggetto gestito ["+o.getClass().getName()+"] senza id");
}
}
}catch(Exception e){
throw new IOException("Trasformazione non riuscita: "+e.getMessage(),e);
}
throw new IOException("Tipo di Oggetto non gestito ["+o.getClass().getName()+"]");
}
@Override
public String toID(Object o, String field) throws IOException {
return this.toID(o) + "." + field;
}
/**
* Genera il vecchio identificatore che identificava l'oggetto passato come parametro prima di un update in corso
* L'oggetto in corso deve essere valorizzato negli elementi old_XXX
*
* @param o Oggetto su cui generare un identificatore univoco
* @return identificatore univoco
*/
@Override
public String toOldID(Object o) throws IOException{
if(o==null)
throw new IOException("Oggetto is null");
try{
if(o instanceof Soggetto){
Soggetto s = (Soggetto) o;
if(s.getOldIDSoggettoForUpdate()==null){
return null; // non lancio un errore
}
String id = s.getOldIDSoggettoForUpdate().getTipo()+"/"+s.getOldIDSoggettoForUpdate().getNome();
if(this.prefix){
return "[Soggetto] "+ id;
}else{
return id;
}
}else if(o instanceof ServizioApplicativo){
ServizioApplicativo s = (ServizioApplicativo) o;
if( (s.getOldIDServizioApplicativoForUpdate()==null)) {
return null; // non lancio un errore
}
if( (s.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario()==null ||
s.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario().getTipo()==null ||
s.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario().getNome()==null)
&& s.getOldIDServizioApplicativoForUpdate().getNome()==null) {
return null; // non lancio un errore
}
String id = null;
if(s.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario()!=null && s.getOldIDServizioApplicativoForUpdate().getNome()!=null){
id = s.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario().getTipo()+"/"+
s.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario().getNome()+"_"+
s.getOldIDServizioApplicativoForUpdate().getNome();
}
else if(s.getOldIDServizioApplicativoForUpdate().getNome()!=null){
id = s.getTipoSoggettoProprietario()+"/"+s.getNomeSoggettoProprietario()+"_"+
s.getOldIDServizioApplicativoForUpdate().getNome();
}
else if(s.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario()==null){
throw new DriverConfigurazioneException("Oggetto in modifica non correttamente valorizzato");
}
else{
id = s.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario().getTipo()+"/"+
s.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario().getNome()+"_"+
"_"+s.getNome();
}
if(this.prefix){
return "[ServizioApplicativo] "+ id;
}else{
return id;
}
}
else if(o instanceof PortaDelegata){
PortaDelegata pd = (PortaDelegata) o;
if(pd.getOldIDPortaDelegataForUpdate()==null || pd.getOldIDPortaDelegataForUpdate().getNome()==null){
return null; // non lancio un errore
}
String id = pd.getOldIDPortaDelegataForUpdate().getNome();
if(this.prefix){
return "[PortaDelegata] "+ id;
}else{
return id;
}
}
else if(o instanceof PortaApplicativa){
PortaApplicativa pa = (PortaApplicativa) o;
if(pa.getOldIDPortaApplicativaForUpdate()==null || pa.getOldIDPortaApplicativaForUpdate().getNome()==null){
return null; // non lancio un errore
}
String id = pa.getOldIDPortaApplicativaForUpdate().getNome();
if(this.prefix){
return "[PortaApplicativa] "+ id;
}else{
return id;
}
}else if(o instanceof RoutingTable){
return null; // oggetto non modificabile nei dati identificativi
}else if(o instanceof GestioneErrore){
return null; // oggetto non modificabile nei dati identificativi
}else if(o instanceof Configurazione){
return null; // oggetto non modificabile nei dati identificativi
}else if(o instanceof AccessoRegistro){
return null; // oggetto non modificabile nei dati identificativi
}else if(o instanceof AccessoRegistroRegistro){
return null; // oggetto non modificabile nei dati identificativi
}else if(o instanceof AccessoConfigurazione){
return null; // oggetto non modificabile nei dati identificativi
}else if(o instanceof AccessoDatiAutenticazione){
return null; // oggetto non modificabile nei dati identificativi
}else if(o instanceof AccessoDatiAutorizzazione){
return null; // oggetto non modificabile nei dati identificativi
}else if(o instanceof AccessoDatiGestioneToken){
return null; // oggetto non modificabile nei dati identificativi
}else if(o instanceof AccessoDatiAttributeAuthority){
return null; // oggetto non modificabile nei dati identificativi
}else if(o instanceof AccessoDatiKeystore){
return null; // oggetto non modificabile nei dati identificativi
}else if(o instanceof AccessoDatiConsegnaApplicativi){
return null; // oggetto non modificabile nei dati identificativi
}else if(o instanceof AccessoDatiRichieste){
return null; // oggetto non modificabile nei dati identificativi
}else if(o instanceof SystemProperties){
return null; // oggetto non modificabile nei dati identificativi
}else if(o instanceof RegistroPlugin){
RegistroPlugin plugin = (RegistroPlugin) o;
if(plugin.getOldNome()==null) {
return null; // non lancio un errore
}
String id = plugin.getOldNome();
if(this.prefix){
return "[RegistroPlugin] "+ id;
}else{
return id;
}
}else if(o instanceof RegistroPluginArchivio){
return null; // oggetto non modificabile nei dati identificativi
}else if(o instanceof ConfigurazioneUrlInvocazioneRegola){
ConfigurazioneUrlInvocazioneRegola regola = (ConfigurazioneUrlInvocazioneRegola) o;
if(regola.getOldNome()==null) {
return null; // non lancio un errore
}
String id = regola.getOldNome();
if(this.prefix){
return "[UrlInvocazioneRegola] "+ id;
}else{
return id;
}
}else if(o instanceof ConfigurazioneUrlInvocazione){
return null; // oggetto non modificabile nei dati identificativi
}
else if(o instanceof UpdateProprietaOggetto) {
return null; // oggetto non modificabile nei dati identificativi
}
}catch(Exception e){
throw new IOException("Trasformazione non riuscita: "+e.getMessage(),e);
}
throw new IOException("Tipo di Oggetto non gestito ["+o.getClass().getName()+"]");
}
/**
* Ritorna gli oggetti gestiti
*
* @return oggetti gestiti
* @throws DriverException
*/
@Override
public String[] getManagedObjects(boolean simpleName) throws IOException{
List<String> oggetti = new ArrayList<>();
if(simpleName){
oggetti.add(Soggetto.class.getSimpleName());
oggetti.add(ServizioApplicativo.class.getSimpleName());
oggetti.add(PortaDelegata.class.getSimpleName());
oggetti.add(PortaApplicativa.class.getSimpleName());
oggetti.add(RoutingTable.class.getSimpleName());
oggetti.add(GestioneErrore.class.getSimpleName());
oggetti.add(Configurazione.class.getSimpleName());
oggetti.add(AccessoRegistro.class.getSimpleName());
/** non serve come simple name: oggetti.add(AccessoRegistroRegistro.class.getSimpleName()); */
oggetti.add(AccessoConfigurazione.class.getSimpleName());
oggetti.add(AccessoDatiAutenticazione.class.getSimpleName());
oggetti.add(AccessoDatiAutorizzazione.class.getSimpleName());
oggetti.add(AccessoDatiGestioneToken.class.getSimpleName());
oggetti.add(AccessoDatiAttributeAuthority.class.getSimpleName());
oggetti.add(AccessoDatiKeystore.class.getSimpleName());
oggetti.add(AccessoDatiConsegnaApplicativi.class.getSimpleName());
oggetti.add(AccessoDatiRichieste.class.getSimpleName());
oggetti.add(SystemProperties.class.getSimpleName());
oggetti.add(RegistroPlugin.class.getSimpleName());
oggetti.add(RegistroPluginArchivio.class.getSimpleName());
oggetti.add(ConfigurazioneUrlInvocazioneRegola.class.getSimpleName());
oggetti.add(ConfigurazioneUrlInvocazione.class.getSimpleName());
oggetti.add(UpdateProprietaOggetto.class.getSimpleName());
}
else{
oggetti.add(Soggetto.class.getName());
oggetti.add(ServizioApplicativo.class.getName());
oggetti.add(PortaDelegata.class.getName());
oggetti.add(PortaApplicativa.class.getName());
oggetti.add(RoutingTable.class.getName());
oggetti.add(GestioneErrore.class.getName());
oggetti.add(Configurazione.class.getName());
oggetti.add(AccessoRegistro.class.getName());
oggetti.add(AccessoRegistroRegistro.class.getName());
oggetti.add(AccessoConfigurazione.class.getName());
oggetti.add(AccessoDatiAutenticazione.class.getName());
oggetti.add(AccessoDatiAutorizzazione.class.getName());
oggetti.add(AccessoDatiGestioneToken.class.getName());
oggetti.add(AccessoDatiAttributeAuthority.class.getName());
oggetti.add(AccessoDatiKeystore.class.getName());
oggetti.add(AccessoDatiConsegnaApplicativi.class.getName());
oggetti.add(AccessoDatiRichieste.class.getName());
oggetti.add(SystemProperties.class.getName());
oggetti.add(RegistroPlugin.class.getName());
oggetti.add(RegistroPluginArchivio.class.getName());
oggetti.add(ConfigurazioneUrlInvocazioneRegola.class.getName());
oggetti.add(ConfigurazioneUrlInvocazione.class.getName());
oggetti.add(UpdateProprietaOggetto.class.getName());
}
String[]tmp = new String[1];
return oggetti.toArray(tmp);
}
/**
* Ritorna un nome descrittivo dell'oggetto.
*
* @param o
* @return nome descrittivo dell'oggetto.
* @throws DriverException
*/
@Override
public String getSimpleName(Object o) throws IOException{
if(o instanceof AccessoRegistroRegistro){
return AccessoRegistro.class.getSimpleName();
}
else{
return o.getClass().getSimpleName();
}
}
}