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.registry.driver;
import java.util.ArrayList;
import java.util.List;
import org.openspcoop2.core.id.IDAccordo;
import org.openspcoop2.core.id.IDAccordoCooperazione;
import org.openspcoop2.core.registry.AccordoCooperazione;
import org.openspcoop2.core.registry.AccordoServizioParteComune;
import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
import org.openspcoop2.core.registry.Documento;
import org.openspcoop2.core.registry.Fruitore;
import org.openspcoop2.core.registry.Gruppo;
import org.openspcoop2.core.registry.PortType;
import org.openspcoop2.core.registry.PortaDominio;
import org.openspcoop2.core.registry.Ruolo;
import org.openspcoop2.core.registry.Scope;
import org.openspcoop2.core.registry.Soggetto;
import org.openspcoop2.utils.serialization.IOException;
/**
* Classe utilizzata per generare gli identificatori degli oggetti presenti nel registro dei Servizi.
*
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class IDBuilder implements org.openspcoop2.utils.serialization.IDBuilder {
protected boolean prefix = false;
// Factory
private IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
private IDAccordoCooperazioneFactory idAccordoCooperazioneFactory = IDAccordoCooperazioneFactory.getInstance();
private IDServizioFactory idServizioFactory = IDServizioFactory.getInstance();
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 AccordoCooperazione){
AccordoCooperazione ac = (AccordoCooperazione) o;
String id = this.idAccordoCooperazioneFactory.getUriFromAccordo(ac);
if(this.prefix){
return "[AccordoCooperazione] "+id;
}else{
return id;
}
}
else if(o instanceof AccordoServizioParteComune){
AccordoServizioParteComune as = (AccordoServizioParteComune) o;
String id = this.idAccordoFactory.getUriFromAccordo(as);
if(this.prefix){
return "[AS] "+ id;
}else{
return id;
}
}
else if(o instanceof PortType){
PortType p = (PortType) o;
String id = "IDAccordo["+p.getIdAccordo()+"]_"+ p.getNome();
if(this.prefix){
return "[PortType] "+ id;
}else{
return id;
}
}
else if(o instanceof Documento){
Documento d = (Documento) o;
String id = "["+d.getRuolo()+"]["+d.getTipo()+"]"+" "+d.getFile();
if(this.prefix){
return "[Documento] "+ id;
}else{
return id;
}
}
else if(o instanceof PortaDominio){
PortaDominio p = (PortaDominio) o;
String id = p.getNome();
if(this.prefix){
return "[PdD] "+ id;
}else{
return id;
}
}
else if (o instanceof Gruppo) {
Gruppo g = (Gruppo) o;
String id = g.getNome();
if(this.prefix){
return "[Gruppo] "+ id;
}else{
return id;
}
}
else if(o instanceof Ruolo){
Ruolo r = (Ruolo) o;
String id = r.getNome();
if(this.prefix){
return "[Ruolo] "+ id;
}else{
return id;
}
}
else if(o instanceof Scope){
Scope s = (Scope) o;
String id = s.getNome();
if(this.prefix){
return "[Scope] "+ id;
}else{
return id;
}
}
else if(o instanceof AccordoServizioParteSpecifica){
AccordoServizioParteSpecifica s = (AccordoServizioParteSpecifica) o;
String id = this.idServizioFactory.getUriFromAccordo(s);
if(this.prefix){
return "[Servizio] "+ id;
}else{
return id;
}
}
else if(o instanceof Fruitore){
Fruitore fr = (Fruitore) o;
String id = fr.getTipo()+"/"+fr.getNome();
if(fr.getIdServizio()!=null && fr.getIdServizio()>0)
id=id+"#idServizio:"+fr.getIdServizio();
if(this.prefix){
return "[FruitoreServizio] "+ id;
}else{
return id;
}
}
else if(o instanceof Soggetto){
Soggetto s = (Soggetto) o;
String id = s.getTipo()+"/"+s.getNome();
if(this.prefix){
return "[Soggetto] "+ id;
}else{
return 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 {
if(o instanceof Documento){
return this.toID(o);
}else{
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 AccordoCooperazione){
AccordoCooperazione ac = (AccordoCooperazione) o;
IDAccordoCooperazione idOLD = ac.getOldIDAccordoForUpdate();
if(idOLD==null){
return null; // non lancio un errore
}
String id = this.idAccordoCooperazioneFactory.getUriFromIDAccordo(idOLD);
if(this.prefix){
return "[AccordoCooperazione] "+id;
}else{
return id;
}
}
else if(o instanceof AccordoServizioParteComune){
AccordoServizioParteComune as = (AccordoServizioParteComune) o;
IDAccordo idOLD = as.getOldIDAccordoForUpdate();
if(idOLD==null){
return null; // non lancio un errore
}
String id = this.idAccordoFactory.getUriFromIDAccordo(idOLD);
if(this.prefix){
return "[AS] "+ id;
}else{
return id;
}
}
else if(o instanceof PortType){
return null; // oggetto non modificabile nei dati identificativi
}
else if(o instanceof Documento){
return null; // oggetto non modificabile nei dati identificativi
}
else if(o instanceof PortaDominio){
PortaDominio p = (PortaDominio) o;
if(p.getOldNomeForUpdate()==null){
return null; // non lancio un errore
}
String id = p.getOldNomeForUpdate();
if(this.prefix){
return "[PdD] "+ id;
}else{
return id;
}
}
else if(o instanceof Gruppo){
Gruppo g = (Gruppo) o;
if(g.getOldIDGruppoForUpdate()==null){
return null; // non lancio un errore
}
String id = g.getOldIDGruppoForUpdate().getNome();
if(this.prefix){
return "[Gruppo] "+ id;
}else{
return id;
}
}
else if(o instanceof Ruolo){
Ruolo r = (Ruolo) o;
if(r.getOldIDRuoloForUpdate()==null){
return null; // non lancio un errore
}
String id = r.getOldIDRuoloForUpdate().getNome();
if(this.prefix){
return "[Ruolo] "+ id;
}else{
return id;
}
}
else if(o instanceof Scope){
Scope s = (Scope) o;
if(s.getOldIDScopeForUpdate()==null){
return null; // non lancio un errore
}
String id = s.getOldIDScopeForUpdate().getNome();
if(this.prefix){
return "[Scope] "+ id;
}else{
return id;
}
}
else if(o instanceof AccordoServizioParteSpecifica){
AccordoServizioParteSpecifica as = (AccordoServizioParteSpecifica) o;
if(as.getOldIDServizioForUpdate()==null){
return null; // non lancio un errore
}
String id = this.idServizioFactory.getUriFromIDServizio(as.getOldIDServizioForUpdate());
if(this.prefix){
return "[Servizio] "+ id;
}else{
return id;
}
}
else if(o instanceof Soggetto){
Soggetto s = (Soggetto) o;
if(s.getOldIDSoggettoForUpdate()==null){
return null; // non lancio un errore
}
String id = s.getOldIDSoggettoForUpdate().toString();
if(this.prefix){
return "[Soggetto] "+ id;
}else{
return id;
}
}
}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(AccordoCooperazione.class.getSimpleName());
oggetti.add(AccordoServizioParteComune.class.getSimpleName());
oggetti.add(PortType.class.getSimpleName());
oggetti.add(Documento.class.getSimpleName());
oggetti.add(PortaDominio.class.getSimpleName());
oggetti.add(Gruppo.class.getSimpleName());
oggetti.add(Ruolo.class.getSimpleName());
oggetti.add(Scope.class.getSimpleName());
oggetti.add(AccordoServizioParteSpecifica.class.getSimpleName());
oggetti.add(Fruitore.class.getSimpleName());
oggetti.add(Soggetto.class.getSimpleName());
}
else{
oggetti.add(AccordoCooperazione.class.getName());
oggetti.add(AccordoServizioParteComune.class.getName());
oggetti.add(PortType.class.getName());
oggetti.add(Documento.class.getName());
oggetti.add(PortaDominio.class.getName());
oggetti.add(Gruppo.class.getName());
oggetti.add(Ruolo.class.getName());
oggetti.add(Scope.class.getName());
oggetti.add(AccordoServizioParteSpecifica.class.getName());
oggetti.add(Fruitore.class.getName());
oggetti.add(Soggetto.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{
return o.getClass().getSimpleName();
}
}