Mercurial > hg > mpdl-group
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; + } + + +}