package org.gcube.nlphub; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.Writer; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; 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.apache.log4j.Logger; import org.gcube.nlphub.nlp.NlpNerRunner; import org.gcube.nlphub.mapper.JsonMapper; import org.gcube.nlphub.legacy.JsonManager; import org.gcube.nlphub.mapper.DefaultMapper; /** * Servlet implementation class NlpMapper */ @WebServlet("/nlphub-mapper-servlet") public class NLPMapper extends HttpServlet { private static final long serialVersionUID = 1L; private Logger logger = Logger.getLogger(NLPMapper.class.getSimpleName()); /** * @see HttpServlet#HttpServlet() */ public NLPMapper() { super(); } /** * @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 { // response.getWriter().append("Served at: // ").append(request.getContextPath()); String documentLink = request.getParameter("plink"); // link al testo // (sul // workspace) String toBeMap = request.getParameter("tobemap"); System.out.println("tobemap: " + toBeMap); String[] tokens; if(toBeMap.indexOf("|") > 0) tokens = toBeMap.split("|"); else { tokens = new String[1]; tokens[0] = toBeMap; } System.out.println("token nr. : " + tokens.length); String annotations = request.getParameter("annotations"); String language = request.getParameter("lang"); PrintWriter writer = response.getWriter(); try { String text = getDocument(documentLink); String out = "{"; out += "\"text\":\"" + text + "\","; out += "\"annotations\":\"" + annotations + "\","; out += "\"language\":\"" + language + "\","; out += "\"result\": ["; for (int i = 0; i < tokens.length; i++) { String token = tokens[i]; String[] t = token.split(":::"); System.out.println(t[0]); System.out.println(t[1]); try { String json = ((JsonMapper) (getMapper(t[0]).newInstance())).getJson(t[0], t[1]); System.out.println("" + json); out += json; if (i < tokens.length - 1) out += ","; } catch (Exception e) { logger.error(e.getLocalizedMessage()); } } out += "]}"; writer.append(out); } catch (Exception x) { logger.error(x.getLocalizedMessage()); writer.println(new JsonManager().getErrorJsonResponse(x.getLocalizedMessage())); } // response.getWriter().write(json); } private Class getMapper(String algId) throws Exception { return Class.forName("org.gcube.nlphub.mapper.DefaultMapper"); } private String getDocument(String plink) throws Exception { HttpURLConnection connection = (HttpURLConnection) new URL(plink).openConnection(); connection.setRequestMethod("GET"); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); char[] readBuffer = new char[1024]; int byteRead = 0; String content = ""; while (byteRead > -1) { byteRead = reader.read(readBuffer, 0, 1024); if (byteRead > 0) { String bString = new String(readBuffer, 0, byteRead); content += bString; } } return content; } }