4.4 KiB
4.4 KiB
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 all’utente.
Obiettivo
- Sostituire la vecchia logica GWT/RPC con un
MVCResourceCommandche restituisce JSON. - Allineare la selezione delle VRE all’utente 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
MVCResourceCommandesposto comemvc.command.name=/myvres/get_user_vresche produce i dati per la UI. - Recupero affidabile di
siteGroupIdeuserIdviaThemeDisplaycon fallback se non disponibile. - Popolamento diretto delle VRE dell’utente 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
friendlyURLstile 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 all’utente
- Si interroga il
GroupManagerper ottenere le VRE dell’utente limitate al sito corrente:Set<GCubeGroup> userSiteGroups = gm.listGroupsByUserAndSiteGroupId(userId, siteGroupId)
- Se il set è vuoto (es. mismatch dei Virtual Group), si applica un fallback alle VRE generali dell’utente:
Collection<GCubeGroup> sourceVREs = gm.listVresByUser(userId)
- 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 aBELONGINGpoiché la VRE proviene dalle membership dell’utente.
Categorizzazione per Virtual Group
- Si leggono i
VirtualGroupdel 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 l’XML, 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" + friendlyURLsenza/workspaceper 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 l’URL
"/group/<friendly>".
Troubleshooting rapido
- Se la lista è vuota: controllare che l’utente 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 dell’utente fuori sito.