ProprietaOggettoRegistro.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.web.ctrlstat.servlet.utils;

  21. import java.io.ByteArrayOutputStream;
  22. import java.io.IOException;
  23. import java.util.ArrayList;
  24. import java.util.Date;
  25. import java.util.HashMap;
  26. import java.util.List;
  27. import java.util.Map;

  28. import javax.servlet.ServletException;
  29. import javax.servlet.ServletOutputStream;
  30. import javax.servlet.http.HttpServlet;
  31. import javax.servlet.http.HttpServletRequest;
  32. import javax.servlet.http.HttpServletResponse;
  33. import javax.servlet.http.HttpSession;

  34. import org.apache.commons.io.IOUtils;
  35. import org.apache.commons.lang.StringUtils;
  36. import org.openspcoop2.core.commons.CoreException;
  37. import org.openspcoop2.core.config.GenericProperties;
  38. import org.openspcoop2.core.config.PortaApplicativa;
  39. import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
  40. import org.openspcoop2.core.config.PortaDelegata;
  41. import org.openspcoop2.core.config.ServizioApplicativo;
  42. import org.openspcoop2.core.id.IDAccordo;
  43. import org.openspcoop2.core.id.IDGenericProperties;
  44. import org.openspcoop2.core.id.IDGruppo;
  45. import org.openspcoop2.core.id.IDPortaApplicativa;
  46. import org.openspcoop2.core.id.IDPortaDelegata;
  47. import org.openspcoop2.core.id.IDRuolo;
  48. import org.openspcoop2.core.id.IDScope;
  49. import org.openspcoop2.core.id.IDServizio;
  50. import org.openspcoop2.core.id.IDServizioApplicativo;
  51. import org.openspcoop2.core.id.IDSoggetto;
  52. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  53. import org.openspcoop2.core.registry.Fruitore;
  54. import org.openspcoop2.core.registry.Gruppo;
  55. import org.openspcoop2.core.registry.ProprietaOggetto;
  56. import org.openspcoop2.core.registry.Ruolo;
  57. import org.openspcoop2.core.registry.Scope;
  58. import org.openspcoop2.core.registry.Soggetto;
  59. import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneSintetico;
  60. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  61. import org.openspcoop2.utils.json.JSONUtils;
  62. import org.openspcoop2.utils.transport.http.HttpConstants;
  63. import org.openspcoop2.utils.transport.http.HttpRequestMethod;
  64. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  65. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  66. import org.openspcoop2.web.ctrlstat.costanti.InUsoType;
  67. import org.openspcoop2.web.ctrlstat.servlet.ConsoleHelper;
  68. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCore;
  69. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCore;
  70. import org.openspcoop2.web.ctrlstat.servlet.archivi.ArchiviCore;
  71. import org.openspcoop2.web.ctrlstat.servlet.archivi.ExporterUtils;
  72. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCore;
  73. import org.openspcoop2.web.ctrlstat.servlet.gruppi.GruppiCore;
  74. import org.openspcoop2.web.ctrlstat.servlet.pa.PorteApplicativeCore;
  75. import org.openspcoop2.web.ctrlstat.servlet.pd.PorteDelegateCore;
  76. import org.openspcoop2.web.ctrlstat.servlet.ruoli.RuoliCore;
  77. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCore;
  78. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCostanti;
  79. import org.openspcoop2.web.ctrlstat.servlet.scope.ScopeCore;
  80. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
  81. import org.openspcoop2.web.lib.mvc.PageData;

  82. /**
  83.  * InformazioniUtilizzoOggettoRegistro
  84.  *
  85.  * @author Andrea Poli (apoli@link.it)
  86.  * @author $Author$
  87.  * @version $Rev$, $Date$
  88.  *
  89.  */
  90. public class ProprietaOggettoRegistro extends HttpServlet{

  91.     /**
  92.      *
  93.      */
  94.     private static final long serialVersionUID = 1L;

  95.     @Override
  96.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  97.         this.processRequest(req, resp);
  98.     }

  99.     @Override
  100.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

  101.         ByteArrayOutputStream baos = new ByteArrayOutputStream();
  102.         try {
  103.             IOUtils.copy(req.getInputStream(), baos);
  104.         }catch(Exception e){
  105.             ControlStationCore.logError("Errore durante la ricerca delle informazioni oggetto: "+e.getMessage(), e);
  106.             return;
  107.         }          

  108.         this.processRequest(req, resp);
  109.     }

  110.     private void processRequest(HttpServletRequest request, HttpServletResponse response) {
  111.         try(ByteArrayOutputStream baosPayload = new ByteArrayOutputStream();){
  112.             HttpRequestMethod httpRequestMethod = HttpRequestMethod.valueOf(request.getMethod().toUpperCase());

  113.             if(httpRequestMethod.equals(HttpRequestMethod.POST)) { // copia del payload
  114.                 IOUtils.copy(request.getInputStream(), baosPayload);
  115.             }

  116.             HttpSession session = request.getSession(true);
  117.             PageData pd = new PageData();
  118.             UtilsHelper registroHelper = new UtilsHelper(request, pd, session);
  119.             ArchiviCore archiviCore = new ArchiviCore();
  120.             AccordiServizioParteComuneCore apcCore = new AccordiServizioParteComuneCore(archiviCore);
  121.             AccordiServizioParteSpecificaCore apsCore = new AccordiServizioParteSpecificaCore(archiviCore);
  122.             SoggettiCore soggettiCore = new SoggettiCore(archiviCore);
  123.             ServiziApplicativiCore saCore = new ServiziApplicativiCore(archiviCore);
  124.             RuoliCore ruoliCore = new RuoliCore(archiviCore);
  125.             ScopeCore scopeCore = new ScopeCore(archiviCore);
  126.             ConfigurazioneCore confCore = new ConfigurazioneCore(archiviCore);
  127.             GruppiCore gruppiCore = new GruppiCore(archiviCore);
  128.             PorteApplicativeCore paCore = new PorteApplicativeCore(archiviCore);
  129.             PorteDelegateCore pdCore = new PorteDelegateCore(archiviCore);

  130.             String identificativoOggetto = registroHelper.getParameter(UtilsCostanti.PARAMETRO_PROPRIETA_OGGETTO_ID_OGGETTO);
  131.             String tipoOggetto = registroHelper.getParameter(UtilsCostanti.PARAMETRO_PROPRIETA_OGGETTO_TIPO_OGGETTO);
  132.             String tipoRisposta = registroHelper.getParameter(UtilsCostanti.PARAMETRO_PROPRIETA_OGGETTO_TIPO_RISPOSTA);

  133.             InUsoType inUsoType = InUsoType.valueOf(tipoOggetto);
  134.            
  135.             ExporterUtils exporterUtils = new ExporterUtils(archiviCore);
  136.             List<?> identificativi = null;
  137.             List<String> risultatiRicerca = new ArrayList<>();
  138.             switch (inUsoType) {
  139.             case ACCORDO_SERVIZIO_PARTE_COMUNE:
  140.                 identificativi = exporterUtils.getIdsAccordiServizioParteComune(identificativoOggetto);
  141.                 for (Object object : identificativi) {
  142.                     IDAccordo idAccordo = (IDAccordo)object;
  143.                     AccordoServizioParteComuneSintetico as = apcCore.getAccordoServizioSintetico(idAccordo);
  144.                     risultatiRicerca.add(this.getProprieta(as.getProprietaOggetto(), as.getDescrizione()));
  145.                 }
  146.                 break;
  147.             case SERVIZIO_APPLICATIVO:
  148.                 identificativi = exporterUtils.getIdsServiziApplicativi(identificativoOggetto);
  149.                 for (Object object : identificativi) {
  150.                     IDServizioApplicativo idServizioApplicativo = (IDServizioApplicativo)object;
  151.                     ServizioApplicativo sa = saCore.getServizioApplicativo(idServizioApplicativo);
  152.                     risultatiRicerca.add(this.getProprieta(sa.getProprietaOggetto(), sa.getDescrizione()));
  153.                 }
  154.                 break;
  155.             case SOGGETTO:
  156.                 identificativi = exporterUtils.getIdsSoggetti(identificativoOggetto);
  157.                 for (Object object : identificativi) {
  158.                     IDSoggetto idSoggetto = (IDSoggetto)object;
  159.                     Soggetto soggetto = soggettiCore.getSoggettoRegistro(idSoggetto);
  160.                     risultatiRicerca.add(this.getProprieta(soggetto.getProprietaOggetto(), soggetto.getDescrizione()));
  161.                 }
  162.                 break;
  163.             case RUOLO:
  164.                 identificativi = exporterUtils.getIdsRuoli(identificativoOggetto);
  165.                 for (Object object : identificativi) {
  166.                     IDRuolo idRuolo = (IDRuolo)object;
  167.                     Ruolo ruolo = ruoliCore.getRuolo(idRuolo.getNome());
  168.                     risultatiRicerca.add(this.getProprieta(ruolo.getProprietaOggetto(), ruolo.getDescrizione()));
  169.                 }
  170.                 break;
  171.             case SCOPE:
  172.                 identificativi = exporterUtils.getIdsScope(identificativoOggetto);
  173.                 for (Object object : identificativi) {
  174.                     IDScope idScope = (IDScope)object;
  175.                     Scope scope = scopeCore.getScope(idScope.getNome());
  176.                     risultatiRicerca.add(this.getProprieta(scope.getProprietaOggetto(), scope.getDescrizione()));
  177.                 }
  178.                 break;
  179.             case GRUPPO:
  180.                 identificativi = exporterUtils.getIdsGruppi(identificativoOggetto);
  181.                 for (Object object : identificativi) {
  182.                     IDGruppo idGruppo = (IDGruppo)object;
  183.                     Gruppo gruppo = gruppiCore.getGruppo(idGruppo.getNome());
  184.                     risultatiRicerca.add(this.getProprieta(gruppo.getProprietaOggetto(), gruppo.getDescrizione()));
  185.                 }
  186.                 break;
  187.             case TOKEN_POLICY:
  188.                 identificativi = exporterUtils.getIdsTokenPolicy(identificativoOggetto);
  189.                 for (Object object : identificativi) {
  190.                     IDGenericProperties idGP = (IDGenericProperties)object;
  191.                     GenericProperties gp = confCore.getGenericProperties(idGP.getNome(), idGP.getTipologia(), false);
  192.                     risultatiRicerca.add(this.getProprieta(gp.getProprietaOggetto(), gp.getDescrizione()));
  193.                 }
  194.                 break;
  195.             case ATTRIBUTE_AUTHORITY:
  196.                 identificativi = exporterUtils.getIdsAttributeAuthority(identificativoOggetto);
  197.                 for (Object object : identificativi) {
  198.                     IDGenericProperties idGP = (IDGenericProperties)object;
  199.                     GenericProperties gp = confCore.getGenericProperties(idGP.getNome(), idGP.getTipologia(), false);
  200.                     risultatiRicerca.add(this.getProprieta(gp.getProprietaOggetto(), gp.getDescrizione()));
  201.                 }
  202.                 break;

  203.             case EROGAZIONE:{
  204.                 String uriAPSerogata = identificativoOggetto;
  205.                 IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromUri(uriAPSerogata);
  206.                 AccordoServizioParteSpecifica as = apsCore.getAccordoServizioParteSpecifica(idServizio);
  207.                 ProprietaOggetto p = as.getProprietaOggetto();
  208.                 p = mergeProprietaOggetto(p, idServizio, paCore, saCore, registroHelper);
  209.                 risultatiRicerca.add(this.getProprieta(p, as.getDescrizione()));
  210.                 break;
  211.             }
  212.             case FRUIZIONE:{
  213.                 String uriAPSfruita = identificativoOggetto;
  214.                 if(uriAPSfruita.contains("@")) {
  215.                     String tipoNomeFruitore = uriAPSfruita.split("@")[1];
  216.                     uriAPSfruita = uriAPSfruita.split("@")[0];
  217.                     IDSoggetto idSoggettoFruitore = new IDSoggetto(tipoNomeFruitore.split("/")[0], tipoNomeFruitore.split("/")[1]);
  218.                     IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromUri(uriAPSfruita);
  219.                     AccordoServizioParteSpecifica as = apsCore.getAccordoServizioParteSpecifica(idServizio);
  220.                     for (Fruitore fruitore : as.getFruitoreList()) {
  221.                         if(idSoggettoFruitore.getTipo().equals(fruitore.getTipo()) && idSoggettoFruitore.getNome().equals(fruitore.getNome())) {
  222.                             ProprietaOggetto p = fruitore.getProprietaOggetto();
  223.                             p = mergeProprietaOggetto(p, idServizio, idSoggettoFruitore, pdCore, registroHelper);
  224.                             risultatiRicerca.add(this.getProprieta(p,fruitore.getDescrizione()));
  225.                             break;
  226.                         }
  227.                     }
  228.                 }
  229.                 else {
  230.                     risultatiRicerca.add("Internal Error: informazione fruitore non presente");
  231.                 }
  232.                 break;
  233.             }
  234.             case RISORSA:
  235.             case PORT_TYPE:
  236.             case OPERAZIONE:
  237.             case CANALE:
  238.             case ACCORDO_COOPERAZIONE:
  239.             case ACCORDO_SERVIZIO_COMPOSTO:
  240.             case ACCORDO_SERVIZIO_PARTE_SPECIFICA:
  241.             case EROGAZIONE_INFO:
  242.             case FRUITORE:
  243.             case FRUIZIONE_INFO:
  244.             case PDD:
  245.             case PORTA_APPLICATIVA:
  246.             case PORTA_DELEGATA:
  247.             case RATE_LIMITING_POLICY:
  248.             case PLUGIN_CLASSE:
  249.                 throw new CoreException("TipoOggetto non gestito.");
  250.             }

  251.             ServletOutputStream outputStream = response.getOutputStream();
  252.            
  253.             if(tipoRisposta.equalsIgnoreCase(UtilsCostanti.VALUE_PARAMETRO_PROPRIETA_OGGETTO_TIPO_RISPOSTA_JSON)) {
  254.                 response.setContentType(HttpConstants.CONTENT_TYPE_JSON);
  255.                 JSONUtils jsonUtils = JSONUtils.getInstance(true);
  256.                 Map<String, Object> mapResult = new HashMap<>();
  257.                 mapResult.put(UtilsCostanti.KEY_JSON_RISPOSTA_USO, risultatiRicerca);
  258.                 jsonUtils.writeTo(mapResult, outputStream);
  259.             } else if(tipoRisposta.equalsIgnoreCase(UtilsCostanti.VALUE_PARAMETRO_PROPRIETA_OGGETTO_TIPO_RISPOSTA_TEXT)) {
  260.                 response.setContentType(HttpConstants.CONTENT_TYPE_PLAIN);
  261.                 outputStream.write(StringUtils.join(risultatiRicerca.toArray(new String[1])).getBytes());
  262.             } else {
  263.                 throw new CoreException("TipoRiposta non gestito.");
  264.             }
  265.            

  266.         }catch(Exception e){
  267.             ControlStationCore.logError("Errore durante la ricerca delle informazioni oggetto: "+e.getMessage(), e);
  268.         }
  269.     }
  270.    
  271.     public static ProprietaOggetto mergeProprietaOggetto(ProprietaOggetto p, IDServizio idServizio, PorteApplicativeCore paCore, ServiziApplicativiCore saCore,
  272.             ConsoleHelper consoleHelper) {
  273.         /** Devo considerare tutte le porte */
  274.         List<IDPortaApplicativa> listPA = getIDPorteApplicativeAssociateSafe(paCore, idServizio);
  275.         if(listPA!=null && !listPA.isEmpty()) {
  276.             for (IDPortaApplicativa idPA : listPA) {
  277.                 if(idPA!=null) {
  278.                     PortaApplicativa pa = getPASafe(paCore, idPA);
  279.                     if(pa!=null) {
  280.                         p = mergeProprietaOggetto(p, idServizio, pa, saCore, consoleHelper);
  281.                     }
  282.                 }      
  283.             }
  284.         }
  285.         return p;
  286.     }
  287.     private static ProprietaOggetto mergeProprietaOggetto(ProprietaOggetto p, IDServizio idServizio, PortaApplicativa pa, ServiziApplicativiCore saCore,
  288.             ConsoleHelper consoleHelper) {
  289.         if(pa!=null) {
  290.             boolean consideraDataCreazioneComeDataModifica  = true;
  291.             p = consoleHelper.mergeProprietaOggetto(p, pa.getProprietaOggetto(), consideraDataCreazioneComeDataModifica);
  292.             if(pa.sizeServizioApplicativoList()>0) {
  293.                 for (PortaApplicativaServizioApplicativo pasa : pa.getServizioApplicativoList()) {
  294.                     IDServizioApplicativo idSA = new IDServizioApplicativo();
  295.                     idSA.setIdSoggettoProprietario(idServizio.getSoggettoErogatore());
  296.                     idSA.setNome(pasa.getNome());
  297.                     ServizioApplicativo sa = getSASafe(saCore, idSA);
  298.                     if(sa!=null && !ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER.equals(sa.getTipo())) {
  299.                         p = consoleHelper.mergeProprietaOggetto(p, sa.getProprietaOggetto(), !consideraDataCreazioneComeDataModifica);
  300.                     }
  301.                 }
  302.             }
  303.         }
  304.         return p;
  305.     }
  306.    
  307.     public static ProprietaOggetto mergeProprietaOggetto(ProprietaOggetto p, IDServizio idServizio, IDSoggetto idSoggettoFruitore, PorteDelegateCore pdCore,
  308.             ConsoleHelper consoleHelper) {
  309.         /** Devo considerare tutte le porte */
  310.         List<IDPortaDelegata> listPD = getIDPorteDelegateAssociateSafe(pdCore, idServizio, idSoggettoFruitore);
  311.         if(listPD!=null && !listPD.isEmpty()) {
  312.             for (IDPortaDelegata idPD : listPD) {
  313.                 if(idPD!=null) {
  314.                     PortaDelegata pd = getPDSafe(pdCore, idPD);
  315.                     if(pd!=null) {
  316.                         p = mergeProprietaOggetto(p, idServizio, idSoggettoFruitore, pd, consoleHelper);
  317.                     }
  318.                 }
  319.             }
  320.         }
  321.         return p;
  322.     }
  323.     private static ProprietaOggetto mergeProprietaOggetto(ProprietaOggetto p, IDServizio idServizio, IDSoggetto idSoggettoFruitore, PortaDelegata pd,
  324.             ConsoleHelper consoleHelper) {
  325.         if(idServizio!=null && idSoggettoFruitore!=null) {
  326.             // lascio i parametri per eventuali altri merge
  327.         }
  328.         if(pd!=null) {
  329.             boolean consideraDataCreazioneComeDataModifica  = true;
  330.             p = consoleHelper.mergeProprietaOggetto(p, pd.getProprietaOggetto(), consideraDataCreazioneComeDataModifica);
  331.         }
  332.         return p;
  333.     }
  334.    
  335.     private static List<IDPortaApplicativa> getIDPorteApplicativeAssociateSafe(PorteApplicativeCore paCore, IDServizio idServizio) {
  336.         List<IDPortaApplicativa> l = null;
  337.         try {
  338.             l = paCore.getIDPorteApplicativeAssociate(idServizio);
  339.         }catch(Exception e){
  340.             ControlStationCore.logError("Errore durante il recupero delle porte applicative associate al servizio '"+idServizio+"': "+e.getMessage(), e);
  341.         }
  342.         return l;
  343.     }
  344.     private static List<IDPortaDelegata> getIDPorteDelegateAssociateSafe(PorteDelegateCore pdCore, IDServizio idServizio, IDSoggetto idFruitore) {
  345.         List<IDPortaDelegata> l = null;
  346.         try {
  347.             l = pdCore.getIDPorteDelegateAssociate(idServizio, idFruitore);
  348.         }catch(Exception e){
  349.             ControlStationCore.logError("Errore durante il recupero delle porte delegate associate al servizio '"+idServizio+"': "+e.getMessage(), e);
  350.         }
  351.         return l;
  352.     }
  353.     private static PortaApplicativa getPASafe(PorteApplicativeCore paCore, IDPortaApplicativa idPA) {
  354.         try {
  355.             return paCore.getPortaApplicativa(idPA);
  356.         }catch(Exception e){
  357.             ControlStationCore.logError("Errore durante il recupero della porta applicativa '"+idPA+"': "+e.getMessage(), e);
  358.         }
  359.         return null;
  360.     }
  361.     private static PortaDelegata getPDSafe(PorteDelegateCore pdCore, IDPortaDelegata idPD) {
  362.         try {
  363.             return pdCore.getPortaDelegata(idPD);
  364.         }catch(Exception e){
  365.             ControlStationCore.logError("Errore durante il recupero della porta delegata '"+idPD+"': "+e.getMessage(), e);
  366.         }
  367.         return null;
  368.     }
  369.     private static ServizioApplicativo getSASafe(ServiziApplicativiCore saCore, IDServizioApplicativo idSA) {
  370.         try {
  371.             return saCore.getServizioApplicativo(idSA);
  372.         }catch(Exception e){
  373.             ControlStationCore.logError("Errore durante il recupero dell'applicativo '"+idSA+"': "+e.getMessage(), e);
  374.         }
  375.         return null;
  376.     }
  377.     public static org.openspcoop2.core.config.ProprietaOggetto getProprietaOggettoSafe(PorteApplicativeCore paCore, IDPortaApplicativa idPA) {
  378.         try {
  379.             return paCore.getProprietaOggetto(idPA);
  380.         }catch(Exception e){
  381.             ControlStationCore.logError("Errore durante il recupero della porta applicativa '"+idPA+"': "+e.getMessage(), e);
  382.         }
  383.         return null;
  384.     }
  385.     public static org.openspcoop2.core.config.ProprietaOggetto getProprietaOggettoSafe(PorteDelegateCore pdCore, IDPortaDelegata idPD) {
  386.         try {
  387.             return pdCore.getProprietaOggetto(idPD);
  388.         }catch(Exception e){
  389.             ControlStationCore.logError("Errore durante il recupero della porta delegata '"+idPD+"': "+e.getMessage(), e);
  390.         }
  391.         return null;
  392.     }
  393.     public static org.openspcoop2.core.config.ProprietaOggetto getProprietaOggettoSafe(ServiziApplicativiCore saCore, IDServizioApplicativo idSA) {
  394.         try {
  395.             return saCore.getProprietaOggetto(idSA);
  396.         }catch(Exception e){
  397.             ControlStationCore.logError("Errore durante il recupero dell'applicativo '"+idSA+"': "+e.getMessage(), e);
  398.         }
  399.         return null;
  400.     }
  401.    
  402.     private String getProprieta(org.openspcoop2.core.registry.beans.ProprietaOggettoSintetico p,
  403.             String descrizione) {
  404.         return getProprieta(p!=null ? p.getUtenteRichiedente() : null,
  405.                 p!=null ? p.getDataCreazione() : null,
  406.                 p!=null ? p.getUtenteUltimaModifica() : null,
  407.                 p!=null ? p.getDataUltimaModifica() : null,
  408.                 descrizione);
  409.     }
  410.     private String getProprieta(org.openspcoop2.core.registry.ProprietaOggetto p,
  411.             String descrizione) {
  412.         return getProprieta(p!=null ? p.getUtenteRichiedente() : null,
  413.                 p!=null ? p.getDataCreazione() : null,
  414.                 p!=null ? p.getUtenteUltimaModifica() : null,
  415.                 p!=null ? p.getDataUltimaModifica() : null,
  416.                 descrizione);
  417.     }
  418.     private String getProprieta(org.openspcoop2.core.config.ProprietaOggetto p,
  419.             String descrizione) {
  420.         return getProprieta(p!=null ? p.getUtenteRichiedente() : null,
  421.                 p!=null ? p.getDataCreazione() : null,
  422.                 p!=null ? p.getUtenteUltimaModifica() : null,
  423.                 p!=null ? p.getDataUltimaModifica() : null,
  424.                 descrizione);
  425.     }
  426.     private String getProprieta(String utenteRichiedente, Date dataCreazione,
  427.             String utenteUtimaModifica, Date dataUtimaModifica,
  428.             String descrizione) {
  429.         StringBuilder sb = new StringBuilder();
  430.         if(dataCreazione!=null) {
  431.             String dataMs = CostantiControlStation.formatDateMs(dataCreazione);
  432.             sb.append(CostantiControlStation.LABEL_DATA_CREAZIONE).append(": ").append(dataMs);
  433.         }
  434.         if(utenteRichiedente!=null) {
  435.             if(sb.length()>0) {
  436.                 sb.append("\n");
  437.             }
  438.             sb.append(CostantiControlStation.LABEL_UTENTE_RICHIEDENTE).append(": ").append(utenteRichiedente);
  439.         }
  440.         if(dataUtimaModifica!=null) {
  441.             String dataMs = CostantiControlStation.formatDateMs(dataUtimaModifica);
  442.             if(sb.length()>0) {
  443.                 sb.append("\n\n");
  444.             }
  445.             sb.append(CostantiControlStation.LABEL_DATA_ULTIMA_MODIFICA).append(": ").append(dataMs);
  446.         }
  447.         if(utenteUtimaModifica!=null) {
  448.             if(sb.length()>0) {
  449.                 sb.append("\n");
  450.             }
  451.             sb.append(CostantiControlStation.LABEL_UTENTE_ULTIMA_MODIFICA).append(": ").append(utenteUtimaModifica);
  452.         }
  453.        
  454.         if(descrizione!=null && StringUtils.isNotEmpty(descrizione)) {
  455.             if(sb.length()>0) {
  456.                 sb.append("\n\n");
  457.             }
  458.             sb.append(CostantiControlStation.LABEL_PROPRIETA_DESCRIZIONE).append(": \n");
  459.             sb.append(descrizione);
  460.         }
  461.        
  462.         if(sb.length()<=0) {
  463.             sb.append("Nessuna proprietà disponibile");
  464.         }
  465.         return sb.toString();
  466.     }
  467. }