From 688a3183cd46bccf328761208cf0798c31ce9991 Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Wed, 8 Sep 2021 14:01:30 +0200 Subject: [PATCH] Refs #21970: Remove HL from nlphub Updated to StorageHub --- .settings/org.eclipse.wst.common.component | 2 +- ...se.wst.common.project.facet.core.prefs.xml | 7 + ....eclipse.wst.common.project.facet.core.xml | 1 + CHANGELOG.md | 11 +- pom.xml | 13 +- .../nlphub/DiscoverDataMinerService.java | 3 +- .../gcube/data/analysis/nlphub/NLPHub.java | 3 +- .../gcube/data/analysis/nlphub/NLPInit.java | 3 +- .../gcube/data/analysis/nlphub/NLPMapper.java | 9 +- .../data/analysis/nlphub/NLPUploader.java | 13 +- .../nlphub/legacy/NlpHubException.java | 3 + .../analysis/nlphub/session/SessionUtils.java | 61 +++-- .../nlphub/workspace/WorkspaceManager.java | 257 +++++++++--------- 13 files changed, 223 insertions(+), 163 deletions(-) create mode 100644 .settings/org.eclipse.wst.common.project.facet.core.prefs.xml diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 0d54a5c..b2a19e6 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -1,5 +1,5 @@ - + diff --git a/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml b/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml new file mode 100644 index 0000000..cc81385 --- /dev/null +++ b/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml index 6f9aa50..7ba9960 100644 --- a/.settings/org.eclipse.wst.common.project.facet.core.xml +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -4,4 +4,5 @@ + diff --git a/CHANGELOG.md b/CHANGELOG.md index 5374bb1..56de175 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,15 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm # Changelog for "nlphub" +## [v1.1.0] - 2020-09-08 -## [v1-0-1] - 2019-06-18 +### Features + +- Updated to StorageHub [#21970] + + + +## [v1.0.1] - 2019-06-18 ### Features @@ -11,7 +18,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm -## [v1-0-0] - 2019-02-25 +## [v1.0.0] - 2019-02-25 ### Features diff --git a/pom.xml b/pom.xml index 5cb041e..087ee85 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ 4.0.0 org.gcube.data.analysis nlphub - 1.0.1-SNAPSHOT + 1.1.0-SNAPSHOT war @@ -50,7 +50,7 @@ org.gcube.distribution maven-portal-bom - 3.6.0 + 3.6.3 pom import @@ -129,7 +129,13 @@ compile - + + + org.gcube.common + storagehub-client-library + compile + + org.slf4j @@ -142,6 +148,7 @@ slf4j-log4j12 test + junit diff --git a/src/main/java/org/gcube/data/analysis/nlphub/DiscoverDataMinerService.java b/src/main/java/org/gcube/data/analysis/nlphub/DiscoverDataMinerService.java index 7a394b6..09a2826 100644 --- a/src/main/java/org/gcube/data/analysis/nlphub/DiscoverDataMinerService.java +++ b/src/main/java/org/gcube/data/analysis/nlphub/DiscoverDataMinerService.java @@ -50,7 +50,8 @@ public class DiscoverDataMinerService extends HttpServlet { private void doWork(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { logger.debug("Discover DataMinerService"); - String token = SessionUtils.getToken(request); + SessionUtils sessionUtils=new SessionUtils(); + String token = sessionUtils.getToken(request); discoverDataMinerService(request, response, token); diff --git a/src/main/java/org/gcube/data/analysis/nlphub/NLPHub.java b/src/main/java/org/gcube/data/analysis/nlphub/NLPHub.java index 9257901..efe7f7b 100644 --- a/src/main/java/org/gcube/data/analysis/nlphub/NLPHub.java +++ b/src/main/java/org/gcube/data/analysis/nlphub/NLPHub.java @@ -52,7 +52,8 @@ public class NLPHub extends HttpServlet { private void doWork(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { logger.debug("NLPHub"); - String token = SessionUtils.getToken(request); + SessionUtils sessionUtils=new SessionUtils(); + String token = sessionUtils.getToken(request); if (request.getParameter("getInfo") != null) { getAlgorithmInfo(request, response, token); diff --git a/src/main/java/org/gcube/data/analysis/nlphub/NLPInit.java b/src/main/java/org/gcube/data/analysis/nlphub/NLPInit.java index 02dd462..37063e3 100644 --- a/src/main/java/org/gcube/data/analysis/nlphub/NLPInit.java +++ b/src/main/java/org/gcube/data/analysis/nlphub/NLPInit.java @@ -41,7 +41,8 @@ public class NLPInit extends HttpServlet { private void doWork(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { logger.debug("NLPInit"); - String token = SessionUtils.getToken(request); + SessionUtils sessionUtils=new SessionUtils(); + String token = sessionUtils.getToken(request); String res = request.getParameter(Constants.REQUEST); RequestType r=RequestType.getRequestTypeFromString(res); if(r==null){ diff --git a/src/main/java/org/gcube/data/analysis/nlphub/NLPMapper.java b/src/main/java/org/gcube/data/analysis/nlphub/NLPMapper.java index b2180fd..a52c66e 100644 --- a/src/main/java/org/gcube/data/analysis/nlphub/NLPMapper.java +++ b/src/main/java/org/gcube/data/analysis/nlphub/NLPMapper.java @@ -59,7 +59,8 @@ public class NLPMapper extends HttpServlet { private void doWork(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { logger.debug("NLPMapper"); - String token = SessionUtils.getToken(request); + SessionUtils sessionUtils=new SessionUtils(); + String token = sessionUtils.getToken(request); WorkspaceManager ws = new WorkspaceManager(); response.setContentType("application/json"); @@ -154,14 +155,14 @@ public class NLPMapper extends HttpServlet { private String saveResult(String jsonResult, String token, WorkspaceManager ws) throws NlpHubException { long now = System.currentTimeMillis(); String fileName = "result-nlp-" + now + ".json"; - ws.deleteFile(fileName, token); + ws.deleteFile(fileName); byte[] byteContent = jsonResult.getBytes(StandardCharsets.UTF_8); - if (!ws.uploadFile(byteContent, fileName, Constants.DEFAULT_DESCRIPTION, token)) { + if (!ws.uploadFile(byteContent, fileName, Constants.DEFAULT_DESCRIPTION)) { throw new NlpHubException("Error writing file: " + fileName + " on workspace (token: " + token + ")", null); } - String link = ws.getPublicLink(fileName, token); + String link = ws.getPublicLink(fileName); logger.info("Output json [" + fileName + "] created in " + (System.currentTimeMillis() - now) + " millisec."); return link; diff --git a/src/main/java/org/gcube/data/analysis/nlphub/NLPUploader.java b/src/main/java/org/gcube/data/analysis/nlphub/NLPUploader.java index da79d5e..c7318d7 100644 --- a/src/main/java/org/gcube/data/analysis/nlphub/NLPUploader.java +++ b/src/main/java/org/gcube/data/analysis/nlphub/NLPUploader.java @@ -62,7 +62,8 @@ public class NLPUploader extends HttpServlet { private void doWork(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { logger.debug("NLPUploader"); - String token = SessionUtils.getToken(request); + SessionUtils sessionUtils=new SessionUtils(); + String token = sessionUtils.getToken(request); WorkspaceManager ws = new WorkspaceManager(); response.setContentType("application/json;charset=UTF-8"); if (request.getParameter("freetext") == null) @@ -85,12 +86,12 @@ public class NLPUploader extends HttpServlet { String fileName = generateFileName(); PrintWriter writer = response.getWriter(); try { - if (!ws.uploadFile(content, fileName, Constants.DEFAULT_DESCRIPTION, token)) { + if (!ws.uploadFile(content, fileName, Constants.DEFAULT_DESCRIPTION)) { writer.println(new JsonManager().getErrorJsonResponse( "Error uploading file. A file called '" + fileName + "' is already in the workspace?")); return; } - String link = ws.getPublicLink(fileName, token); + String link = ws.getPublicLink(fileName); if (langParameter != null) { String sentence = NlpUtils.getLanguageRecognizerDigest(new String(content)); logger.info(sentence); @@ -143,15 +144,15 @@ public class NLPUploader extends HttpServlet { String stringContent = new String(bufferedContent); stringContent = NlpUtils.replaceDirtyCharacters(stringContent); - ws.deleteFile(fileName, token); + ws.deleteFile(fileName); - if (!ws.uploadFile(stringContent.getBytes(), fileName, Constants.DEFAULT_DESCRIPTION, token)) { + if (!ws.uploadFile(stringContent.getBytes(), fileName, Constants.DEFAULT_DESCRIPTION)) { writer.println(new JsonManager().getErrorJsonResponse( "Error uploading file. A file called '" + fileName + "' is already in the workspace?")); return; } - String link = ws.getPublicLink(fileName, token); + String link = ws.getPublicLink(fileName); String sentence = NlpUtils.getLanguageRecognizerDigest(stringContent); logger.info(sentence); try { diff --git a/src/main/java/org/gcube/data/analysis/nlphub/legacy/NlpHubException.java b/src/main/java/org/gcube/data/analysis/nlphub/legacy/NlpHubException.java index 8c4acfc..4684273 100644 --- a/src/main/java/org/gcube/data/analysis/nlphub/legacy/NlpHubException.java +++ b/src/main/java/org/gcube/data/analysis/nlphub/legacy/NlpHubException.java @@ -4,6 +4,9 @@ public class NlpHubException extends Exception { private static final long serialVersionUID = 1L; + public NlpHubException(String message) { + super(message); + } public NlpHubException(String message, Throwable throwable) { super(message, throwable); } diff --git a/src/main/java/org/gcube/data/analysis/nlphub/session/SessionUtils.java b/src/main/java/org/gcube/data/analysis/nlphub/session/SessionUtils.java index 25d6591..76bbc89 100644 --- a/src/main/java/org/gcube/data/analysis/nlphub/session/SessionUtils.java +++ b/src/main/java/org/gcube/data/analysis/nlphub/session/SessionUtils.java @@ -3,6 +3,12 @@ package org.gcube.data.analysis.nlphub.session; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; +import org.gcube.common.authorization.library.AuthorizationEntry; +import org.gcube.common.authorization.library.provider.AuthorizationProvider; +import org.gcube.common.authorization.library.provider.ClientInfo; +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; +import org.gcube.common.authorization.library.utils.Caller; +import org.gcube.common.scope.api.ScopeProvider; import org.gcube.data.analysis.nlphub.shared.Constants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -10,37 +16,50 @@ import org.slf4j.LoggerFactory; public class SessionUtils { private static final Logger logger = LoggerFactory.getLogger(SessionUtils.class); - public static String getToken(HttpServletRequest request) throws ServletException { + public String getToken(HttpServletRequest request) throws ServletException { String token = request.getParameter(Constants.TOKEN_PARAMETER); logger.debug("Token in request: " + token); if (token == null || token.isEmpty()) { logger.debug("Token is null"); throw new ServletException("Token is null"); } + + setAuth(token); return token; } - /* - private static void checkToken(String token) throws Exception { - if (token == null || token.isEmpty()) { - logger.error("Token is null"); - throw new Exception("Token is null"); - } else { - AuthorizationEntry entry; - - entry = authorizationService().get(token); - ClientInfo clientInfo = entry.getClientInfo(); - if (clientInfo == null) { - logger.error("User not found."); - throw new Exception("Authorization failed!"); - } else { - logger.debug("User: " + clientInfo.getId()); - String context = entry.getContext(); - logger.debug("Context: " + context); - } - + private void setAuth(String token) throws ServletException { + try { + SecurityTokenProvider.instance.set(token); + AuthorizationEntry authorizationEntry = org.gcube.common.authorization.client.Constants + .authorizationService().get(token); + ClientInfo clientInfo = authorizationEntry.getClientInfo(); + logger.debug("User : {} - Type : {}", clientInfo.getId(), clientInfo.getType().name()); + String qualifier = authorizationEntry.getQualifier(); + Caller caller = new Caller(clientInfo, qualifier); + AuthorizationProvider.instance.set(caller); + ScopeProvider.instance.set(authorizationEntry.getContext()); + } catch (Exception e) { + logger.error("Error in set context: " + e.getLocalizedMessage(), e); + throw new ServletException("Error in set context: " + e.getLocalizedMessage(), e); } + } - }*/ + /* + * private static void checkToken(String token) throws Exception { if (token + * == null || token.isEmpty()) { logger.error("Token is null"); throw new + * Exception("Token is null"); } else { AuthorizationEntry entry; + * + * entry = authorizationService().get(token); ClientInfo clientInfo = + * entry.getClientInfo(); if (clientInfo == null) { + * logger.error("User not found."); throw new + * Exception("Authorization failed!"); } else { logger.debug("User: " + + * clientInfo.getId()); String context = entry.getContext(); + * logger.debug("Context: " + context); } + * + * } + * + * } + */ } diff --git a/src/main/java/org/gcube/data/analysis/nlphub/workspace/WorkspaceManager.java b/src/main/java/org/gcube/data/analysis/nlphub/workspace/WorkspaceManager.java index 709c6df..5ff9eec 100644 --- a/src/main/java/org/gcube/data/analysis/nlphub/workspace/WorkspaceManager.java +++ b/src/main/java/org/gcube/data/analysis/nlphub/workspace/WorkspaceManager.java @@ -1,147 +1,158 @@ package org.gcube.data.analysis.nlphub.workspace; -import static org.gcube.common.authorization.client.Constants.authorizationService; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.net.HttpURLConnection; +import java.io.ByteArrayInputStream; +import java.io.InputStream; import java.net.URL; -import java.net.URLEncoder; +import java.util.List; +import org.gcube.common.storagehub.client.dsl.FileContainer; +import org.gcube.common.storagehub.client.dsl.FolderContainer; +import org.gcube.common.storagehub.client.dsl.ItemContainer; +import org.gcube.common.storagehub.client.dsl.ListResolver; +import org.gcube.common.storagehub.client.dsl.OpenResolver; +import org.gcube.common.storagehub.client.dsl.StorageHubClient; +import org.gcube.common.storagehub.model.exceptions.StorageHubException; +import org.gcube.common.storagehub.model.items.Item; import org.gcube.data.analysis.nlphub.legacy.NlpHubException; -import org.gcube.data.analysis.nlphub.shared.Constants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class WorkspaceManager { private static final Logger logger = LoggerFactory.getLogger(WorkspaceManager.class); - public String getPublicLink(String fileName, String token) throws NlpHubException { - try { - String link = ""; - String user = authorizationService().get(token).getClientInfo().getId(); - String wsRoot = "/Home/" + user + "/Workspace/"; - String webapp = "https://workspace-repository.d4science.org/home-library-webapp"; - String uri = webapp + "/rest/GetPublicLink?absPath=" + URLEncoder.encode(wsRoot + fileName, "UTF-8") - + "&shortUrl=false"; - URL url = new URL(uri); + public String getPublicLink(String fileName) throws NlpHubException { - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setRequestProperty(Constants.TOKEN_PARAMETER, token); - connection.setDoInput(true); - connection.setDoOutput(true); - connection.setUseCaches(false); - connection.setRequestMethod("GET"); - - BufferedReader r = new BufferedReader(new InputStreamReader(connection.getInputStream())); - - StringBuffer response = new StringBuffer(); - String inputLine; - while ((inputLine = r.readLine()) != null) { - response.append(inputLine); - } - - String xmlOut = response.toString(); - - String begin = ""; - String end = ""; - int b = xmlOut.indexOf(begin); - int e = xmlOut.indexOf(end); - - if (xmlOut.contains("Exception") || (e < 0) || (b < 0)) { - String message = "Invalid link: " + URLEncoder.encode(xmlOut, "UTF-8"); - logger.error(message); - throw new NlpHubException(message, null); - } - - link = xmlOut.substring(b + begin.length(), e); - return link; - - } catch (Exception e) { - logger.error("Error in WorkspaceManager for getPublicLink: "+e.getLocalizedMessage(), e); - throw new NlpHubException("Error in WorkspaceManager for getPublicLink: "+e.getLocalizedMessage(), e); + if (fileName == null || fileName.isEmpty()) { + String error = "Error in get public link, the filename requested is invalid: Null"; + logger.error(error); + throw new NlpHubException(error); } - } - public void deleteFile(String fileName, String token) throws NlpHubException { + StorageHubClient shc = new StorageHubClient(); + FolderContainer rootContainer = shc.getWSRoot(); + + ListResolver listResolver; try { - String user = authorizationService().get(token).getClientInfo().getId(); - String wsRoot = "/Home/" + user + "/Workspace/"; - String webapp = "https://workspace-repository.d4science.org/home-library-webapp"; - String uri = webapp + "/rest/Delete?absPath=" + URLEncoder.encode(wsRoot + fileName, "UTF-8"); - URL url = new URL(uri); - - // System.out.println(uri); - - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setRequestProperty(Constants.TOKEN_PARAMETER, token); - connection.setDoInput(true); - connection.setDoOutput(true); - connection.setUseCaches(false); - connection.setRequestMethod("GET"); - - BufferedReader r = new BufferedReader(new InputStreamReader(connection.getInputStream())); - - StringBuffer response = new StringBuffer(); - String inputLine; - while ((inputLine = r.readLine()) != null) { - response.append(inputLine); - } - - String xmlOut = response.toString(); - logger.debug("deleteFile: " + xmlOut); - } catch (Exception e) { - logger.error(e.getLocalizedMessage(), e); - throw new NlpHubException(e.getLocalizedMessage(), e); + listResolver = rootContainer.findByName(fileName); + } catch (StorageHubException e) { + String error = "Error retrieving SH Id for file " + fileName + " : " + e.getLocalizedMessage(); + logger.error(error, e); + throw new NlpHubException(error, e); } - } - public boolean uploadFile(byte[] in, String name, String description, String token) throws NlpHubException { - OutputStream output = null; + List items; try { - String user = authorizationService().get(token).getClientInfo().getId(); - String wsRoot = "/Home/" + user + "/Workspace/"; - String webapp = "https://workspace-repository.d4science.org/home-library-webapp"; - String uri = webapp + "/rest/Upload?name=" + URLEncoder.encode(name, "UTF-8") + "&description=" - + URLEncoder.encode(description, "UTF-8") + "&parentPath=" + URLEncoder.encode(wsRoot, "UTF-8"); - URL url = new URL(uri); + items = listResolver.getItems(); + } catch (StorageHubException e) { + String error = "Error retrieving SH Id for file " + fileName + " : " + e.getLocalizedMessage(); + logger.error(error, e); + throw new NlpHubException(error, e); + } - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setRequestProperty(Constants.TOKEN_PARAMETER, token); - connection.setDoInput(true); - connection.setDoOutput(true); - connection.setUseCaches(false); - connection.setRequestProperty(Constants.CONTENT_TYPE, Constants.MIME_TEXT); - connection.setRequestMethod("POST"); - output = connection.getOutputStream(); - output.write(in); - - BufferedReader r = new BufferedReader(new InputStreamReader(connection.getInputStream())); - - StringBuffer response = new StringBuffer(); - String inputLine; - while ((inputLine = r.readLine()) != null) { - response.append(inputLine); - } - - String xmlOut = response.toString(); - if (xmlOut.contains("Exception")) - return false; - return true; - - } catch (Exception e) { - logger.error(e.getLocalizedMessage(), e); - throw new NlpHubException(e.getLocalizedMessage(), e); - } finally { - // output stream must be closed anyway... - if (output != null) + if (items == null || items.isEmpty()) { + String error = "Error file not found in workspace: " + fileName; + logger.error(error); + throw new NlpHubException(error); + } else { + Item item = items.get(0); + logger.debug("Item: " + item); + if (item != null) { + logger.debug("Item Id=" + item.getId()); + URL url; try { - output.close(); - } catch (IOException e) { - logger.error(e.getLocalizedMessage(), e); + url = shc.open(item.getId()).asFile().getPublicLink(); + } catch (StorageHubException e) { + String error = "Error in get public link for file " + fileName + " : " + e.getLocalizedMessage(); + logger.error(error, e); + throw new NlpHubException(error, e); } + logger.debug("getPublicLink: " + url); + return url.toString(); + } else { + String error = "Error file not found in workspace: " + fileName; + logger.error(error); + throw new NlpHubException(error); + } } + + } + + public void deleteFile(String fileName) throws NlpHubException { + if (fileName == null || fileName.isEmpty()) { + String error = "Error in delete file, the filename requested is invalid: Null"; + logger.error(error); + throw new NlpHubException(error); + } + + StorageHubClient shc = new StorageHubClient(); + FolderContainer rootContainer = shc.getWSRoot(); + + ListResolver listResolver; + try { + listResolver = rootContainer.findByName(fileName); + } catch (StorageHubException e) { + String error = "Error retrieving SH Id for file " + fileName + " : " + e.getLocalizedMessage(); + logger.error(error, e); + throw new NlpHubException(error, e); + } + + List items; + try { + items = listResolver.getItems(); + } catch (StorageHubException e) { + String error = "Error retrieving SH Id for file " + fileName + " : " + e.getLocalizedMessage(); + logger.error(error, e); + throw new NlpHubException(error, e); + } + + if (items == null || items.isEmpty()) { + String error = "Error file not found in workspace: " + fileName; + logger.error(error); + throw new NlpHubException(error); + } else { + Item item = items.get(0); + logger.debug("Item: " + item); + if (item != null) { + logger.debug("Item Id=" + item.getId()); + try { + OpenResolver openResolver = shc.open(item.getId()); + ItemContainer itemContainer = openResolver.asItem(); + itemContainer.delete(); + } catch (StorageHubException e) { + String error = "Error in delete operation for file " + fileName + " : " + e.getLocalizedMessage(); + logger.error(error, e); + throw new NlpHubException(error, e); + } + + } else { + String error = "Error file not found in workspace: " + fileName; + logger.error(error); + throw new NlpHubException(error); + } + } + } + + public boolean uploadFile(byte[] in, String name, String description) throws NlpHubException { + if (name == null || name.isEmpty()) { + String error = "Error uploading the file, the filename is invalid: Null"; + logger.error(error); + throw new NlpHubException(error); + } + + StorageHubClient shc = new StorageHubClient(); + FolderContainer rootContainer = shc.getWSRoot(); + InputStream inputStream = new ByteArrayInputStream(in); + + try { + FileContainer fileContainer = rootContainer.uploadFile(inputStream, + name,description); + logger.debug("Item uploaded: " + fileContainer.get().getId()); + } catch (StorageHubException e) { + String error = "Error uploading the file " + name+ " : " + e.getLocalizedMessage(); + logger.error(error, e); + throw new NlpHubException(error, e); + } + return true; + } }