diff --git a/pom.xml b/pom.xml
index 8b45d66..d50ae29 100644
--- a/pom.xml
+++ b/pom.xml
@@ -191,7 +191,13 @@
uri-resolver-manager
[1.0.0-SNAPSHOT,2.0.0-SNAPSHOT)
-
+
+
+
+ org.gcube.data.analysis
+ r-connector-client
+ 1.0.0-SNAPSHOT
+
diff --git a/src/main/java/org/gcube/portlets/user/td/gwtservice/server/SessionUtil.java b/src/main/java/org/gcube/portlets/user/td/gwtservice/server/SessionUtil.java
index 0ef3652..b0d379c 100644
--- a/src/main/java/org/gcube/portlets/user/td/gwtservice/server/SessionUtil.java
+++ b/src/main/java/org/gcube/portlets/user/td/gwtservice/server/SessionUtil.java
@@ -17,6 +17,7 @@ import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper;
import org.gcube.portlets.user.td.gwtservice.server.file.CSVFileUploadSession;
import org.gcube.portlets.user.td.gwtservice.server.file.CodelistMappingFileUploadSession;
import org.gcube.portlets.user.td.gwtservice.server.trservice.TRTasksManager;
+import org.gcube.portlets.user.td.gwtservice.shared.Constants;
import org.gcube.portlets.user.td.gwtservice.shared.chart.ChartTopRatingSession;
import org.gcube.portlets.user.td.gwtservice.shared.codelisthelper.CodelistMappingSession;
import org.gcube.portlets.user.td.gwtservice.shared.csv.CSVExportSession;
diff --git a/src/main/java/org/gcube/portlets/user/td/gwtservice/server/TDRStudioServlet.java b/src/main/java/org/gcube/portlets/user/td/gwtservice/server/TDRStudioServlet.java
new file mode 100644
index 0000000..352e5c1
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/td/gwtservice/server/TDRStudioServlet.java
@@ -0,0 +1,98 @@
+/**
+ *
+ */
+package org.gcube.portlets.user.td.gwtservice.server;
+
+import static org.gcube.data.analysis.rconnector.client.Constants.rConnector;
+
+import java.io.IOException;
+import java.net.URI;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.gcube.application.framework.core.session.ASLSession;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Returns a RSTudio link
+ *
+ * @author "Giancarlo Panichi" g.panichi@isti.cnr.it
+ *
+ */
+public class TDRStudioServlet extends HttpServlet {
+ private static final String TAB_RESOURCE_ID_PARAMETER="TabResourceId";
+
+ private static final long serialVersionUID = -1649268678733476057L;
+ private static Logger logger = LoggerFactory
+ .getLogger(TDRStudioServlet.class);
+
+
+
+ protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+ throws ServletException, IOException {
+ handleRequest(req, resp);
+ }
+
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+ throws ServletException, IOException {
+ handleRequest(req, resp);
+ }
+
+ protected void handleRequest(HttpServletRequest request,
+ HttpServletResponse response) throws ServletException, IOException {
+ try {
+ logger.info("TDRStudioServlet");
+ long startTime = System.currentTimeMillis();
+
+ HttpSession session = request.getSession();
+
+ if (session == null) {
+ logger.error("Error getting the session, no session valid found: "
+ + session);
+ response.sendError(
+ HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+ "ERROR-Error getting the user session, no session found "
+ + session);
+ return;
+ }
+ logger.debug("TDRSTudioServlet session id: "
+ + session.getId());
+
+ ASLSession aslSession=SessionUtil.getAslSession(session);
+
+ String tabResourceId=request.getParameter(TAB_RESOURCE_ID_PARAMETER);
+ logger.debug("Request RStudio for TR: "+tabResourceId);
+
+ URI url=rConnector().build().connect(aslSession.getUsername(), Long.valueOf(tabResourceId));
+ logger.debug("URL retrieved from rConnector: "+url.toString());
+
+ //response.setStatus(HttpServletResponse.SC_OK);
+ response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
+ response.setHeader("Location", url.toString());
+ response.setHeader("gcube-scope", aslSession.getScope());
+ //response.setHeader("Set-Cookie", "PippoPlutoPaperino");
+ //response.setHeader("Set-Cookie", cookieValue);
+
+ logger.debug("Response: "+response.toString());
+
+ logger.trace("Response in "
+ + (System.currentTimeMillis() - startTime)+"ms");
+
+ } catch (Throwable e) {
+ logger.error("Error TDRStudio: "
+ + e.getLocalizedMessage());
+ e.printStackTrace();
+ response.sendError(
+ HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+ "Error retrieving file from storage: "
+ + e.getLocalizedMessage());
+ return;
+ }
+ }
+}
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index aba2328..fb8a033 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -30,6 +30,13 @@
RetrieveChartFileServlet
org.gcube.portlets.user.td.gwtservice.server.RetrieveChartFileServlet
+
+
+
+ TDRStudioServlet
+ org.gcube.portlets.user.td.gwtservice.server.TDRStudioServlet
+
+
TDLogsServlet
@@ -69,6 +76,11 @@
/tdgwtservice/RetrieveChartFileServlet
+
+ TDRStudioServlet
+ /tdgwtservice/TDRStudioServlet
+
+
TDLogsServlet
/tdgwtservice/TDLogsServlet