From 75a08add56c5e0f7090817840d864b9a5d755764 Mon Sep 17 00:00:00 2001 From: Erik Perrone Date: Thu, 22 Feb 2018 16:48:15 +0000 Subject: [PATCH] git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/data-analysis/nlphub@164541 82a268e6-3cf1-43bd-a215-b396298e98cf --- src/main/java/org/gcube/nlphub/NLPHub.java | 3 + src/main/java/org/gcube/nlphub/NLPMapper.java | 39 ++- .../java/org/gcube/nlphub/NLPUploader.java | 280 +++++++++--------- .../nlphub/workspace/WorkspaceManager.java | 148 +++++++++ 4 files changed, 325 insertions(+), 145 deletions(-) create mode 100644 src/main/java/org/gcube/nlphub/workspace/WorkspaceManager.java diff --git a/src/main/java/org/gcube/nlphub/NLPHub.java b/src/main/java/org/gcube/nlphub/NLPHub.java index 782a5a0..1c02638 100644 --- a/src/main/java/org/gcube/nlphub/NLPHub.java +++ b/src/main/java/org/gcube/nlphub/NLPHub.java @@ -23,6 +23,7 @@ import org.gcube.data.analysis.dataminermanagercl.shared.data.output.Resource; import org.gcube.data.analysis.dataminermanagercl.shared.parameters.FileParameter; import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ObjectParameter; import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; +import org.gcube.nlphub.legacy.Constants; import org.gcube.nlphub.legacy.DataminerClient; import org.gcube.nlphub.legacy.JsonManager; //import org.gcube.dataminerclient.DataminerClient; @@ -37,6 +38,7 @@ public class NLPHub extends HttpServlet { private static final long serialVersionUID = 1L; private String service = "http://dataminer-prototypes.d4science.org/wps/"; private String token = "df2cc5f5-63ee-48c1-b2a6-1210030c57b8-843339462"; + private boolean devMode = true; /** * @see HttpServlet#HttpServlet() @@ -65,6 +67,7 @@ public class NLPHub extends HttpServlet { } private void doWork(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + token = Constants.getToken(request, devMode); try { System.out.println("annotations: " + request.getParameter("annotations")); System.out.println("lang: " + request.getParameter("lang")); diff --git a/src/main/java/org/gcube/nlphub/NLPMapper.java b/src/main/java/org/gcube/nlphub/NLPMapper.java index 13cd419..97ae8d3 100644 --- a/src/main/java/org/gcube/nlphub/NLPMapper.java +++ b/src/main/java/org/gcube/nlphub/NLPMapper.java @@ -7,6 +7,7 @@ import java.io.PrintWriter; import java.io.Writer; import java.net.HttpURLConnection; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; @@ -18,8 +19,11 @@ import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.gcube.nlphub.nlp.NlpNerRunner; +import org.gcube.nlphub.workspace.WorkspaceManager; import org.gcube.nlphub.mapper.JsonMapper; +import org.gcube.nlphub.legacy.Constants; import org.gcube.nlphub.legacy.JsonManager; +import org.gcube.nlphub.legacy.NlpHubException; import org.gcube.nlphub.mapper.DefaultMapper; /** @@ -29,7 +33,9 @@ import org.gcube.nlphub.mapper.DefaultMapper; public class NLPMapper extends HttpServlet { private static final long serialVersionUID = 1L; private Logger logger = Logger.getLogger(NLPMapper.class.getSimpleName()); - + private String token = "df2cc5f5-63ee-48c1-b2a6-1210030c57b8-843339462"; + private boolean devMode = true; + /** * @see HttpServlet#HttpServlet() */ @@ -56,11 +62,9 @@ public class NLPMapper extends HttpServlet { } private void doWork(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - // response.getWriter().append("Served at: - // ").append(request.getContextPath()); - String documentLink = request.getParameter("plink"); // link al testo - // (sul - // workspace) + token = Constants.getToken(request, devMode); + + String documentLink = request.getParameter("plink"); // link to text file (workspace) String toBeMap = request.getParameter("tobemap"); System.out.println("tobemap: " + toBeMap); String[] tokens; @@ -99,7 +103,13 @@ public class NLPMapper extends HttpServlet { } out += "]}"; - writer.append(out); + + String resultLink = saveResult(out); + String outResult = "{"; + outResult += "\"link\":\"" + resultLink + "\","; + outResult += "\"output\":" + out; + outResult += "}"; + writer.append(outResult); } catch (Exception x) { logger.error(x.getLocalizedMessage()); @@ -129,4 +139,19 @@ public class NLPMapper extends HttpServlet { } return content; } + + private String saveResult(String jsonResult) throws NlpHubException { + WorkspaceManager ws = new WorkspaceManager(); + long now = System.currentTimeMillis(); + String fileName = "result-nlp-" + now + ".json"; + ws.deleteFile(fileName, token); + + byte[] byteContent = jsonResult.getBytes(StandardCharsets.UTF_8); + if (!ws.uploadFile(byteContent, fileName, Constants.DEFAULT_DESCRIPTION, token)) { + throw new NlpHubException("Error writing file: " + fileName + " on workspace (token: " + token + ")", null); + } + + String link = ws.getPublicLink(fileName, token); + return link; + } } diff --git a/src/main/java/org/gcube/nlphub/NLPUploader.java b/src/main/java/org/gcube/nlphub/NLPUploader.java index 8c8f4fe..dd97f40 100644 --- a/src/main/java/org/gcube/nlphub/NLPUploader.java +++ b/src/main/java/org/gcube/nlphub/NLPUploader.java @@ -24,6 +24,7 @@ import org.apache.log4j.Logger; import org.gcube.nlphub.legacy.Constants; import org.gcube.nlphub.legacy.JsonManager; import org.gcube.nlphub.legacy.NlpHubException; +import org.gcube.nlphub.workspace.WorkspaceManager; /** * Servlet implementation class NLPUploader @@ -36,7 +37,8 @@ public class NLPUploader extends HttpServlet { private Logger logger = Logger.getLogger(NLPUploader.class.getSimpleName()); private boolean devMode = true; private String token = "df2cc5f5-63ee-48c1-b2a6-1210030c57b8-843339462"; - + private WorkspaceManager ws; + /** * @see HttpServlet#HttpServlet() */ @@ -60,10 +62,12 @@ public class NLPUploader extends HttpServlet { */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + token = Constants.getToken(request, devMode); doWork(request, response); } private void doWork(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + ws = new WorkspaceManager(); response.setContentType("application/json;charset=UTF-8"); if (request.getParameter("freetext") == null) handleFileUpload(request, response); @@ -79,12 +83,12 @@ public class NLPUploader extends HttpServlet { String fileName = generateFileName(); PrintWriter writer = response.getWriter(); try { - if (!uploadFile(content, fileName, Constants.DEFAULT_DESCRIPTION, token)) { + if (!ws.uploadFile(content, fileName, Constants.DEFAULT_DESCRIPTION, token)) { writer.println(new JsonManager().getErrorJsonResponse( "Error uploading file. A file called '" + fileName + "' is already in the workspace?")); return; } - String link = getPublicLink(fileName, token); + String link = ws.getPublicLink(fileName, token); writer.println(new JsonManager().getSuccessJsonResponse("" + link)); } catch (Exception x) { x.printStackTrace(); @@ -124,15 +128,15 @@ public class NLPUploader extends HttpServlet { } else bufferedContent = buffer; - deleteFile(fileName, token); + ws.deleteFile(fileName, token); - if (!uploadFile(bufferedContent, fileName, Constants.DEFAULT_DESCRIPTION, token)) { + if (!ws.uploadFile(bufferedContent, fileName, Constants.DEFAULT_DESCRIPTION, token)) { writer.println(new JsonManager().getErrorJsonResponse( "Error uploading file. A file called '" + fileName + "' is already in the workspace?")); return; } - String link = getPublicLink(fileName, token); + String link = ws.getPublicLink(fileName, token); writer.println(new JsonManager().getSuccessJsonResponse("" + link)); } catch (Exception x) { x.printStackTrace(); @@ -153,138 +157,138 @@ public class NLPUploader extends HttpServlet { return null; } - private 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); - - // 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(); - // System.out.println("xmlOut: " + xmlOut); - - 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(e.getLocalizedMessage()); - throw new NlpHubException(e.getLocalizedMessage(), e); - } - } - - private void deleteFile(String fileName, String token) throws NlpHubException { - 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(); - // System.out.println(xmlOut); - } catch (Exception e) { - logger.error(e.getLocalizedMessage()); - throw new NlpHubException(e.getLocalizedMessage(), e); - } - } - - private boolean uploadFile(byte[] in, String name, String description, String token) throws NlpHubException { - OutputStream output = null; - 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); - - // 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.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(); - // System.out.println(xmlOut); - if (xmlOut.contains("Exception")) - return false; - return true; - - } catch (Exception e) { - logger.error(e.getLocalizedMessage()); - throw new NlpHubException(e.getLocalizedMessage(), e); - } finally { - // output stream must be closed anyway... - if (output != null) - try { - output.close(); - } catch (IOException e) { - logger.error(e.getLocalizedMessage()); - } - } - } +// private 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); +// +// // 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(); +// // System.out.println("xmlOut: " + xmlOut); +// +// 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(e.getLocalizedMessage()); +// throw new NlpHubException(e.getLocalizedMessage(), e); +// } +// } +// +// private void deleteFile(String fileName, String token) throws NlpHubException { +// 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(); +// // System.out.println(xmlOut); +// } catch (Exception e) { +// logger.error(e.getLocalizedMessage()); +// throw new NlpHubException(e.getLocalizedMessage(), e); +// } +// } +// +// private boolean uploadFile(byte[] in, String name, String description, String token) throws NlpHubException { +// OutputStream output = null; +// 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); +// +// // 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.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(); +// // System.out.println(xmlOut); +// if (xmlOut.contains("Exception")) +// return false; +// return true; +// +// } catch (Exception e) { +// logger.error(e.getLocalizedMessage()); +// throw new NlpHubException(e.getLocalizedMessage(), e); +// } finally { +// // output stream must be closed anyway... +// if (output != null) +// try { +// output.close(); +// } catch (IOException e) { +// logger.error(e.getLocalizedMessage()); +// } +// } +// } private String generateFileName() { long now = System.currentTimeMillis(); diff --git a/src/main/java/org/gcube/nlphub/workspace/WorkspaceManager.java b/src/main/java/org/gcube/nlphub/workspace/WorkspaceManager.java new file mode 100644 index 0000000..d7a4a06 --- /dev/null +++ b/src/main/java/org/gcube/nlphub/workspace/WorkspaceManager.java @@ -0,0 +1,148 @@ +package org.gcube.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.net.URL; +import java.net.URLEncoder; + +import javax.servlet.http.Part; + +import org.apache.log4j.Logger; +import org.gcube.nlphub.NLPUploader; +import org.gcube.nlphub.legacy.Constants; +import org.gcube.nlphub.legacy.NlpHubException; + +public class WorkspaceManager { + private Logger logger = Logger.getLogger(WorkspaceManager.class.getSimpleName()); + + 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); + + 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(e.getLocalizedMessage()); + throw new NlpHubException(e.getLocalizedMessage(), e); + } + } + + public void deleteFile(String fileName, String token) throws NlpHubException { + 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(); + } catch (Exception e) { + logger.error(e.getLocalizedMessage()); + throw new NlpHubException(e.getLocalizedMessage(), e); + } + } + + public boolean uploadFile(byte[] in, String name, String description, String token) throws NlpHubException { + OutputStream output = null; + 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); + + 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()); + throw new NlpHubException(e.getLocalizedMessage(), e); + } finally { + // output stream must be closed anyway... + if (output != null) + try { + output.close(); + } catch (IOException e) { + logger.error(e.getLocalizedMessage()); + } + } + } +}