From e1e322c6c6f3df9fb61f7e14c77955b870c9699a Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Tue, 9 May 2017 09:11:08 +0000 Subject: [PATCH] ref 8432:TDM - DatabasesManager - Support Java 8 compatibility https://support.d4science.org/issues/8432 Updated to support Java 8 compatibility git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/databases-manager-portlet@148376 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 8 +- .settings/org.eclipse.jdt.core.prefs | 6 +- .settings/org.eclipse.wst.common.component | 3 + ....eclipse.wst.common.project.facet.core.xml | 2 +- distro/changelog.xml | 4 + pom.xml | 23 +- .../client/DatabasesManager.java | 11 +- .../client/utils/UIDGenerator.java | 18 +- .../portlet/DatabasesManager.java | 13 +- .../server/GWTdbManagerServiceImpl.java | 250 +++++++++++------- .../server/util/ServiceCredentials.java | 141 ++++++++++ .../server/util/SessionUtil.java | 218 +++++++++++---- .../shared/AlgorithmsName.java | 4 +- .../shared/exception/ServiceException.java | 39 +++ src/main/webapp/WEB-INF/web.xml | 10 - 15 files changed, 553 insertions(+), 197 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/databasesmanager/server/util/ServiceCredentials.java create mode 100644 src/main/java/org/gcube/portlets/user/databasesmanager/shared/exception/ServiceException.java diff --git a/.classpath b/.classpath index 4dc55e9..27e030b 100644 --- a/.classpath +++ b/.classpath @@ -1,6 +1,6 @@ - + @@ -20,10 +20,10 @@ - + - + - + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 6249222..672496e 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,12 +1,12 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 22f85c8..b648fc3 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -4,6 +4,9 @@ + + uses + diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml index f801044..376d52f 100644 --- a/.settings/org.eclipse.wst.common.project.facet.core.xml +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -3,5 +3,5 @@ - + diff --git a/distro/changelog.xml b/distro/changelog.xml index d173cd9..b41f4a1 100644 --- a/distro/changelog.xml +++ b/distro/changelog.xml @@ -1,4 +1,8 @@ + + Support Java 8 compatibility [ticket #8432] + Fixed groupId diff --git a/pom.xml b/pom.xml index b17f2e6..a8731b7 100644 --- a/pom.xml +++ b/pom.xml @@ -15,9 +15,10 @@ org.gcube.portlets.user databases-manager-portlet war - 1.7.0-SNAPSHOT + 1.8.0-SNAPSHOT DatabasesResourceManagerPortlet Databases Resource Manager Portlet + https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/databases-manager-portlet @@ -40,6 +41,9 @@ distro config + + 1.7 + 2.6.1 3.3.2 @@ -99,13 +103,9 @@ - org.gcube.portal - custom-portal-handler - - - - org.gcube.applicationsupportlayer - aslcore + org.gcube.common.portal + portal-manager + provided @@ -114,6 +114,13 @@ provided + + org.gcube.portal + client-context-library + [1.0.0-SNAPSHOT,) + compile + + diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/DatabasesManager.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/DatabasesManager.java index 963e19d..b6d0daa 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/client/DatabasesManager.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/DatabasesManager.java @@ -1,5 +1,9 @@ package org.gcube.portlets.user.databasesmanager.client; +import org.gcube.portlets.user.databasesmanager.client.panels.GxtBorderLayoutPanel; +import org.gcube.portlets.user.databasesmanager.client.resources.Resources; +import org.gcube.portlets.user.databasesmanager.shared.Constants; + import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.event.logical.shared.ResizeEvent; @@ -9,11 +13,6 @@ import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.ServiceDefTarget; import com.google.gwt.user.client.ui.RootPanel; -import org.gcube.portlets.user.databasesmanager.client.panels.GxtBorderLayoutPanel; -import org.gcube.portlets.user.databasesmanager.client.resources.Resources; -import org.gcube.portlets.user.databasesmanager.shared.Constants; -import org.gcube.portlets.widgets.sessionchecker.client.CheckSession; - /** * @author "Loredana Liccardo loredana.liccardo@isti.cnr.it" * @@ -33,7 +32,7 @@ public class DatabasesManager implements EntryPoint { public void onModuleLoad() { - CheckSession.getInstance().startPolling(); + //CheckSession.getInstance().startPolling(); HandlerManager eventBus = new HandlerManager(this); diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/utils/UIDGenerator.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/utils/UIDGenerator.java index 238cc12..7e1a04f 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/client/utils/UIDGenerator.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/utils/UIDGenerator.java @@ -8,8 +8,9 @@ public class UIDGenerator { * Generate a random uuid of the specified length. Example: uuid(15) returns * "VcydxgltxrVZSTV" * - * @param len - * the desired number of characters + * + * @param len the desired number of characters + * @return string len */ public static String get(int len) { return get(len, CHARS.length); @@ -17,17 +18,18 @@ public class UIDGenerator { /** * Generate a random uuid of the specified length, and radix. Examples: - *
    - *
  • uuid(8, 2) returns "01001010" (8 character ID, base=2) - *
  • uuid(8, 10) returns "47473046" (8 character ID, base=10) - *
  • uuid(8, 16) returns "098F4D35" (8 character ID, base=16) - *
+ * + * uuid(8, 2) returns "01001010" (8 character ID, base=2) + * uuid(8, 10) returns "47473046" (8 character ID, base=10) + * uuid(8, 16) returns "098F4D35" (8 character ID, base=16) + * * * @param len * the desired number of characters * @param radix * the number of allowable values for each character (must be <= * 62) + * @return random uuid */ public static String get(int len, int radix) { if (radix > CHARS.length) { @@ -44,6 +46,8 @@ public class UIDGenerator { /** * Generate a RFC4122, version 4 ID. Example: * "92329D39-6F5C-4520-ABFC-AAB64544E172" + * + * @return id */ public static String get() { char[] uuid = new char[36]; diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/portlet/DatabasesManager.java b/src/main/java/org/gcube/portlets/user/databasesmanager/portlet/DatabasesManager.java index 94fda40..a604627 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/portlet/DatabasesManager.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/portlet/DatabasesManager.java @@ -7,10 +7,16 @@ import javax.portlet.PortletException; import javax.portlet.PortletRequestDispatcher; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; -import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; + +import org.gcube.common.portal.PortalContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class DatabasesManager extends GenericPortlet { + private final Logger logger= LoggerFactory.getLogger(DatabasesManager.class); + + /** * JSP folder name */ @@ -29,7 +35,10 @@ public class DatabasesManager extends GenericPortlet { */ public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { - ScopeHelper.setContext(request); + logger.trace("DatabasesManager loading from JSP: "+VIEW_JSP); + logger.trace("Setting user in session using PortalContext"); + PortalContext.setUserInSession(request); + PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(VIEW_JSP); rd.include(request,response); } diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/server/GWTdbManagerServiceImpl.java b/src/main/java/org/gcube/portlets/user/databasesmanager/server/GWTdbManagerServiceImpl.java index 877cbc5..6c3bb68 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/server/GWTdbManagerServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/server/GWTdbManagerServiceImpl.java @@ -5,11 +5,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStream; import java.io.OutputStreamWriter; -import java.net.URL; -import java.net.URLConnection; -import java.net.URLStreamHandler; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; @@ -19,6 +15,8 @@ import java.util.Set; import java.util.concurrent.ConcurrentLinkedQueue; import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; @@ -29,8 +27,6 @@ import net.sf.ehcache.store.MemoryStoreEvictionPolicy; import org.apache.log4j.Logger; import org.apache.regexp.RE; -import org.gcube.application.framework.core.session.ASLSession; -import org.gcube.contentmanager.storageclient.model.protocol.smp.SMPURLConnection; import org.gcube.data.analysis.dataminermanagercl.server.DataMinerService; import org.gcube.data.analysis.dataminermanagercl.server.dmservice.SClient; import org.gcube.data.analysis.dataminermanagercl.shared.data.OutputData; @@ -51,6 +47,7 @@ import org.gcube.portlets.user.databasesmanager.client.datamodel.Row; import org.gcube.portlets.user.databasesmanager.client.datamodel.SamplingResultWithFileFromServlet; import org.gcube.portlets.user.databasesmanager.client.datamodel.SubmitQueryResultWithFileFromServlet; import org.gcube.portlets.user.databasesmanager.server.util.DataExchangedThroughQueue; +import org.gcube.portlets.user.databasesmanager.server.util.ServiceCredentials; import org.gcube.portlets.user.databasesmanager.server.util.SessionUtil; import org.gcube.portlets.user.databasesmanager.shared.AlgorithmsName; import org.gcube.portlets.user.databasesmanager.shared.Constants; @@ -265,7 +262,9 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements } } - private void initVariables(ASLSession session) { + private void initVariables(HttpServletRequest httpRequest, + ServiceCredentials serviceCredentials) { + HttpSession session = httpRequest.getSession(); // Hashmap that contains computationId with a uid key HashMap computationIDMap = new HashMap(); @@ -310,16 +309,15 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements public List getResource() throws Exception { try { - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); - // get scope - String scope = session.getScope(); + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + ServiceCredentials serviceCredentials = SessionUtil + .getServiceCredentials(httpRequest); // check if the thread is already started - Boolean value = getThreadStarted(scope); + Boolean value = getThreadStarted(serviceCredentials.getScope()); if ((value == null) || (value.booleanValue() == false)) { DataExchangedThroughQueue dataqueue = new DataExchangedThroughQueue( - scope); + serviceCredentials.getScope()); queue.offer(dataqueue); Thread t = new Thread(dataLoader); @@ -329,8 +327,8 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements } // initialize variables with application startup - initVariables(session); - return recoverResources(scope); + initVariables(httpRequest, serviceCredentials); + return recoverResources(serviceCredentials.getScope()); } catch (Exception e) { logger.error("dbmanager-> ", e); throw e; @@ -344,10 +342,12 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements try { - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + ServiceCredentials serviceCredentials = SessionUtil + .getServiceCredentials(httpRequest); + // get scope - String scope = session.getScope(); + String scope = serviceCredentials.getScope(); return recoverDatabases(scope, resourceName); } catch (Exception e) { logger.error("dbmanager-> ", e); @@ -362,10 +362,12 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements try { - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + ServiceCredentials serviceCredentials = SessionUtil + .getServiceCredentials(httpRequest); + // get scope - String scope = session.getScope(); + String scope = serviceCredentials.getScope(); return recoverSchema(scope, dataInput); } catch (Exception e) { logger.error("dbmanager-> ", e); @@ -379,10 +381,12 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements try { - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + ServiceCredentials serviceCredentials = SessionUtil + .getServiceCredentials(httpRequest); + // get scope - String scope = session.getScope(); + String scope = serviceCredentials.getScope(); return recoverTables(scope, dataInput, elementType); } catch (Exception e) { logger.error("dbmanager-> ", e); @@ -484,10 +488,12 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements try { logger.info("Submit Query Request received. Starting to manage the request."); - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + ServiceCredentials serviceCredentials = SessionUtil + .getServiceCredentials(httpRequest); + // get scope - String scope = session.getScope(); + String scope = serviceCredentials.getScope(); logger.info("dbmanager-> Dialect used for smart correction: " + language); @@ -729,10 +735,12 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements try { logger.info("dbmanager-> Sampling on table Request received. Starting to manage the request."); - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + ServiceCredentials serviceCredentials = SessionUtil + .getServiceCredentials(httpRequest); + // get scope - String scope = session.getScope(); + String scope = serviceCredentials.getScope(); // data input List inputParameters = new ArrayList(); @@ -881,10 +889,12 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements try { logger.info("dbmanager-> Smart Sampling on table Request received. Starting to manage the request."); - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + ServiceCredentials serviceCredentials = SessionUtil + .getServiceCredentials(httpRequest); + // get scope - String scope = session.getScope(); + String scope = serviceCredentials.getScope(); // data input List inputParameters = new ArrayList(); @@ -1030,10 +1040,12 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements try { logger.info("dbmanager-> Random Sampling on table Request received. Starting to manage the request."); - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + ServiceCredentials serviceCredentials = SessionUtil + .getServiceCredentials(httpRequest); + // get scope - String scope = session.getScope(); + String scope = serviceCredentials.getScope(); // data input List inputParameters = new ArrayList(); @@ -1144,10 +1156,12 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements try { logger.info("dbmanager-> Table Details Recovery Request received. Starting to manage the request."); - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + ServiceCredentials serviceCredentials = SessionUtil + .getServiceCredentials(httpRequest); + // get scope - String scope = session.getScope(); + String scope = serviceCredentials.getScope(); // data input List inputParameters = new ArrayList(); @@ -1419,9 +1433,11 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements throws Exception { if (jobID != null) { // add the job status - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); - HashMap JobStatusMap = (HashMap) session + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + HttpSession session=httpRequest.getSession(); + + @SuppressWarnings("unchecked") + HashMap JobStatusMap = (HashMap) session .getAttribute("JobStatusList"); JobStatusMap.put(jobID, status); session.setAttribute("JobStatusList", JobStatusMap); @@ -1430,8 +1446,10 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements // remove job with the related status private synchronized void removeJobStatus(String jobID) throws Exception { - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + HttpSession session=httpRequest.getSession(); + + @SuppressWarnings("unchecked") HashMap JobStatusMap = (HashMap) session .getAttribute("JobStatusList"); String status = JobStatusMap.get(jobID); @@ -1443,8 +1461,10 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements // get job status private synchronized String getJobStatus(String jobID) throws Exception { - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + HttpSession session=httpRequest.getSession(); + + @SuppressWarnings("unchecked") HashMap JobStatusMap = (HashMap) session .getAttribute("JobStatusList"); String status = JobStatusMap.get(jobID); @@ -1456,10 +1476,14 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements ComputationId computationId) throws Exception { if (jobID != null) { // add the computation in the map - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + HttpSession session=httpRequest.getSession(); + + + @SuppressWarnings("unchecked") HashMap computationIDMap = (HashMap) session .getAttribute("ComputationIDList"); + computationIDMap.put(jobID, computationId); session.setAttribute("ComputationIDList", computationIDMap); } @@ -1470,8 +1494,11 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements if (jobID != null) { // System.out.println("remove jobID " + job); // add the computation in the map - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + HttpSession session=httpRequest.getSession(); + + + @SuppressWarnings("unchecked") HashMap computationIDMap = (HashMap) session .getAttribute("ComputationIDList"); ComputationId computationId = computationIDMap.get(jobID); @@ -1487,8 +1514,10 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements private synchronized boolean checkJob(String jobID) throws Exception { boolean isContained = false; if (jobID != null) { - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + HttpSession session=httpRequest.getSession(); + + @SuppressWarnings("unchecked") HashMap computationIDMap = (HashMap) session .getAttribute("ComputationIDList"); if (computationIDMap.containsKey(jobID)) { @@ -1503,9 +1532,10 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements private synchronized void updateListSubmitQueryUIDCachedData(String UID, Boolean value) throws Exception { - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); - + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + HttpSession session=httpRequest.getSession(); + + @SuppressWarnings("unchecked") HashMap listSubmitQueryUIDCachedData = (HashMap) session .getAttribute("listSubmitQueryUIDCachedData"); listSubmitQueryUIDCachedData.put(UID, value); @@ -1516,9 +1546,10 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements private synchronized Boolean checkSubmitQueryUIDCachedData(String UID) throws Exception { - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); - + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + HttpSession session=httpRequest.getSession(); + + @SuppressWarnings("unchecked") HashMap listSubmitQueryUIDCachedData = (HashMap) session .getAttribute("listSubmitQueryUIDCachedData"); return listSubmitQueryUIDCachedData.get(UID); @@ -1526,9 +1557,10 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements private synchronized void removeSubmitQueryUIDCachedData(String UID) throws Exception { - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); - + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + HttpSession session=httpRequest.getSession(); + + @SuppressWarnings("unchecked") HashMap listSubmitQueryUIDCachedData = (HashMap) session .getAttribute("listSubmitQueryUIDCachedData"); @@ -1541,9 +1573,10 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements private synchronized void removeKeySubmitQueryResult(String UID) throws Exception { - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); - + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + HttpSession session=httpRequest.getSession(); + + @SuppressWarnings("unchecked") HashMap listKeySubmitQueryResult = (HashMap) session .getAttribute("listKeySubmitQueryResult"); @@ -1556,9 +1589,10 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements private synchronized void updateListKeySubmitQueryResult(String UID, String value) throws Exception { - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); - + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + HttpSession session=httpRequest.getSession(); + + @SuppressWarnings("unchecked") HashMap listKeySubmitQueryResult = (HashMap) session .getAttribute("listKeySubmitQueryResult"); listKeySubmitQueryResult.put(UID, value); @@ -1569,9 +1603,10 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements private synchronized String getKeySubmitQueryResult(String UID) throws Exception { - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); - + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + HttpSession session=httpRequest.getSession(); + + @SuppressWarnings("unchecked") HashMap listKeySubmitQueryResult = (HashMap) session .getAttribute("listKeySubmitQueryResult"); return listKeySubmitQueryResult.get(UID); @@ -1579,9 +1614,10 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements private synchronized List getSubmitQueryResult(String UID) throws Exception { - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); - + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + HttpSession session=httpRequest.getSession(); + + @SuppressWarnings("unchecked") HashMap> listSubmitQueryResult = (HashMap>) session .getAttribute("listSubmitQueryResult"); return listSubmitQueryResult.get(UID); @@ -1589,9 +1625,10 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements private synchronized void updateListSubmitQueryResult(String UID, List value) throws Exception { - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); - + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + HttpSession session=httpRequest.getSession(); + + @SuppressWarnings("unchecked") HashMap> listSubmitQueryResult = (HashMap>) session .getAttribute("listSubmitQueryResult"); listSubmitQueryResult.put(UID, value); @@ -1601,9 +1638,10 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements private synchronized void removeSubmitQueryResult(String UID) throws Exception { - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); - + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + HttpSession session=httpRequest.getSession(); + + @SuppressWarnings("unchecked") HashMap> listSubmitQueryResult = (HashMap>) session .getAttribute("listSubmitQueryResult"); @@ -1764,16 +1802,20 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements } + /* private InputStream getStorageClientInputStream(String url) throws Exception { - URL u = new URL(null, url, new URLStreamHandler() { - @Override - protected URLConnection openConnection(URL u) throws IOException { - return new SMPURLConnection(u); - } - }); + //URL u = new URL(null, url, new URLStreamHandler() { + // @Override + // protected URLConnection openConnection(URL u) throws IOException { + // return new SMPURLConnection(u); + // } + //}); + + URL u=new URL(url); + u.openConnection().getInputStream(); return u.openConnection().getInputStream(); - } + }*/ /* * private StatisticalManagerFactory getFactory(String scope) { // @@ -1799,10 +1841,14 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements try { logger.info("dbmanager-> Remove Computation Request received. Starting to manage the request."); - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); - // get scope - String scope = session.getScope(); + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + @SuppressWarnings("unused") + ServiceCredentials serviceCredentials = SessionUtil + .getServiceCredentials(httpRequest); + + //HttpSession session=httpRequest.getSession(); + // get scope + //String scope = serviceCredentials.getScope(); Boolean isComputationRemoved = false; // verify if this uid submitQuery request uses data in cache @@ -1878,9 +1924,12 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements @Override public void refreshDataOnServer(String submitQueryUID) throws Exception { - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); - + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + @SuppressWarnings("unused") + ServiceCredentials serviceCredentials = SessionUtil + .getServiceCredentials(httpRequest); + + if ((submitQueryUID != null) && (!submitQueryUID.equals(""))) { removeKeySubmitQueryResult(submitQueryUID); removeSubmitQueryResult(submitQueryUID); @@ -2154,10 +2203,13 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements try { - ASLSession session = SessionUtil.getASLSession(this - .getThreadLocalRequest().getSession()); + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + ServiceCredentials serviceCredentials = SessionUtil + .getServiceCredentials(httpRequest); + + // get scope - String scope = session.getScope(); + String scope = serviceCredentials.getScope(); // call the method related to the element selected String resourceName = ""; @@ -2672,7 +2724,8 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements // get data from cache // check if data exist considering as key the input parameters // String key = inputParameters.get(0).getDefaultValue(); - String key = scope + Constants.RESOURCESLIST; + String key = scope + + Constants.RESOURCESLIST; net.sf.ehcache.Element dataFromCache = getDataFromCache(key); Object value = null; @@ -2698,7 +2751,8 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements ComputationOutput outputData = new ComputationOutput(); // computationId ComputationId computationId = startComputation(algorithmId, - inputParameters, outputData, scope, null); + inputParameters, outputData, + scope, null); // print check // retrieve data diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/server/util/ServiceCredentials.java b/src/main/java/org/gcube/portlets/user/databasesmanager/server/util/ServiceCredentials.java new file mode 100644 index 0000000..7bc2515 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/server/util/ServiceCredentials.java @@ -0,0 +1,141 @@ +package org.gcube.portlets.user.databasesmanager.server.util; + +import java.io.Serializable; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class ServiceCredentials implements Serializable { + + private static final long serialVersionUID = 3560918948310315680L; + private String userName; + private String fullName; + private String name; + private String lastName; + private String email; + private String scope; + private String groupId; + private String groupName; + private String userAvatarURL; + private String token; + + public ServiceCredentials() { + super(); + } + + public ServiceCredentials(String userName, String scope, String token) { + super(); + this.userName = userName; + this.scope = scope; + this.token = token; + } + + public ServiceCredentials(String userName, String fullName, String name, + String lastName, String email, String scope, String groupId, + String groupName, String userAvatarURL, String token) { + super(); + this.userName = userName; + this.fullName = fullName; + this.name = name; + this.lastName = lastName; + this.email = email; + this.scope = scope; + this.groupId = groupId; + this.groupName = groupName; + this.userAvatarURL = userAvatarURL; + this.token = token; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getScope() { + return scope; + } + + public void setScope(String scope) { + this.scope = scope; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getGroupName() { + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + public String getUserAvatarURL() { + return userAvatarURL; + } + + public void setUserAvatarURL(String userAvatarURL) { + this.userAvatarURL = userAvatarURL; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + @Override + public String toString() { + return "ServiceCredentials [userName=" + userName + ", fullName=" + + fullName + ", name=" + name + ", lastName=" + lastName + + ", email=" + email + ", scope=" + scope + ", groupId=" + + groupId + ", groupName=" + groupName + ", userAvatarURL=" + + userAvatarURL + ", token=" + token + "]"; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/server/util/SessionUtil.java b/src/main/java/org/gcube/portlets/user/databasesmanager/server/util/SessionUtil.java index d8f43ba..64cdba4 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/server/util/SessionUtil.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/server/util/SessionUtil.java @@ -1,72 +1,178 @@ package org.gcube.portlets.user.databasesmanager.server.util; -import java.util.HashMap; - -import javax.servlet.http.HttpSession; +import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; -import org.gcube.application.framework.core.session.ASLSession; -import org.gcube.application.framework.core.session.SessionManager; -import org.gcube.data.analysis.dataminermanagercl.server.DataMinerService; -import org.gcube.data.analysis.dataminermanagercl.server.dmservice.SClient; -import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; +import org.gcube.common.portal.PortalContext; +import org.gcube.common.scope.api.ScopeProvider; import org.gcube.portlets.user.databasesmanager.shared.Constants; -import org.gcube.portlets.user.databasesmanager.shared.SessionExpiredException; +import org.gcube.portlets.user.databasesmanager.shared.exception.ServiceException; +import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager; +import org.gcube.vomanagement.usermanagement.model.GCubeGroup; +import org.gcube.vomanagement.usermanagement.model.GCubeUser; public class SessionUtil { - private static Logger logger = Logger.getLogger(SessionUtil.class); - //public static final String TEST_USER = "test.user"; - //public static final String USER = "database.manager"; - + private static final Logger logger = Logger.getLogger(SessionUtil.class); - public static ASLSession getASLSession(HttpSession httpSession) - throws Exception { - String username = (String) httpSession - .getAttribute(ScopeHelper.USERNAME_ATTRIBUTE); - ASLSession aslSession; - if (username == null) { - if (Constants.DEBUG_MODE) { - logger.info("no user found in session, use test user"); - - // Remove comment for Test - username = Constants.DEFAULT_USER; - String scope = Constants.DEFAULT_SCOPE; - - httpSession.setAttribute(ScopeHelper.USERNAME_ATTRIBUTE, - username); - aslSession = SessionManager.getInstance().getASLSession( - httpSession.getId(), username); - aslSession.setScope(scope); - } else { - logger.info("No user found in session"); - throw new SessionExpiredException(); - - } - } else { - aslSession = SessionManager.getInstance().getASLSession( - httpSession.getId(), username); - - } - - logger.info("SessionUtil: aslSession " + aslSession.getUsername() + " " - + aslSession.getScope()); - - return aslSession; + /** + * + * @param httpServletRequest + * @return + * @throws TDGWTServiceException + */ + public static ServiceCredentials getServiceCredentials( + HttpServletRequest httpServletRequest) throws org.gcube.portlets.user.databasesmanager.shared.exception.ServiceException { + return getServiceCredentials(httpServletRequest, null); } - public static String getToken(ASLSession aslSession) throws Exception { - String token = null; - if (Constants.DEBUG_MODE) { - token = Constants.DEFAULT_TOKEN; - } else { - token = aslSession.getSecurityToken(); - } - logger.info("received token: " + token); - return token; + /** + * + * @param httpServletRequest + * @param scopeGroupId + * @return + * @throws TDGWTServiceException + */ + public static ServiceCredentials getServiceCredentials( + HttpServletRequest httpServletRequest, String scopeGroupId) + throws ServiceException { - } + ServiceCredentials sCredentials = null; + String userName = null; + String scope = null; + String token = null; + String groupId = null; + String groupName = null; + + if (Constants.DEBUG_MODE) { + logger.debug("No credential found in session, use test user!"); + /* + * InfoLocale infoLocale = getInfoLocale(httpServletRequest, null); + * Locale locale = new Locale(infoLocale.getLanguage()); + * + * ResourceBundle messages = ResourceBundle.getBundle( + * StatAlgoImporterServiceMessagesConstants.TDGWTServiceMessages, + * locale); + */ + userName = Constants.DEFAULT_USER; + scope = Constants.DEFAULT_SCOPE; + token = Constants.DEFAULT_TOKEN; + + logger.debug("Set SecurityToken: " + token); + SecurityTokenProvider.instance.set(token); + logger.debug("Set ScopeProvider: " + scope); + ScopeProvider.instance.set(scope); + + sCredentials = new ServiceCredentials(userName, scope, token); + + } else { + logger.debug("Retrieving credential in session!"); + PortalContext pContext = PortalContext.getConfiguration(); + boolean hasScopeGroupId = false; + + if (scopeGroupId != null && !scopeGroupId.isEmpty()) { + hasScopeGroupId = true; + + } else { + hasScopeGroupId = false; + } + + if (hasScopeGroupId) { + scope = pContext.getCurrentScope(scopeGroupId); + } else { + scope = pContext.getCurrentScope(httpServletRequest); + } + + if (scope == null || scope.isEmpty()) { + String error = "Error retrieving scope: " + scope; + logger.error(error); + throw new ServiceException(error); + } + + GCubeUser gCubeUser = pContext.getCurrentUser(httpServletRequest); + + if (gCubeUser == null) { + String error = "Error retrieving gCubeUser in scope " + scope + + ": " + gCubeUser; + logger.error(error); + throw new ServiceException(error); + } + + userName = gCubeUser.getUsername(); + + if (userName == null || userName.isEmpty()) { + String error = "Error retrieving username in scope " + scope + + ": " + userName; + logger.error(error); + throw new ServiceException(error); + } + + token = pContext.getCurrentUserToken(scope, userName); + + if (token == null || token.isEmpty()) { + String error = "Error retrieving token for " + userName + + " in " + scope + ": " + token; + logger.error(error); + throw new ServiceException(error); + } + + String name = gCubeUser.getFirstName(); + String lastName = gCubeUser.getLastName(); + String fullName = gCubeUser.getFullname(); + + String userAvatarURL = gCubeUser.getUserAvatarURL(); + + String email = gCubeUser.getEmail(); + + if (hasScopeGroupId) { + logger.debug("Set SecurityToken: " + token); + SecurityTokenProvider.instance.set(token); + logger.debug("Set ScopeProvider: " + scope); + ScopeProvider.instance.set(scope); + + groupId = scopeGroupId; + + long gId; + + try { + gId = Long.parseLong(scopeGroupId); + } catch (Throwable e) { + String error = "Error retrieving groupId: " + scopeGroupId; + logger.error(error, e); + throw new ServiceException(error); + } + + GCubeGroup group; + try { + group = new LiferayGroupManager().getGroup(gId); + } catch (Throwable e) { + String error = "Error retrieving group: " + groupName; + logger.error(error); + throw new ServiceException(error); + } + + groupName = group.getGroupName(); + + } else { + + groupId = String.valueOf(pContext + .getCurrentGroupId(httpServletRequest)); + + groupName = pContext.getCurrentGroupName(httpServletRequest); + + } + + sCredentials = new ServiceCredentials(userName, fullName, name, + lastName, email, scope, groupId, groupName, userAvatarURL, + token); + } + + logger.debug("ServiceCredentials: " + sCredentials); + + return sCredentials; + } } diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/shared/AlgorithmsName.java b/src/main/java/org/gcube/portlets/user/databasesmanager/shared/AlgorithmsName.java index f49b822..e6cf415 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/shared/AlgorithmsName.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/shared/AlgorithmsName.java @@ -44,8 +44,8 @@ public enum AlgorithmsName { /** * - * @param fullPackageName - * @return + * @param fullPackageName full package name + * @return AlgorithmsName */ public static AlgorithmsName getFromFullPackageName(String fullPackageName) { if (fullPackageName == null || fullPackageName.isEmpty()) diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/shared/exception/ServiceException.java b/src/main/java/org/gcube/portlets/user/databasesmanager/shared/exception/ServiceException.java new file mode 100644 index 0000000..501b8e9 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/shared/exception/ServiceException.java @@ -0,0 +1,39 @@ +/** + * + */ +package org.gcube.portlets.user.databasesmanager.shared.exception; + +/** + * + * @author "Giancarlo Panichi" + * g.panichi@isti.cnr.it + * + */ +public class ServiceException extends Exception { + + + private static final long serialVersionUID = -2255657546267656458L; + + + /** + * + */ + public ServiceException() { + super(); + } + + /** + * + * @param message error message + */ + public ServiceException(String message) { + super(message); + } + + + public ServiceException(String message,Throwable t) { + super(message,t); + } + + +} diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index b4890fc..51cd221 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -21,11 +21,6 @@ - - checkServlet - org.gcube.portlets.widgets.sessionchecker.server.SessionCheckerServiceImpl - - dbmanagerservlet @@ -41,11 +36,6 @@ jUnitHostImpl /databasesmanager/junithost/* - - - checkServlet - /databasesmanager/checksession -