comparison software/mpdl-services/mpiwg-mpdl-cms-web/src/de/mpg/mpiwg/berlin/mpdl/servlets/lt/GetForms.java @ 23:e845310098ba

diverse Korrekturen
author Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
date Tue, 27 Nov 2012 12:35:19 +0100
parents
children
comparison
equal deleted inserted replaced
22:6a45a982c333 23:e845310098ba
1 package de.mpg.mpiwg.berlin.mpdl.servlets.lt;
2
3 import java.io.IOException;
4 import java.io.PrintWriter;
5 import java.util.ArrayList;
6 import java.util.Collections;
7 import java.util.Date;
8 import java.util.Hashtable;
9
10 import javax.servlet.ServletConfig;
11 import javax.servlet.ServletException;
12 import javax.servlet.http.HttpServlet;
13 import javax.servlet.http.HttpServletRequest;
14 import javax.servlet.http.HttpServletResponse;
15
16 import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException;
17 import de.mpg.mpiwg.berlin.mpdl.lt.dict.db.LexHandler;
18 import de.mpg.mpiwg.berlin.mpdl.lt.morph.app.Form;
19 import de.mpg.mpiwg.berlin.mpdl.lt.morph.app.Lemma;
20 import de.mpg.mpiwg.berlin.mpdl.lt.text.norm.Normalizer;
21
22 public class GetForms extends HttpServlet {
23 private static final long serialVersionUID = 1L;
24 private LexHandler lexHandler;
25
26 public GetForms() {
27 super();
28 }
29
30 public void init(ServletConfig config) throws ServletException {
31 super.init(config);
32 try {
33 lexHandler = LexHandler.getInstance();
34 } catch (ApplicationException e) {
35 throw new ServletException(e);
36 }
37 }
38
39 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
40 Date begin = new Date();
41 request.setCharacterEncoding("utf-8");
42 response.setCharacterEncoding("utf-8");
43 String query = request.getParameter("query");
44 String language = request.getParameter("language");
45 String outputFormat = request.getParameter("outputFormat");
46 String outputType = request.getParameter("outputType");
47 String normalization = request.getParameter("normalization");
48 if (language == null)
49 language = "eng";
50 if (outputFormat == null || ! (outputFormat.equals("xml") || outputFormat.equals("html") || outputFormat.equals("string")))
51 outputFormat = "xml";
52 if (outputType == null || ! (outputType.equals("compact") || outputType.equals("full")))
53 outputType = "compact";
54 if (normalization == null || ! (normalization.equals("none") || normalization.equals("reg") || normalization.equals("reg norm")))
55 normalization = "norm";
56 int normalizationType = Normalizer.DICTIONARY;
57 if (normalization != null && normalization.equals("none"))
58 normalizationType = Normalizer.NONE;
59
60 String xmlQueryString = "<query><name>" + query + "</name>" + "<language>" + language + "</language>" +
61 "<outputFormat>" + outputFormat + "</outputFormat>" + "<outputType>" + outputType + "</outputType>" + "<normalization>" + normalization + "</normalization>" + "</query>";
62 try {
63 if (outputFormat.equals("xml"))
64 response.setContentType("text/xml");
65 else if (outputFormat.equals("html") || outputFormat.equals("string"))
66 response.setContentType("text/html");
67 else
68 response.setContentType("text/xml");
69 PrintWriter out = response.getWriter();
70 if (query == null || query.isEmpty()) {
71 out.print("request parameter query is empty. Please specify a query.");
72 out.close();
73 return;
74 }
75 ArrayList<Lemma> lemmas = lexHandler.getLemmas(query, "lemma", language, normalizationType, true);
76 Hashtable<String, Form> formsHashtable = new Hashtable<String, Form>();
77 ArrayList<Form> forms = new ArrayList<Form>();
78 if (lemmas != null && ! lemmas.isEmpty()) {
79 for (int i=0; i<lemmas.size(); i++) {
80 Lemma lemma = lemmas.get(i);
81 ArrayList<Form> lemmaForms = lemma.getFormsList();
82 for (int j=0; j < lemmaForms.size(); j++) {
83 Form form = lemmaForms.get(j);
84 formsHashtable.put(form.getFormName(), form);
85 }
86 }
87 }
88 forms.addAll(formsHashtable.values());
89 Collections.sort(forms);
90 String baseUrl = getBaseUrl(request);
91 Date end = new Date();
92 String elapsedTime = String.valueOf(end.getTime() - begin.getTime());
93 String result = "";
94 if (outputFormat == null || outputFormat.equals("xml"))
95 result = createXmlOutputString(query, forms, outputType, baseUrl, xmlQueryString, elapsedTime);
96 else if (outputFormat.equals("html"))
97 result = createHtmlOutputString(query, forms, outputType, elapsedTime);
98 else if (outputFormat.equals("string"))
99 result = createStringOutputString(forms);
100 else
101 result = createXmlOutputString(query, forms, outputType, baseUrl, xmlQueryString, elapsedTime);
102 out.print(result);
103 out.close();
104 } catch (ApplicationException e) {
105 throw new ServletException(e);
106 }
107 }
108
109 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
110 doGet(request, response);
111 }
112
113 private String getBaseUrl( HttpServletRequest request ) {
114 if (request.getServerPort() == 80 || request.getServerPort() == 443)
115 return request.getScheme() + "://" + request.getServerName() + request.getContextPath();
116 else
117 return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
118 }
119
120
121 private String createXmlOutputString(String query, ArrayList<Form> forms, String outputType, String baseUrl, String xmlQueryString, String elapsedTime) {
122 String result = "<result>";
123 result = result + "<provider>" + "MPIWG MPDL language technology service (see: " + "" + baseUrl + "), Max Planck Institute for the History of Science, Berlin." + "</provider>";
124 result = result + xmlQueryString;
125 result = result + "<elapsed-time-ms>" + elapsedTime + "</elapsed-time-ms>";
126 if (forms != null && ! forms.isEmpty()) {
127 result = result + "<morphology>";
128 result = result + "<forms>";
129 for (int i=0; i<forms.size(); i++) {
130 result = result + "<form>";
131 Form f = forms.get(i);
132 String formName = f.getFormName();
133 String language = f.getLanguage();
134 String formProvider = f.getProvider();
135 String lemmaName = f.getLemmaName();
136 result = result + "<provider>" + formProvider + "</provider>";
137 result = result + "<language>" + language + "</language>";
138 result = result + "<lemmaName>" + lemmaName + "</lemmaName>";
139 result = result + "<formName>" + formName + "</formName>";
140 result = result + "</form>";
141 }
142 result = result + "</forms>";
143 result = result + "</morphology>";
144 }
145 result = result + "</result>";
146 return result;
147 }
148
149 private String createHtmlOutputString(String query, ArrayList<Form> forms, String outputType, String elapsedTime) {
150 String result = "";
151 result = result + "<html>";
152 result = result + "<head>";
153 result = result + "<title>Lemmas for: \"" + query + "\"</title>";
154 result = result + "</head>";
155 result = result + "<body>";
156 result = result + "<table align=\"right\" valign=\"top\">";
157 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>";
158 result = result + "</table>";
159 result = result + "<p/>";
160 result = result + "<h1>Forms for: \"" + query + "\"</h1>";
161 if (forms != null && ! forms.isEmpty()) {
162 result = result + "<h3>Morphology</h3>";
163 result = result + "<ul>";
164 result = result + "<p/>";
165 if (outputType != null && outputType.equals("full")) {
166 for (int i=0; i<forms.size(); i++) {
167 result = result + "<li>";
168 Form f = forms.get(i);
169 String formName = f.getFormName();
170 String formProvider = f.getProvider();
171 String language = f.getLanguage();
172 String lemmaName = f.getLemmaName();
173 result = result + formName + " (data provider: " + formProvider + ", language: " + language + ", lemmaName: " + lemmaName + ")";
174 result = result + "</li>";
175 }
176 } else if (outputType == null || outputType.equals("compact")) {
177 result = result + "<li>";
178 for (int i=0; i<forms.size(); i++) {
179 Form f = forms.get(i);
180 String formName = f.getFormName();
181 result = result + formName + ", ";
182 }
183 result = result.substring(0, result.length() - 2); // without last comma and blank
184 result = result + "</li>";
185 } else if (outputType.equals("string")) {
186 for (int i=0; i<forms.size(); i++) {
187 Form f = forms.get(i);
188 String formName = f.getFormName();
189 result = result + formName + " ";
190 }
191 result = result.substring(0, result.length() - 1); // without last blank
192 }
193 }
194 result = result + "<hr/>";
195 result = result + "<p/>";
196 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>";
197 result = result + "</body>";
198 result = result + "</html>";
199 return result;
200 }
201
202 private String createStringOutputString(ArrayList<Form> forms) {
203 String result = "";
204 for (int i=0; i<forms.size(); i++) {
205 Form f = forms.get(i);
206 String formName = f.getFormName();
207 result = result + formName + " ";
208 }
209 result = result.substring(0, result.length() - 1); // without last blank
210 return result;
211 }
212
213
214 }