diff software/mpdl-services-new/mpiwg-mpdl-cms-web/src/de/mpg/mpiwg/berlin/mpdl/servlets/lt/GetForms.java @ 25:e9fe3186670c default tip

letzter Stand eingecheckt
author Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
date Tue, 21 May 2013 10:19:32 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/software/mpdl-services-new/mpiwg-mpdl-cms-web/src/de/mpg/mpiwg/berlin/mpdl/servlets/lt/GetForms.java	Tue May 21 10:19:32 2013 +0200
@@ -0,0 +1,214 @@
+package de.mpg.mpiwg.berlin.mpdl.servlets.lt;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.Hashtable;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException;
+import de.mpg.mpiwg.berlin.mpdl.lt.dict.db.LexHandler;
+import de.mpg.mpiwg.berlin.mpdl.lt.morph.app.Form;
+import de.mpg.mpiwg.berlin.mpdl.lt.morph.app.Lemma;
+import de.mpg.mpiwg.berlin.mpdl.lt.text.norm.Normalizer;
+
+public class GetForms extends HttpServlet {
+  private static final long serialVersionUID = 1L;
+  private LexHandler lexHandler;
+
+  public GetForms() {
+    super();
+  }
+
+  public void init(ServletConfig config) throws ServletException  {
+    super.init(config);
+    try {
+      lexHandler = LexHandler.getInstance();
+    } catch (ApplicationException e) {
+      throw new ServletException(e);
+    }
+  }
+
+  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+    Date begin = new Date();
+    request.setCharacterEncoding("utf-8");
+    response.setCharacterEncoding("utf-8");
+    String query = request.getParameter("query");
+    String language = request.getParameter("language");
+    String outputFormat = request.getParameter("outputFormat");
+    String outputType = request.getParameter("outputType");
+    String normalization = request.getParameter("normalization");
+    if (language == null)
+      language = "eng";
+    if (outputFormat == null || ! (outputFormat.equals("xml") || outputFormat.equals("html") || outputFormat.equals("string")))
+      outputFormat = "xml";
+    if (outputType == null || ! (outputType.equals("compact") || outputType.equals("full")))
+      outputType = "compact";
+    if (normalization == null || ! (normalization.equals("none") || normalization.equals("reg") || normalization.equals("reg norm")))
+      normalization = "norm";
+    int normalizationType = Normalizer.DICTIONARY;
+    if (normalization != null && normalization.equals("none"))
+      normalizationType = Normalizer.NONE;
+
+    String xmlQueryString = "<query><name>" + query + "</name>" + "<language>" + language + "</language>" +  
+      "<outputFormat>" + outputFormat + "</outputFormat>" + "<outputType>" + outputType + "</outputType>" + "<normalization>" + normalization + "</normalization>" + "</query>";
+    try {
+      if (outputFormat.equals("xml"))
+        response.setContentType("text/xml");
+      else if (outputFormat.equals("html") || outputFormat.equals("string"))
+        response.setContentType("text/html");
+      else 
+        response.setContentType("text/xml");
+      PrintWriter out = response.getWriter();
+      if (query == null || query.isEmpty()) {
+        out.print("request parameter query is empty. Please specify a query.");
+        out.close();
+        return;
+      }
+      ArrayList<Lemma> lemmas = lexHandler.getLemmas(query, "lemma", language, normalizationType, true);
+      Hashtable<String, Form> formsHashtable = new Hashtable<String, Form>();
+      ArrayList<Form> forms = new ArrayList<Form>();
+      if (lemmas != null && ! lemmas.isEmpty()) {
+        for (int i=0; i<lemmas.size(); i++) {
+          Lemma lemma = lemmas.get(i);
+          ArrayList<Form> lemmaForms = lemma.getFormsList();
+          for (int j=0; j < lemmaForms.size(); j++) {
+            Form form = lemmaForms.get(j);
+            formsHashtable.put(form.getFormName(), form);
+          }
+        }
+      }
+      forms.addAll(formsHashtable.values());
+      Collections.sort(forms);
+      String baseUrl = getBaseUrl(request);
+      Date end = new Date();
+      String elapsedTime = String.valueOf(end.getTime() - begin.getTime());
+      String result = "";
+      if (outputFormat == null || outputFormat.equals("xml"))
+        result = createXmlOutputString(query, forms, outputType, baseUrl, xmlQueryString, elapsedTime);
+      else if (outputFormat.equals("html"))
+        result = createHtmlOutputString(query, forms, outputType, elapsedTime);
+      else if (outputFormat.equals("string"))
+        result = createStringOutputString(forms);
+      else 
+        result = createXmlOutputString(query, forms, outputType, baseUrl, xmlQueryString, elapsedTime);
+      out.print(result);
+      out.close();
+    } catch (ApplicationException e) { 
+      throw new ServletException(e);
+    }
+  }
+
+  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+    doGet(request, response);
+  }  
+  
+  private String getBaseUrl( HttpServletRequest request ) {
+    if (request.getServerPort() == 80 || request.getServerPort() == 443)
+      return request.getScheme() + "://" + request.getServerName() + request.getContextPath();
+    else
+      return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
+  }
+
+  
+  private String createXmlOutputString(String query, ArrayList<Form> forms, String outputType, String baseUrl, String xmlQueryString, String elapsedTime) {
+    String result = "<result>";
+    result = result + "<provider>" + "MPIWG MPDL language technology service (see: " + "" + baseUrl + "), Max Planck Institute for the History of Science, Berlin." + "</provider>";
+    result = result + xmlQueryString;
+    result = result + "<elapsed-time-ms>" + elapsedTime + "</elapsed-time-ms>";
+    if (forms != null && ! forms.isEmpty()) {
+      result = result + "<morphology>";
+      result = result + "<forms>";
+      for (int i=0; i<forms.size(); i++) {
+        result = result + "<form>";
+        Form f = forms.get(i);
+        String formName = f.getFormName();
+        String language = f.getLanguage();
+        String formProvider = f.getProvider();
+        String lemmaName = f.getLemmaName();
+        result = result + "<provider>" + formProvider + "</provider>";
+        result = result + "<language>" + language + "</language>";
+        result = result + "<lemmaName>" + lemmaName + "</lemmaName>";
+        result = result + "<formName>" + formName + "</formName>";
+        result = result + "</form>";
+      }
+      result = result + "</forms>";
+      result = result + "</morphology>";
+    }
+    result = result + "</result>";
+    return result;
+  }
+  
+  private String createHtmlOutputString(String query, ArrayList<Form> forms, String outputType, String elapsedTime) {
+    String result = "";
+    result = result + "<html>";
+    result = result + "<head>";
+    result = result + "<title>Lemmas for: \"" + query + "\"</title>";
+    result = result + "</head>";
+    result = result + "<body>";
+    result = result + "<table align=\"right\" valign=\"top\">";
+    result = result + "<td>[<i>This is a MPIWG MPDL language technology service</i>] <a href=\"/mpiwg-mpdl-lt-web/index.html\"><img src=\"/mpiwg-mpdl-lt-web/images/info.png\" valign=\"bottom\" width=\"15\" height=\"15\" border=\"0\" alt=\"MPIWG MPDL language technology service\"/></a></td>";
+    result = result + "</table>";
+    result = result + "<p/>";
+    result = result + "<h1>Forms for: \"" + query + "\"</h1>";
+    if (forms != null && ! forms.isEmpty()) {
+      result = result + "<h3>Morphology</h3>";
+      result = result + "<ul>";
+      result = result + "<p/>";
+      if (outputType != null && outputType.equals("full")) {
+        for (int i=0; i<forms.size(); i++) {
+          result = result + "<li>";
+          Form f = forms.get(i);
+          String formName = f.getFormName();
+          String formProvider = f.getProvider();
+          String language = f.getLanguage();
+          String lemmaName = f.getLemmaName();
+          result = result + formName + " (data provider: " + formProvider + ", language: " + language + ", lemmaName: " + lemmaName + ")";
+          result = result + "</li>";
+        }
+      } else if (outputType == null || outputType.equals("compact")) {
+        result = result + "<li>";
+        for (int i=0; i<forms.size(); i++) {
+          Form f = forms.get(i);
+          String formName = f.getFormName();
+          result = result + formName + ", ";
+        }
+        result = result.substring(0, result.length() - 2);  // without last comma and blank
+        result = result + "</li>";
+      } else if (outputType.equals("string")) {
+        for (int i=0; i<forms.size(); i++) {
+          Form f = forms.get(i);
+          String formName = f.getFormName();
+          result = result + formName + " ";
+        }
+        result = result.substring(0, result.length() - 1);  // without last blank
+      }
+    }
+    result = result + "<hr/>";
+    result = result + "<p/>";
+    result = result + "Elapsed time: " + elapsedTime + " ms, see the <a href=\"/mpiwg-mpdl-lt-web/index.html\">service description</a> of this page, if you find a bug <a href=\"https://it-dev.mpiwg-berlin.mpg.de/tracs/mpdl-project-software/newticket\">let us know</a>";
+    result = result + "</body>";
+    result = result + "</html>";
+    return result;
+  }
+
+  private String createStringOutputString(ArrayList<Form> forms) {
+    String result = "";
+    for (int i=0; i<forms.size(); i++) {
+      Form f = forms.get(i);
+      String formName = f.getFormName();
+      result = result + formName + " ";
+    }
+    result = result.substring(0, result.length() - 1);  // without last blank
+    return result;
+  }
+    
+  
+}