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