diff --git a/pom.xml b/pom.xml index b5b40a9..e9e2e5c 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,6 @@ com.googlecode.json-simple json-simple - 1.1 compile @@ -40,53 +39,45 @@ 2.8.2 compile - - - - - - - + + + + + + + org.gcube.common common-authorization - [2.0.0-SNAPSHOT,3.0.0-SNAPSHOT) - compile - + provided + org.gcube.common authorization-client - [2.0.0-SNAPSHOT,3.0.0-SNAPSHOT) - compile - - - org.gcube.contentmanagement - storage-manager-wrapper - [2.1.0-SNAPSHOT,) - compile + provided + org.gcube.resources.discovery discovery-client - compile + provided org.gcube.core common-configuration-scanner - [1.0.0-SNAPSHOT,) - compile + provided org.gcube.resources registry-publisher - [1.2.1-SNAPSHOT,3.0.0-SNAPSHOT) - compile + provided - org.gcube.core - common-scope - compile + org.gcube.core + common-scope + provided + org.apache.tomcat @@ -97,7 +88,6 @@ commons-lang commons-lang - 2.6 compile @@ -113,13 +103,14 @@ slf4j-log4j12 test - + junit junit - 3.8.1 + 4.8.1 test + nlphub diff --git a/src/main/java/org/gcube/data/analysis/nlphub/DiscoverDataMinerService.java b/src/main/java/org/gcube/data/analysis/nlphub/DiscoverDataMinerService.java new file mode 100644 index 0000000..6295ddc --- /dev/null +++ b/src/main/java/org/gcube/data/analysis/nlphub/DiscoverDataMinerService.java @@ -0,0 +1,143 @@ +package org.gcube.data.analysis.nlphub; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.HttpURLConnection; +import java.net.URL; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.stream.FactoryConfigurationError; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamConstants; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; + +import org.gcube.data.analysis.nlphub.session.SessionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Servlet implementation class NLPHub + */ +@WebServlet(asyncSupported = true, name = "DiscoverDataMinerServlet", urlPatterns = { "/discover-dataminer-servlet" }) +public class DiscoverDataMinerService extends HttpServlet { + private static final long serialVersionUID = 1L; + private static final Logger logger = LoggerFactory.getLogger(DiscoverDataMinerService.class); + + /** + * @see HttpServlet#HttpServlet() + */ + public DiscoverDataMinerService() { + super(); + // TODO Auto-generated constructor stub + } + + /** + * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse + * response) + */ + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + doWork(request, response); + } + + /** + * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse + * response) + */ + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + doWork(request, response); + } + + private void doWork(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + logger.debug("Discover DataMinerService"); + String token = SessionUtils.getToken(request); + + discoverDataMinerService(request, response, token); + + } + + private void discoverDataMinerService(HttpServletRequest request, HttpServletResponse response, String token) + throws ServletException, IOException { + + HttpURLConnection connection = null; + String dataMinerServiceUrl = ""; + response.setContentType("text/plain;charset=UTF-8"); + try (PrintWriter writer = response.getWriter()) { + + try { + String urlInformationSystem = "http://registry.d4science.org/icproxy/gcube/service/ServiceEndpoint/DataAnalysis/DataMiner?"; + + logger.debug("Request url: " + urlInformationSystem); + urlInformationSystem += "gcube-token=" + token; + URL url = new URL(urlInformationSystem); + + connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + connection.setDoInput(true); + connection.setDoOutput(false); + connection.setUseCaches(false); + + try (BufferedReader r = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { + dataMinerServiceUrl = readProfileInfo(r); + } + + } catch (Exception e) { + logger.error("Discover DataMiner Service error: " + e.getLocalizedMessage(), e); + } finally { + try { + if (connection != null) + connection.disconnect(); + } catch (Exception e) { + logger.error("Discover DataMiner Service error: " + e.getLocalizedMessage(), e); + } + } + + writer.println(dataMinerServiceUrl); + + + } catch (Throwable e) { + logger.error("Error discovering DataMiner Service Url: " + e.getLocalizedMessage(), e); + } + } + + private String readProfileInfo(BufferedReader r) throws FactoryConfigurationError, XMLStreamException { + String dataMinerServiceUrl = null; + XMLInputFactory xmlInFact = XMLInputFactory.newInstance(); + XMLStreamReader reader = xmlInFact.createXMLStreamReader(r); + while (reader.hasNext()) { + int eventType = reader.next(); + if (eventType == XMLStreamConstants.START_ELEMENT) { + logger.debug("Read Element: " + reader.getLocalName()); + if (reader.getLocalName().compareToIgnoreCase("EndPoint") == 0) { + logger.debug("Attribute count:" + reader.getAttributeCount()); + for (int i = 0; i < reader.getAttributeCount(); i++) { + logger.debug("Attribute Name: " + reader.getAttributeName(i)); + logger.debug("Attribute Value: " + reader.getAttributeValue(i)); + if (reader.getAttributeName(i).toString().compareToIgnoreCase("EntryName") == 0 + && reader.getAttributeValue(i).toString() + .compareToIgnoreCase("dataminer-prototypes.d4science.org") == 0) { + dataMinerServiceUrl = reader.getElementText(); + dataMinerServiceUrl=dataMinerServiceUrl.trim(); + dataMinerServiceUrl = dataMinerServiceUrl.replace("\\n", "").replace("\\r", ""); + logger.debug("url lenght: "+dataMinerServiceUrl.length()); + logger.debug("DataMiner service url retrieved: " + dataMinerServiceUrl); + return dataMinerServiceUrl; + } + + } + + } + } + } + return dataMinerServiceUrl; + } + +} 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 5f96f2a..fc9a0d3 100644 --- a/src/main/java/org/gcube/data/analysis/nlphub/NLPHub.java +++ b/src/main/java/org/gcube/data/analysis/nlphub/NLPHub.java @@ -6,6 +6,7 @@ import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; +import java.util.Arrays; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -32,7 +33,7 @@ import org.xml.sax.InputSource; public class NLPHub extends HttpServlet { private static final long serialVersionUID = 1L; private static final Logger logger = LoggerFactory.getLogger(NLPHub.class); - + /** * @see HttpServlet#HttpServlet() */ @@ -68,22 +69,27 @@ public class NLPHub extends HttpServlet { } else { runAlgorithms(request, response, token); } + logger.debug("NLPHub work done"); } private void getAlgorithmInfo(HttpServletRequest request, HttpServletResponse response, String token) throws ServletException, IOException { try { String dataMiner = request.getParameter("dataminer"); + //dataMiner=java.net.URLDecoder.decode(dataMiner,"UTF-8"); + String algId = request.getParameter("algId"); + logger.debug("NLPHub getAlgorithmInfo: [DataMiner="+dataMiner+", algorithmID="+algId+"]"); HttpURLConnection connection = null; BufferedReader r = null; String algAbsrtact = ""; PrintWriter writer = response.getWriter(); response.setContentType("application/json;charset=UTF-8"); try { - String finalUrl = "https://" + dataMiner + NlpAsyncNerRunner.WPS_DESCRIBE_PROCESS_URL + "&gcube-token=" + String finalUrl = "https://" + dataMiner + NlpAsyncNerRunner.WPS_DESCRIBE_PROCESS_URL+"&lang=en-US&Identifier=" + algId; + logger.debug("Request url: "+finalUrl); + finalUrl+="&gcube-token=" + token; - finalUrl += "&lang=en-US&Identifier=" + algId; URL url = new URL(finalUrl); connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); @@ -106,7 +112,7 @@ public class NLPHub extends HttpServlet { writer.close(); } catch (Exception e) { - logger.error(e.getLocalizedMessage(),e); + logger.error("NLPHub error in GET algorithmInfo: "+e.getLocalizedMessage(),e); writer.println(new JsonManager().getErrorJsonResponse("" + e.getLocalizedMessage())); writer.close(); } finally { @@ -116,12 +122,12 @@ public class NLPHub extends HttpServlet { if (connection != null) connection.disconnect(); } catch (Exception e) { - logger.error(e.getLocalizedMessage()); + logger.error("NLPHub error in GET algorithmInfo: "+e.getLocalizedMessage(),e); } } } catch (Exception e) { - logger.error(e.getLocalizedMessage(),e); + logger.error("NLPHub error in GET algorithmInfo: "+e.getLocalizedMessage(),e); } } @@ -129,19 +135,27 @@ public class NLPHub extends HttpServlet { throws ServletException, IOException { try { String dataMiner = request.getParameter("dataminer"); + //dataMiner=java.net.URLDecoder.decode(dataMiner,"UTF-8"); + String[] algs = request.getParameter("algs").split(","); + String plink=request.getParameter("plink"); + String annotations=request.getParameter("annotations"); + logger.debug("NLPHub getAlgorithmInfo: [DataMiner="+dataMiner+", plink="+plink+ + ", annotations="+annotations+", algorithms="+Arrays.toString(algs)+"]"); + + for (int i = 0; i < algs.length; i++) { algs[i] = algs[i].trim(); } - RunnerCommander commander = new RunnerCommander(dataMiner, algs, request.getParameter("plink"), - request.getParameter("annotations"), token, response); + RunnerCommander commander = new RunnerCommander(dataMiner, algs,plink , + annotations, token, response); commander.setSleepTime(100); commander.setMaxWaitingTime(90 * 1000); commander.startProcess(); } catch (Exception e) { - logger.error(e.getLocalizedMessage(),e); + logger.error("NLPHub runAlgorithms: "+e.getLocalizedMessage(), e); } } diff --git a/src/main/java/org/gcube/data/analysis/nlphub/NLPInit.java b/src/main/java/org/gcube/data/analysis/nlphub/NLPInit.java new file mode 100644 index 0000000..02dd462 --- /dev/null +++ b/src/main/java/org/gcube/data/analysis/nlphub/NLPInit.java @@ -0,0 +1,82 @@ +package org.gcube.data.analysis.nlphub; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.gcube.data.analysis.nlphub.session.SessionUtils; +import org.gcube.data.analysis.nlphub.shared.Constants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Servlet implementation class NLPHub + */ +@WebServlet(asyncSupported = true, name = "NLPInit", urlPatterns = { "/nlpinit-servlet" }) +public class NLPInit extends HttpServlet { + private static final long serialVersionUID = 1L; + private static final Logger logger = LoggerFactory.getLogger(NLPInit.class); + + + public NLPInit() { + super(); + } + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + doWork(request, response); + } + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + doWork(request, response); + } + + private void doWork(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + logger.debug("NLPInit"); + String token = SessionUtils.getToken(request); + String res = request.getParameter(Constants.REQUEST); + RequestType r=RequestType.getRequestTypeFromString(res); + if(r==null){ + throw new ServletException("Invalid request: "+res); + } + switch(r){ + case DataminerService: + dataminerServiceDiscover(request, response, token); + break; + default: + throw new ServletException("Invalid request: "+res); + + + } + } + + private void dataminerServiceDiscover(HttpServletRequest request, HttpServletResponse response,String token) throws ServletException { + + /* + PrintWriter writer = response.getWriter(); + response.setContentType("text/plain;charset=UTF-8"); + response + String result = null; + result = request.getSession().getId(); + + } catch (Exception e) { + logger.error(e.getLocalizedMessage(), e); + + } finally { + writer.println(result); + writer.close(); + }*/ + + + } + + +} 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 7ce4fe2..da79d5e 100644 --- a/src/main/java/org/gcube/data/analysis/nlphub/NLPUploader.java +++ b/src/main/java/org/gcube/data/analysis/nlphub/NLPUploader.java @@ -74,6 +74,11 @@ public class NLPUploader extends HttpServlet { private void handleFreeText(HttpServletRequest request, HttpServletResponse response, String token, WorkspaceManager ws) throws ServletException, IOException { String freeText = request.getParameter("freetext"); + String langParameter=request.getParameter("getlang"); + String dataMiner = request.getParameter("dataminer"); + //dataMiner=java.net.URLDecoder.decode(dataMiner,"UTF-8"); + + freeText = NlpUtils.replaceDirtyCharacters(freeText); byte[] content = freeText.getBytes("UTF-8"); @@ -86,11 +91,11 @@ public class NLPUploader extends HttpServlet { return; } String link = ws.getPublicLink(fileName, token); - if (request.getParameter("getlang") != null) { + if (langParameter != null) { String sentence = NlpUtils.getLanguageRecognizerDigest(new String(content)); logger.info(sentence); try { - NLpLanguageRecognizer.run(request.getParameter("dataminer"), sentence, token, link, response); + NLpLanguageRecognizer.run(dataMiner, sentence, token, link, response); } catch (NlpHubException ex) { writer.println(new JsonManager().getSuccessJsonResponse(Constants.UNAVAILABLE, link)); } @@ -107,6 +112,9 @@ public class NLPUploader extends HttpServlet { int contentLength = request.getContentLength(); Part filePart = request.getPart("mytxtfile"); + String dataMiner = request.getParameter("dataminer"); + //dataMiner=java.net.URLDecoder.decode(dataMiner,"UTF-8"); + String fileName = getFileName(filePart); @@ -147,7 +155,7 @@ public class NLPUploader extends HttpServlet { String sentence = NlpUtils.getLanguageRecognizerDigest(stringContent); logger.info(sentence); try { - NLpLanguageRecognizer.run(request.getParameter("dataminer"), sentence, token, link, response); + NLpLanguageRecognizer.run(dataMiner, sentence, token, link, response); } catch (NlpHubException ex) { writer.println(new JsonManager().getSuccessJsonResponse(Constants.UNAVAILABLE, link)); } diff --git a/src/main/java/org/gcube/data/analysis/nlphub/RequestType.java b/src/main/java/org/gcube/data/analysis/nlphub/RequestType.java new file mode 100644 index 0000000..b56e617 --- /dev/null +++ b/src/main/java/org/gcube/data/analysis/nlphub/RequestType.java @@ -0,0 +1,34 @@ +package org.gcube.data.analysis.nlphub; + + +public enum RequestType { + DataminerService("DataminerService"); + + private final String id; + + private RequestType(final String id) { + this.id = id; + } + + public static RequestType getRequestTypeFromString(String res){ + if(res==null||res.isEmpty()){ + return null; + } + for(RequestType r:RequestType.values()){ + if(r.id.compareToIgnoreCase(res)==0){ + return r; + } + } + return null; + } + + + @Override + public String toString() { + return id; + } + + + + +} diff --git a/src/main/java/org/gcube/data/analysis/nlphub/nlp/NLpLanguageRecognizer.java b/src/main/java/org/gcube/data/analysis/nlphub/nlp/NLpLanguageRecognizer.java index b3178df..635c7d0 100644 --- a/src/main/java/org/gcube/data/analysis/nlphub/nlp/NLpLanguageRecognizer.java +++ b/src/main/java/org/gcube/data/analysis/nlphub/nlp/NLpLanguageRecognizer.java @@ -49,9 +49,9 @@ public class NLpLanguageRecognizer { try { if (dataMiner == null) dataMiner = Constants.DEFAULT_DATAMINER_URL; - else - dataMiner = "http://" + dataMiner; - String urlService = dataMiner + "/wps/WebProcessingService?request=Execute&service=WPS&Version=1.0.0"; + //else + // dataMiner = "http://" + dataMiner; + String urlService = dataMiner + "?request=Execute&service=WPS&Version=1.0.0"; urlService += "&gcube-token=" + token; urlService += "&lang=en-US"; urlService += "&Identifier=" + RECOGNIZER_ID; diff --git a/src/main/java/org/gcube/data/analysis/nlphub/nlp/NlpAsyncNerRunner.java b/src/main/java/org/gcube/data/analysis/nlphub/nlp/NlpAsyncNerRunner.java index c7e378f..c328186 100644 --- a/src/main/java/org/gcube/data/analysis/nlphub/nlp/NlpAsyncNerRunner.java +++ b/src/main/java/org/gcube/data/analysis/nlphub/nlp/NlpAsyncNerRunner.java @@ -12,7 +12,6 @@ import java.util.ArrayList; import javax.xml.parsers.DocumentBuilderFactory; import org.gcube.data.analysis.nlphub.legacy.AsyncHttpRequest; -import org.gcube.data.analysis.nlphub.legacy.NerOutput; import org.gcube.data.analysis.nlphub.shared.Constants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,52 +21,64 @@ import org.w3c.dom.NodeList; import org.xml.sax.InputSource; public class NlpAsyncNerRunner extends AsyncHttpRequest { - private static final Logger logger = LoggerFactory.getLogger(NerOutput.class); - public static final String WPS_EXECUTE_URL = "/wps/WebProcessingService?request=Execute&service=WPS&Version=1.0.0"; - public static final String WPS_DESCRIBE_PROCESS_URL = "/wps/WebProcessingService?request=DescribeProcess&service=WPS&Version=1.0.0"; - private String identifier, token, httpMethod, annotations, publicLink, dataMiner; + private static final Logger logger = LoggerFactory.getLogger(NlpAsyncNerRunner.class); + public static final String WPS_EXECUTE_URL = "?request=Execute&service=WPS&Version=1.0.0"; + public static final String WPS_DESCRIBE_PROCESS_URL = "?request=DescribeProcess&service=WPS&Version=1.0.0"; + public static final String DATAMINER_DEFAULT="http://dataminer-prototypes.d4science.org/wps/WebProcessingService"; + // private String identifier, token, httpMethod, annotations, publicLink, + // dataMiner; + private String identifier; private RunnerCommander commander; public NlpAsyncNerRunner(String dataMiner, String identifier, String token, String publicLink, String annotations, String language, RunnerCommander commander) { super(); - this.identifier = identifier; - this.token = token; - this.httpMethod = "GET"; - this.annotations = annotations; - this.publicLink = publicLink; - - this.commander = commander; + this.commander=commander; + this.identifier=identifier; + String httpMethod = "GET"; + if (dataMiner == null) - this.dataMiner = Constants.DEFAULT_DATAMINER_URL; - else - this.dataMiner = "http://" + dataMiner; + dataMiner = Constants.DEFAULT_DATAMINER_URL; + // else + // this.dataMiner = "http://" + dataMiner; - ArrayList params = buildParameterString(); - String serviceUrl = this.dataMiner + WPS_EXECUTE_URL + "&gcube-token=" + token + "&lang=en-US&Identifier=" - + identifier; - serviceUrl += "&" + setUrl(params); - super.setBaseUrl(serviceUrl); + logger.debug("NlpAsyncNerRunner: [identifier=" + identifier + ", httpMethod=" + httpMethod + ", annotations=" + + annotations + ", publicLink=" + publicLink + ", dataminer=" + dataMiner + "]"); + + ArrayList params = buildParameterString(dataMiner, identifier, publicLink, annotations, token); + StringBuilder serviceUrl = new StringBuilder(); + serviceUrl.append(dataMiner); + serviceUrl.append(WPS_EXECUTE_URL); + serviceUrl.append("&lang=en-US&Identifier="); + serviceUrl.append(identifier); + serviceUrl.append("&"); + serviceUrl.append(setParams(params)); + serviceUrl.append("&gcube-token=" + token); + + logger.debug("NlpAsyncNerRunner: [serviceUrl=" + serviceUrl + ", method=" + httpMethod + "]"); + super.setBaseUrl(serviceUrl.toString()); super.setMethod(httpMethod); } - public NlpAsyncNerRunner(String baseUrl, String method) { + /*public NlpAsyncNerRunner(String baseUrl, String method) { super(baseUrl, method, null); - } + }*/ + /* public String getIdentifier() { return identifier; } + public String getToken() { return token; } public String getHttpMethod() { return httpMethod; - } + }*/ - private String setUrl(ArrayList parameters) { + private String setParams(ArrayList parameters) { String url = "DataInputs="; for (NlpParameter p : parameters) { try { @@ -76,22 +87,33 @@ public class NlpAsyncNerRunner extends AsyncHttpRequest { logger.error(ex.getLocalizedMessage()); } } + logger.debug(""); return url; } - private ArrayList buildParameterString() { + private ArrayList buildParameterString(String dataMiner, String identifier, String publicLink, + String annotations, String token) { ArrayList parameters = new ArrayList<>(); HttpURLConnection connection = null; BufferedReader r = null; try { - String finalUrl = dataMiner + WPS_DESCRIBE_PROCESS_URL + "&gcube-token=" + token; - finalUrl += "&lang=en-US&Identifier=" + identifier; - URL url = new URL(finalUrl); + StringBuilder serviceUrl = new StringBuilder(); + serviceUrl.append(dataMiner); + serviceUrl.append(WPS_DESCRIBE_PROCESS_URL); + serviceUrl.append("&lang=en-US&Identifier="); + serviceUrl.append(identifier); + logger.debug("BuildParameterString request URL: " + serviceUrl); + serviceUrl.append("&gcube-token="); + serviceUrl.append(token); + + URL url = new URL(serviceUrl.toString()); + connection = (HttpURLConnection) url.openConnection(); - connection.setDoInput(true); - connection.setDoOutput(true); - connection.setUseCaches(false); connection.setRequestMethod("GET"); + connection.setDoInput(true); + connection.setDoOutput(false); + connection.setUseCaches(false); + r = new BufferedReader(new InputStreamReader(connection.getInputStream())); Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(r)); doc.getDocumentElement().normalize(); @@ -125,7 +147,7 @@ public class NlpAsyncNerRunner extends AsyncHttpRequest { } } catch (Exception e) { - logger.error(e.getLocalizedMessage(), e); + logger.error("NlpAsyncNerRunner buildParameterString: " + e.getLocalizedMessage(), e); } finally { try { if (r != null) @@ -146,7 +168,7 @@ public class NlpAsyncNerRunner extends AsyncHttpRequest { @Override public void asyncHttpRequestCallback() { elapsedTime = System.currentTimeMillis() - elapsedTime; - logger.info("ID: " + identifier.substring(identifier.lastIndexOf(".") + 1) + " elapsed time: " + elapsedTime); + logger.debug("ID: " + identifier.substring(identifier.lastIndexOf(".") + 1) + " elapsed time: " + elapsedTime); String result = super.getResult(); String theLink = ""; try { diff --git a/src/main/java/org/gcube/data/analysis/nlphub/nlp/RunnerCommander.java b/src/main/java/org/gcube/data/analysis/nlphub/nlp/RunnerCommander.java index 0b80b5e..17dad97 100644 --- a/src/main/java/org/gcube/data/analysis/nlphub/nlp/RunnerCommander.java +++ b/src/main/java/org/gcube/data/analysis/nlphub/nlp/RunnerCommander.java @@ -24,7 +24,7 @@ public class RunnerCommander extends Thread { private long maxWaitingTime = 5l * 60l * 1000l; private boolean complete = false; - public RunnerCommander(String dataMiner, String[] identifiers, String link, String annotationList, String token) { + /*public RunnerCommander(String dataMiner, String[] identifiers, String link, String annotationList, String token) { this.identifiers = identifiers; this.annotationList = annotationList; this.link = link; @@ -33,7 +33,7 @@ public class RunnerCommander extends Thread { this.sleepTime = 500l; this.dataMiner = dataMiner; outResultList = new ArrayList(); - } + }*/ public RunnerCommander(String dataMiner, String[] identifiers, String link, String annotationList, String token, HttpServletResponse response) { 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 a89fb79..25d6591 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 @@ -1,5 +1,6 @@ package org.gcube.data.analysis.nlphub.session; +import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import org.gcube.data.analysis.nlphub.shared.Constants; @@ -8,15 +9,38 @@ import org.slf4j.LoggerFactory; public class SessionUtils { private static final Logger logger = LoggerFactory.getLogger(SessionUtils.class); - - public static String getToken(HttpServletRequest request) { + + public static 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.error("Token in request is null"); + logger.debug("Token in request: " + token); + if (token == null || token.isEmpty()) { + logger.debug("Token is null"); + throw new ServletException("Token is null"); } 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); + } + + } + + }*/ + } diff --git a/src/main/java/org/gcube/data/analysis/nlphub/shared/Constants.java b/src/main/java/org/gcube/data/analysis/nlphub/shared/Constants.java index 55f881c..8017025 100644 --- a/src/main/java/org/gcube/data/analysis/nlphub/shared/Constants.java +++ b/src/main/java/org/gcube/data/analysis/nlphub/shared/Constants.java @@ -7,18 +7,20 @@ public class Constants { public static final String DEFAULT_USER = "giancarlo.panichi"; public static final String DEFAULT_SCOPE = "/gcube/devNext/NextNext"; - public static final String DEFAULT_DATAMINER_URL = "http://dataminer-prototypes.d4science.org"; + public static final String DEFAULT_DATAMINER_URL = "http://dataminer-prototypes.d4science.org/wps/WebProcessingService"; public static final String TOKEN_PARAMETER = "gcube-token"; + public static final String DEFAULT_DESCRIPTION = "NlpHub upload"; - //public static String PUBLIC_TOKEN = "f57441ac-b361-4c2d-992a-40db034f1b8c-843339462"; + public static final String MIME_TEXT = "text/plain"; public static final String CONTENT_TYPE = "Content-Type"; public static final String UNAVAILABLE = "unavailable"; public static final String ERROR_ID = "ERROR"; public static final String INPUT_FILE_PARAMETER = "input"; + public static final String REQUEST = "Request"; 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 ccb8924..709c6df 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 @@ -60,8 +60,8 @@ public class WorkspaceManager { return link; } catch (Exception e) { - logger.error(e.getLocalizedMessage(), e); - throw new NlpHubException(e.getLocalizedMessage(), e); + logger.error("Error in WorkspaceManager for getPublicLink: "+e.getLocalizedMessage(), e); + throw new NlpHubException("Error in WorkspaceManager for getPublicLink: "+e.getLocalizedMessage(), e); } } diff --git a/src/main/resources/logback_xml_test b/src/main/resources/logback_xml_test deleted file mode 100644 index d3931ec..0000000 --- a/src/main/resources/logback_xml_test +++ /dev/null @@ -1,83 +0,0 @@ - - - /home/gcube/tomcat/logs/ghn.log - true - - %date [%thread] %-5level %logger{0}: %msg%n - - - /home/gcube/tomcat/logs/ghn.%d{yyyy-MM-dd}.%i.log - 30 - 10MB - 2GB - - - - - /home/gcube/tomcat/logs/accounting.log - true - - %date [%thread] %-5level %logger{0}: %msg%n - - - /home/gcube/tomcat/logs/accounting.%d{yyyy-MM-dd}.%i.log - 30 - 10MB - 2GB - - - - - /home/gcube/tomcat/logs/access.log - true - - %date [%thread] %-5level %logger{0}: %msg%n - - - /home/gcube/tomcat/logs/access.%d{yyyy-MM-dd}.%i.log - 30 - 10MB - 2GB - - - - - /home/gcube/tomcat/logs/nlphub.log - true - - %date [%thread] %-5level %logger{0}: %msg%n - - - /home/gcube/tomcat/logs/nlphub.%d{yyyy-MM-dd}.%i.log - 30 - 10MB - 2GB - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 2f65c37..b747681 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -1,36 +1,47 @@ - - NLPHub - - index.html - index.htm - index.jsp - default.html - default.htm - default.jsp - - - NLPServlet - org.gcube.data.analysis.nlphub.NLPHub - - - NLPServlet - /nlphub-servlet - - - NLPUploader - org.gcube.data.analysis.nlphub.NLPUploader - - - NLPUploader - /nlphub-uploader-servlet - - - NLPMapper - org.gcube.data.analysis.nlphub.NLPMapper - - - NLPMapper - /nlphub-mapper-servlet - + + NLPHub + + index.html + index.htm + index.jsp + default.html + default.htm + default.jsp + + + NLPServlet + org.gcube.data.analysis.nlphub.NLPHub + + + NLPServlet + /nlphub-servlet + + + NLPUploader + org.gcube.data.analysis.nlphub.NLPUploader + + + NLPUploader + /nlphub-uploader-servlet + + + NLPMapper + org.gcube.data.analysis.nlphub.NLPMapper + + + NLPMapper + /nlphub-mapper-servlet + + + DiscoverDataMinerServlet + org.gcube.data.analysis.nlphub.DiscoverDataMinerService + + + DiscoverDataMinerServlet + /discover-dataminer-servlet + \ No newline at end of file diff --git a/src/main/webapp/index.jsp b/src/main/webapp/index.jsp index 2f9cea9..8f7f2f5 100644 --- a/src/main/webapp/index.jsp +++ b/src/main/webapp/index.jsp @@ -27,7 +27,7 @@ String requestToken=request.getParameter(Constants.TOKEN_PARAMETER); if( requestToken == null||requestToken.isEmpty()) { %> - var gCubeToken = ""; + var gCubeToken = "fea75a5a-d84c-495f-b0ca-09cdd95bacce-843339462"; <% } else { %> var gCubeToken = <%=requestToken%> diff --git a/src/main/webapp/js/main.js b/src/main/webapp/js/main.js index 0cc0fb6..45b3420 100644 --- a/src/main/webapp/js/main.js +++ b/src/main/webapp/js/main.js @@ -27,11 +27,57 @@ $(document).ready(function() { console.log('HREF: '+appLocation); appRoot=contextPath; console.log('appRoot: '+ appRoot ); + evaluateRequest(); +}); + +evaluateRequest = function(){ $(".popup-text").hide(); disableExecuteButton(); showAnnotationsList(); + checkAuth(); +} + +checkAuth = function(){ + if(gCubeToken ===undefined || gCubeToken==null){ + alert("Unexpected error token is null!\n."); + return null; + } + dataMinerClusterInfo(); checkInputLink(); -}); +} + + +dataMinerClusterInfo = function(){ + if(gCubeToken ===undefined || gCubeToken==null){ + alert("Unexpected error token is null!\n."); + return null; + } + + + var discoverDataMinerServiceUrl=appRoot+"/discover-dataminer-servlet?gcube-token="+gCubeToken; + + $.ajax({ + url : discoverDataMinerServiceUrl, + type : "GET", + async : true, + success : function(data) { + var dataminerHost=data; + console.log("Retrieved dataMinerServiceUrl: "+dataminerHost); + dataMiner=dataminerHost; + //alert("DataMiner Host: "+dataminerHost); + return; + }, + error : function(request, error) { + alert("Unexpected error reading from link: '" + discoverDataMinerServiceUrl + + "'\nStatus: " + request.status + "\nError: " + + error + "\n."); + hideProgress(); + initApplication(); + } + }); + +} + checkInputLink = function() { if (inputFile != "") { @@ -45,7 +91,7 @@ checkInputLink = function() { var uploaderUrl = appRoot + "/nlphub-uploader-servlet?getlang=on&freetext=" + encodeURIComponent(freeText) + "&dataminer=" - + encodeURIComponent(dataMiner); + + dataMiner; //encodeURIComponent(dataMiner); if (gCubeToken.length > 0) uploaderUrl += "&gcube-token=" + gCubeToken; @@ -90,8 +136,8 @@ initApplication = function() { contentType : "text/plain; charset=utf-8", success : function(data, stato) { $("#ner-result-container").hide(); - var lineTokens = manageCsvData(data); - getAlgorithms(lineTokens); + var algorithmsEnable = manageCsvData(data); + getAlgorithms(algorithmsEnable); buildLanguageSelection(); buildLanguageList(); buildAnnotations(); @@ -111,7 +157,8 @@ initApplication = function() { disableExecuteButton(); var uploaderUrl = appRoot + "/nlphub-uploader-servlet?dataminer=" - + encodeURIComponent(dataMiner); + //+ encodeURIComponent(dataMiner); + + dataMiner; if (gCubeToken.length > 0) uploaderUrl += "&gcube-token=" + gCubeToken; @@ -272,8 +319,9 @@ setEventListeners = function() { + "/nlphub-uploader-servlet?freetext=" + encodeURIComponent(freeText) + "&dataminer=" - + encodeURIComponent(dataMiner); - + //+ encodeURIComponent(dataMiner); + +dataMiner; + if (gCubeToken.length > 0) uploaderUrl += "&gcube-token=" + gCubeToken; @@ -327,8 +375,11 @@ enableAjaxFileUpload = function() { $(".ajax-file-upload").attr("enabled", "true"); $(".ajax-file-upload").css("background", pageGreen); try { - document.getElementById("ajax-file-upload-id").removeEventListener( + var fUploadElement=document.getElementById("ajax-file-upload-id"); + if(fUploadElement!=null){ + fUploadElement.removeEventListener( "click", listenAjaxFileUpload); + } } catch (err) { console.log(err.message); } @@ -428,8 +479,8 @@ manageCsvData = function(data) { lineTokens.push(tokens); var description = tokens[1].toUpperCase().trim(); - if (description == "CLOUD COMPUTING") - dataMiner = tokens[2]; + /*if (description == "CLOUD COMPUTING") + dataMiner = tokens[2];*/ tokens = []; } @@ -605,7 +656,7 @@ runAlgorithm = function() { algList = algList.substring(0, algList.length - 1); var parameters = "annotations=" + annList; - parameters += "&dataminer=" + encodeURIComponent(dataMiner); + parameters += "&dataminer=" +dataMiner; //+ encodeURIComponent(dataMiner); parameters += "&lang=" + $("#language-select").val(); parameters += "&plink=" + encodeURIComponent(publicLink); parameters += "&algs=" + algList; @@ -821,11 +872,15 @@ getAlgInformation = function(alg) { alert("Invalid algorithm identifier."); return; } - + + console.log("getAlgorithm from dataMiner: "+dataMiner); + var parameters = "getInfo=on"; - parameters += "&dataminer=" + encodeURIComponent(dataMiner); + parameters += "&dataminer=" + dataMiner; //encodeURIComponent(dataMiner); parameters += "&algId=" + algId; + console.log("parameters: "+parameters); + var nlphubUrl = appRoot + "/nlphub-servlet?" + parameters; if (gCubeToken.length > 0) nlphubUrl += "&gcube-token=" + gCubeToken; diff --git a/src/test/java/nlphub/DiscoverDataMinerServiceTest.java b/src/test/java/nlphub/DiscoverDataMinerServiceTest.java new file mode 100644 index 0000000..201caf3 --- /dev/null +++ b/src/test/java/nlphub/DiscoverDataMinerServiceTest.java @@ -0,0 +1,88 @@ +package nlphub; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + +import javax.xml.stream.FactoryConfigurationError; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamConstants; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.gcube.data.analysis.nlphub.shared.Constants; +import org.junit.Assert; +import org.junit.Test; + +public class DiscoverDataMinerServiceTest { + private static final Logger logger = LoggerFactory.getLogger(DiscoverDataMinerServiceTest.class); + + @Test + public void discover() { + if (Constants.TEST_ENABLE) { + + try { + String dataMinerServiceUrl = null; + String urlInformationSystem = "http://registry.d4science.org/icproxy/gcube/service/ServiceEndpoint/DataAnalysis/DataMiner?"; + + logger.debug("Request url: " + urlInformationSystem); + urlInformationSystem += "gcube-token=" + "f57441ac-b361-4c2d-992a-40db034f1b8c-843339462"; + URL url = new URL(urlInformationSystem); + + HttpURLConnection connection = null; + + connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + connection.setDoInput(true); + connection.setDoOutput(false); + connection.setUseCaches(false); + + try (BufferedReader r = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { + dataMinerServiceUrl = readProfileInfo(r); + } + + logger.debug("DataMinerServiceUrl: " + dataMinerServiceUrl); + Assert.assertTrue(true); + } catch (Throwable e) { + logger.error("Error retrieving DataMinerServiceUrl: "+e.getLocalizedMessage(),e); + Assert.fail("Error retrieving DataMinerServiceUrl: "+e.getLocalizedMessage()); + } + } else { + Assert.assertTrue(true); + } + + } + + private String readProfileInfo(BufferedReader r) throws FactoryConfigurationError, XMLStreamException { + String dataMinerServiceUrl = null; + XMLInputFactory xmlInFact = XMLInputFactory.newInstance(); + XMLStreamReader reader = xmlInFact.createXMLStreamReader(r); + while (reader.hasNext()) { + int eventType = reader.next(); + if (eventType == XMLStreamConstants.START_ELEMENT) { + logger.debug("Read Element: " + reader.getLocalName()); + if (reader.getLocalName().compareToIgnoreCase("EndPoint") == 0) { + logger.debug("Attribute count:" + reader.getAttributeCount()); + for (int i = 0; i < reader.getAttributeCount(); i++) { + logger.debug("Attribute Name: " + reader.getAttributeName(i)); + logger.debug("Attribute Value: " + reader.getAttributeValue(i)); + if (reader.getAttributeName(i).toString().compareToIgnoreCase("EntryName") == 0 + && reader.getAttributeValue(i).toString() + .compareToIgnoreCase("dataminer-prototypes.d4science.org") == 0) { + dataMinerServiceUrl = reader.getElementText(); + dataMinerServiceUrl = dataMinerServiceUrl.replace("\\n", "").replace("\\r", ""); + logger.debug("DataMiner service url retrieved: " + dataMinerServiceUrl); + return dataMinerServiceUrl; + } + + } + + } + } + } + return dataMinerServiceUrl; + } +}