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;
+ }
+}