portal-my-vres-portlet/PORTING.md

4.4 KiB
Raw Permalink Blame History

Porting "MyVres" (Liferay 7.4)

Questo documento descrive il porting della componente "MyVres" a Liferay 7.4 e, in particolare, come vengono recuperate e mostrate le VRE associate allutente.

Obiettivo

  • Sostituire la vecchia logica GWT/RPC con un MVCResourceCommand che restituisce JSON.
  • Allineare la selezione delle VRE allutente e al sito corrente, mantenendo il comportamento di Liferay 6.2 (URL, categorie, membership).

File principali

  • src/main/java/org/gcube/portlet/user/my_vres/resource/GetUserVREsMVCResourceCommand.java

Modifiche chiave

  • Introduzione di un MVCResourceCommand esposto come mvc.command.name=/myvres/get_user_vres che produce i dati per la UI.
  • Recupero affidabile di siteGroupId e userId via ThemeDisplay con fallback se non disponibile.
  • Popolamento diretto delle VRE dellutente sul sito corrente, evitando dipendenze dalla gerarchia VO.
  • Categorizzazione per Virtual Group del sito corrente.
  • Risoluzione dei nomi localizzati (XML Liferay) per mostrare solo il testo della lingua corrente o del default locale.
  • Mantenimento del formato di friendlyURL stile 6.2 (senza /workspace).
  • Validazione CSRF tramite AuthTokenUtil.checkCSRFToken.

Recupero di sito e utente

  • ThemeDisplay td = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY)
    • siteGroupId = td.getSiteGroupId()
    • userId = td.getUserId()
  • Fallback:
    • siteGroupId = ManagementUtils.getSiteGroupIdFromServletRequest(serverName)
    • userId = PortalUtil.getUserId(request)

Come vengono prese le VRE associate allutente

  1. Si interroga il GroupManager per ottenere le VRE dellutente limitate al sito corrente:
    • Set<GCubeGroup> userSiteGroups = gm.listGroupsByUserAndSiteGroupId(userId, siteGroupId)
  2. Se il set è vuoto (es. mismatch dei Virtual Group), si applica un fallback alle VRE generali dellutente:
    • Collection<GCubeGroup> sourceVREs = gm.listVresByUser(userId)
  3. Per ciascuna VRE:
    • name: risolto in modo localizzato (vedi sotto).
    • context: gm.getInfrastructureScope(vre.getGroupId()).
    • imageURL: gm.getGroupLogoURL(vre.getLogoId()).
    • friendlyURL: "/group" + vre.getFriendlyURL() (senza /workspace).
    • userBelonging: forzato a BELONGING poiché la VRE proviene dalle membership dellutente.

Categorizzazione per Virtual Group

  • Si leggono i VirtualGroup del sito corrente: gm.getVirtualGroups(siteGroupId); ogni nome crea una categoria.
  • Ogni VRE viene associata alle categorie dei suoi VirtualGroup: gm.getVirtualGroups(vre.getGroupId()).

Localizzazione dei nomi (no XML a schermo)

  • In Liferay, alcuni campi possono essere salvati come XML localizzato (con più lingue). Per evitare che appaia lXML, durante la costruzione del JSON si risolve il testo nella lingua corrente o nel default locale, utilizzando:
    • LocalizationUtil.getLocalization(xml, langId)
    • Fallback: LocalizationUtil.getDefaultLanguageId(xml)
  • Questo è applicato sia ai nomi delle categorie (Virtual Group) che ai nomi delle VRE.

Sicurezza

  • Validazione CSRF: AuthTokenUtil.checkCSRFToken(httpServletRequest, GetUserVREsMVCResourceCommand.class.getName()).

Struttura JSON restituita

Endpoint: /myvres/get_user_vres

{
  "categories": [
    {
      "name": "Virtual Group A",
      "vres": [
        {
          "name": "devVRE",
          "description": "",
          "imageURL": "...",
          "context": "/gcube/dev",
          "friendlyURL": "/group/devvre",
          "userBelonging": "BELONGING"
        }
      ]
    }
  ]
}

Note sul porting da 6.2

  • URL delle VRE: mantenuto il formato "/group" + friendlyURL senza /workspace per compatibilità UI.
  • La gerarchia VO→VRE non è più necessaria per determinare la membership: si usano direttamente le API di membership per sito.
  • I Virtual Group sono letti come attributi/custom group del sito corrente (7.4).

Deploy e verifica

  • Deploy: ./gradlew :modules:my-vres-portlet:deploy
  • Anteprima: pagina del sito corrente che include la portlet; le VRE appaiono sotto i rispettivi Virtual Group. Le card aprono lURL "/group/<friendly>".

Troubleshooting rapido

  • Se la lista è vuota: controllare che lutente sia membro delle VRE nel sito corrente (Control Panel → Sites → Membership) e che i Virtual Group della VRE coincidano con quelli del sito.
  • In caso di mismatch, il fallback mostra comunque le VRE dellutente fuori sito.