Portal Context

From Gcube Wiki
Revision as of 17:05, 14 November 2016 by Massimiliano.assante (Talk | contribs) (Getting the Portal Context in your IDE (Development))

Jump to: navigation, search

Introduction

The gCube Portal Manager is a component all portlets need to use to get the portal context where they are running into & to get the centralised email manager for sending emails from your application.

What is a portal context?

It is the component you must use to (programmatically) get:

  • the current user identifier using your webapp/portlet;
  • the current scope (infrastructure context) the user is currently working;
  • the user (authorisation) token for that scope (infrastructure context).

Apart from that, portal context provides your application with contextual information about the gCube Gateway your webapp/portlet is running on, for instance you can:

  • retrieve the list of Virtual Organizations available on a given portal;
  • retrieve the configured senders of emails sent by the portal;
  • retrieve the gateway name.

Maven Dependency

In order to use it in your project, add the following dependency to the project's pom.xml file

<dependency>
	<groupId>org.gcube.common.portal</groupId>
	<artifactId>portal-manager</artifactId>
	<scope>provided</scope>
</dependency>

PortalContext Usage/Examples

First, get an instance of the PortalContext by invoking the static method PortalContext.getConfiguration();

PortalContext instance = PortalContext.getConfiguration();

Getting the current User

  • Get the current username of the current user:
import org.gcube.common.portal;
import org.gcube.vomanagement.usermanagement.model.GCubeUser;
...
PortalContext pContext = PortalContext.getConfiguration();
String username = pContext.getCurrentUser(httpServletRequest).getUsername();
import org.gcube.common.portal;
import org.gcube.vomanagement.usermanagement.model.GCubeUser;
...
PortalContext pContext = PortalContext.getConfiguration();
GCubeUser theUser = pContext.getCurrentUser(httpServletRequest);

Getting the infrastructure Context (Scope)

Please note: the following methods needed to get the infrastructure context work with AJAX calls (i.e. XMLHttpRequest to exchange data with a server behind the scenes) only. If you use standard http GET or POST to exchange data with a server, you must handle the infrastructure context information differently. Please see the following page for further information: https://wiki.gcube-system.org/gcube/ClientContextLibrary.

  • Get the current scope (a.k.a. the infrastructure context):
import org.gcube.common.portal;
...
PortalContext pContext = PortalContext.getConfiguration();
String currentScope = pContext.getCurrentScope(httpServletRequest);
  • Get the current user token:
import org.gcube.common.portal;
...
PortalContext pContext = PortalContext.getConfiguration();
String userToken = pContext.getCurrentUserToken(httpServletRequest);
  • Get the current group id (we map VREs with Liferay groups, the groupid identifies the VRE univocally in Liferay).
import org.gcube.common.portal;
...
PortalContext pContext = PortalContext.getConfiguration();
long currGroupId = pContext.getCurrentGroupId(httpServletRequest);

Getting the current Infrastructure

  • the name of the current infrastructure in which the application is running on:
package org.gcube.common.portal;
....
// get the current infrastructure name
String infrastructureName = instance.getInfrastructureName();
  • retrieve the list of VOs
// get the VOs
List<String> listVo = instance.getVOs();

Getting the Gateway (Server) information

  • Get name of the gateway and its URL:
package org.gcube.common.portal;
...
// get the gateway name given the HttpServletRequest
String gatewayName = instance.getGatewayName(request);
 
// get the gateway url given the HttpServletRequest
String gatewayUrl = instance.getGatewayUrl(request);
  • Get landing page path of the current VRE or VO e.g. "/group/i-marine"
package org.gcube.common.portal;
...
// get the landing page path of the current Site e.g. "/group/i-marine"
String landingPagePath = instance.getSiteLandingPagePath(request);


Centralised Email Manager

The constructor expects the following parameters:

public EmailNotification(String recipient, String subject, String body, HttpServletRequest httpServletRequest)

once the object is instantiated just use the public void sendEmail() method to add the email to queue. The email will be delivered within minutes.

How to use it:

package org.gcube.common.portal.mailing;
 
//instanciate
EmailNotification mailToSend = new EmailNotification(
					email , 
					subject, 
					emailText, 
					request);
//send
mailToSend sendEmail();

Please note that you can also cc and bcc people.

Getting the Portal Context in your IDE (Development)

The client context relies on Liferay.ThemeDisplay javascript object, which obviously is not available if you run your application outside the gCube portal. To overcome this limitation and allow developers to test their applications in any IDE (e.g. Eclipse), you can configure a property file on your development machine containing the context information you need for development purposes.

The name of the file must be gcube-dev-context.properties, and must be placed under an environment variable defined in the run configuration on your IDE called GCUBE_DEV_HOME. The PortalManager will recognize if the application is running on an actual gateway or on an IDE and, in the latter case, retrieves and uses the information written in this file for your application.

# ONLY FOR LOCAL (IDE) DEVELOPMENT - NOT FOR PRODUCTION USE!
# Place this file under $GCUBE_DEV_HOME/ note that the environment variable GCUBE_DEV_HOME must be set on your IDE
# change the properties with your user data and desired scope / token
 
# a development user 
user.username=test.user
user.name=aTestName
user.lastname=aTestLastName
user.email=testing.user@gcube-system.org
 
# a development scope (the scope must be bound to the token below)
development.scope=/gcube/devsec/devVRE
development.groupname=devVRE
development.groupid=-1
 
# a valid user token on the (above) development scope.
# you can obtain it by registering on one development VRE and using Token Generator portlet
user.token= ....