Formación y Desarrollo Liferay: Accediendo a la configuración de otros portlets

07-12-2016
 
Liferay Properties

Liferay Properties

En algunos desarrollos nos puede interesar leer la configuración de otros Portlets, por ejemplo, para tener la configuración centralizada en un sitio. Si nuestra instalación tiene varios portlets, puede ser un engorro tener que cambiar todo en varios sitios.

Para poder acceder a las propiedades de los portlets debemos saber que Liferay guarda la configuración de cada portlet en la tabla ‘PortletPreferences’. En esta tabla encontraremos, por cada registro, la información de cada Portlet en formato XML. Es decir, que también tendremos que saber como parsear documentos XML. Esto último lo haremos usando la classe ‘SaxReaderUtil’.

Vamos a suponer que en nuestro Site sabemos que existe un portlet con ID ‘albertcollege_WAR_albertcollegeportlet'(Solamente uno, en una página privada) que contiene una propiedad ‘miPropiedad’ que queremos conocer. Pues la función(Comentada) que obtiene esta propiedad quedaria así:

public static String getPropiedad( ThemeDisplay themeDisplay ) {
	try { 
		/* Obtenemos todas las páginas privadas del site actual */
		List<Layout> layouts=LayoutLocalServiceUtil.getLayouts( themeDisplay.getScopeGroupId(), true);
		for ( Layout layout:layouts ) {
			/* Obtenemos las preferencias del portlet "albertcollege_WAR_albertcollegeportlet" de la página */
			List<PortletPreferences> pps=PortletPreferencesLocalServiceUtil.getPortletPreferences(layout.getPlid(), "albertcollege_WAR_albertcollegeportlet");
				
			for ( PortletPreferences pp:pps ) {
				/* Parseamos el XML */
				Document document = SAXReaderUtil.read( pp.getPreferences() );
					
				/* Devolvemos la propiedad */
				List<Node> nodes=document.selectNodes("/portlet-preferences/preference/name");
				for ( Node n:nodes )
					if ( n.getText().equals( "miPropiedad" ) )
						return n.getParent().selectNodes("value").get(0).getText();
				}
			}
	} catch (Exception ex) { ex.printStackTrace(); } 
		
	return null;
	}

Un truco fácil y rápido! Buen puente(o acueducto) 😀 los que lo hagáis…

Leave a Reply

© Albert Coronado Calzada