nlphub/src/main/java/org/gcube/data/analysis/nlphub/DiscoverDataMinerService.java

144 lines
4.9 KiB
Java

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