Mercurial > hg > fulltextSearchServer
comparison src/de/mpiwg/dwinter/fulltextSearchServer/ShowResultOfTicket.java @ 0:db87c1b7eb6d
initial
author | dwinter |
---|---|
date | Wed, 03 Nov 2010 12:18:46 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:db87c1b7eb6d |
---|---|
1 package de.mpiwg.dwinter.fulltextSearchServer; | |
2 | |
3 import java.io.ByteArrayInputStream; | |
4 import java.io.FileNotFoundException; | |
5 import java.io.IOException; | |
6 import java.io.InputStream; | |
7 import java.io.StringBufferInputStream; | |
8 import java.io.StringWriter; | |
9 | |
10 import javax.xml.parsers.DocumentBuilder; | |
11 import javax.xml.parsers.DocumentBuilderFactory; | |
12 import javax.xml.parsers.ParserConfigurationException; | |
13 import javax.xml.transform.OutputKeys; | |
14 import javax.xml.transform.Transformer; | |
15 import javax.xml.transform.TransformerConfigurationException; | |
16 import javax.xml.transform.TransformerException; | |
17 import javax.xml.transform.TransformerFactory; | |
18 import javax.xml.transform.dom.DOMResult; | |
19 import javax.xml.transform.dom.DOMSource; | |
20 import javax.xml.transform.stream.StreamResult; | |
21 import javax.xml.transform.stream.StreamSource; | |
22 | |
23 import org.apache.log4j.Logger; | |
24 import org.jdom.JDOMException; | |
25 import org.restlet.data.Form; | |
26 import org.restlet.data.MediaType; | |
27 import org.restlet.data.Parameter; | |
28 import org.restlet.data.Status; | |
29 import org.restlet.representation.Representation; | |
30 import org.restlet.representation.StringRepresentation; | |
31 import org.restlet.resource.Get; | |
32 import org.restlet.resource.Options; | |
33 import org.restlet.resource.ServerResource; | |
34 import org.w3c.dom.Document; | |
35 import org.w3c.dom.DocumentFragment; | |
36 import org.xml.sax.InputSource; | |
37 import org.xml.sax.SAXException; | |
38 | |
39 import de.mpiwg.dwinter.fulltext.ticket.TicketWriter; | |
40 import de.mpiwg.dwinter.fulltextIndexer.harvester.MyResolver; | |
41 | |
42 public class ShowResultOfTicket extends ServerResource { | |
43 | |
44 Logger logger = Logger.getRootLogger(); | |
45 //need options for crossdomain scripting | |
46 @Options | |
47 public void doOptions(Representation entity) { | |
48 Form responseHeaders = (Form) getResponse().getAttributes().get("org.restlet.http.headers"); | |
49 if (responseHeaders == null) { | |
50 responseHeaders = new Form(); | |
51 getResponse().getAttributes().put("org.restlet.http.headers", responseHeaders); | |
52 } | |
53 responseHeaders.add("Access-Control-Allow-Origin", "*"); | |
54 responseHeaders.add("Access-Control-Allow-Methods", "POST,OPTIONS,GET"); | |
55 responseHeaders.add("Access-Control-Allow-Headers", "Content-Type"); | |
56 responseHeaders.add("Access-Control-Allow-Credentials", "false"); | |
57 responseHeaders.add("Access-Control-Max-Age", "60"); | |
58 } | |
59 | |
60 @Get("html") | |
61 public Representation getHTML( ) throws NumberFormatException, JDOMException { | |
62 logger.debug("show result of ticker: get HTML"); | |
63 | |
64 // response header fuer cross-site.scripting | |
65 Form responseHeaders = (Form) getResponse().getAttributes().get("org.restlet.http.headers"); | |
66 if (responseHeaders == null) { | |
67 responseHeaders = new Form(); | |
68 getResponse().getAttributes().put("org.restlet.http.headers", responseHeaders); | |
69 } | |
70 responseHeaders.add("Access-Control-Allow-Origin", "*"); | |
71 | |
72 | |
73 String ticket = (String) getRequest().getAttributes().get("ticket") ; | |
74 String lang = (String) getRequest().getAttributes().get("lang") ; | |
75 | |
76 Form form = getRequest().getResourceRef().getQueryAsForm(); | |
77 String from=""; | |
78 Integer intFrom=0; | |
79 Integer intTo=Integer.MAX_VALUE; | |
80 | |
81 String to=""; | |
82 Boolean restricted= false; | |
83 | |
84 for (Parameter parameter : form) { | |
85 String name =parameter.getName(); | |
86 if (name.equals("from")){ | |
87 from = parameter.getValue(); | |
88 try{ | |
89 intFrom=Integer.valueOf(from); | |
90 restricted=true; | |
91 } catch (NumberFormatException nf) { | |
92 // nothing to do | |
93 } | |
94 | |
95 } | |
96 else if (name.equals("to")) | |
97 { | |
98 to = parameter.getValue(); | |
99 try{ | |
100 intTo=Integer.valueOf(to); | |
101 restricted=true; | |
102 } catch (NumberFormatException nf) { | |
103 // nothing to do | |
104 } | |
105 } | |
106 } | |
107 | |
108 StringRepresentation representation = null; | |
109 String xml = ""; | |
110 try { | |
111 if (restricted){ | |
112 xml = TicketWriter.getResultXML(ticket, lang,intFrom,intTo); | |
113 } else { | |
114 xml = TicketWriter.getResultXML(ticket,lang); | |
115 } | |
116 | |
117 if (xml == null) | |
118 { | |
119 setStatus(Status.SUCCESS_ACCEPTED) ; | |
120 logger.debug("show result of ticket:Waiting"); | |
121 return new StringRepresentation("<info>waiting</info>",MediaType.TEXT_XML); | |
122 } | |
123 | |
124 } catch (FileNotFoundException e) { | |
125 e.printStackTrace(); | |
126 logger.debug("show result of ticker: file not found xml"); | |
127 setStatus(Status.SERVER_ERROR_INTERNAL) ; | |
128 return null; | |
129 } catch (IOException e) { | |
130 logger.debug("show result of ticker: IO error xml"); | |
131 e.printStackTrace(); | |
132 setStatus(Status.SERVER_ERROR_INTERNAL) ; | |
133 return null; | |
134 } | |
135 | |
136 | |
137 | |
138 // String txt = IOUtils.toString(new FileInputStream(file)); | |
139 // get rid of the entities | |
140 TransformerFactory tf = TransformerFactory.newInstance(); | |
141 | |
142 InputStream res = getClass().getResourceAsStream("/de/mpiwg/dwinter/fulltextSearchServer/xsl/ticketResultToHTML.xsl"); | |
143 | |
144 Transformer t; | |
145 try { | |
146 t = tf.newTransformer(new StreamSource(res)); | |
147 } catch (TransformerConfigurationException e) { | |
148 // TODO Auto-generated catch block | |
149 e.printStackTrace(); | |
150 return null; | |
151 } | |
152 | |
153 | |
154 | |
155 //OutputStream output = new ByteArrayOutputStream(); | |
156 | |
157 //BufferedWriter sw = new BufferedWriter(new OutputStreamWriter(output, "utf-8")); | |
158 | |
159 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); | |
160 dbf.setNamespaceAware(true); | |
161 dbf.setValidating(false); | |
162 DocumentBuilder db; | |
163 try { | |
164 db = dbf.newDocumentBuilder(); | |
165 } catch (ParserConfigurationException e) { | |
166 // TODO Auto-generated catch block | |
167 e.printStackTrace(); | |
168 return null; | |
169 } | |
170 //db.setEntityResolver(new MyResolver()); | |
171 | |
172 Document doc; | |
173 try { | |
174 //stream = new StringInputStream(xml,"utf-8"); | |
175 | |
176 ByteArrayInputStream stream = new ByteArrayInputStream(xml.getBytes("utf-8")); | |
177 doc = db.parse(stream); | |
178 | |
179 | |
180 } catch (SAXException e) { | |
181 // TODO Auto-generated catch block | |
182 e.printStackTrace(); | |
183 return null; | |
184 } catch (IOException e) { | |
185 // TODO Auto-generated catch block | |
186 e.printStackTrace(); | |
187 return null; | |
188 } | |
189 | |
190 StringWriter sw = new StringWriter(); | |
191 StreamResult sr = new StreamResult(sw); | |
192 | |
193 //org.w3c.dom.Document tgtDoc = db.newDocument(); | |
194 //DocumentFragment fragment = tgtDoc.createDocumentFragment(); | |
195 //DOMResult tgtDom = new DOMResult( fragment ); | |
196 | |
197 | |
198 t.setOutputProperty(OutputKeys.ENCODING, "utf-8"); | |
199 try { | |
200 t.transform(new DOMSource(doc), sr); | |
201 } catch (TransformerException e) { | |
202 // TODO Auto-generated catch block | |
203 e.printStackTrace(); | |
204 } | |
205 | |
206 | |
207 String txt = sw.toString(); | |
208 | |
209 | |
210 | |
211 representation = new StringRepresentation(txt, | |
212 MediaType.TEXT_HTML) ; | |
213 return representation; | |
214 | |
215 } | |
216 //@Get("xml") | |
217 public Representation getXML( ) { | |
218 logger.debug("show result of ticker: get xml"); | |
219 | |
220 // response header fuer cross-site.scripting | |
221 Form responseHeaders = (Form) getResponse().getAttributes().get("org.restlet.http.headers"); | |
222 if (responseHeaders == null) { | |
223 responseHeaders = new Form(); | |
224 getResponse().getAttributes().put("org.restlet.http.headers", responseHeaders); | |
225 } | |
226 responseHeaders.add("Access-Control-Allow-Origin", "*"); | |
227 | |
228 | |
229 String ticket = (String) getRequest().getAttributes().get("ticket") ; | |
230 String lang = (String) getRequest().getAttributes().get("lang") ; | |
231 StringRepresentation representation = null; | |
232 String xml; | |
233 try { | |
234 xml = TicketWriter.getResultXML(ticket,lang); | |
235 } catch (FileNotFoundException e) { | |
236 e.printStackTrace(); | |
237 logger.debug("show result of ticker: file not found xml"); | |
238 setStatus(Status.SERVER_ERROR_INTERNAL) ; | |
239 return null; | |
240 } catch (IOException e) { | |
241 logger.debug("show result of ticker: IO error xml"); | |
242 e.printStackTrace(); | |
243 setStatus(Status.SERVER_ERROR_INTERNAL) ; | |
244 return null; | |
245 } | |
246 | |
247 if (xml != null) { | |
248 representation = new StringRepresentation(xml, | |
249 MediaType.TEXT_XML) ; | |
250 return representation; | |
251 } else { | |
252 setStatus(Status.SUCCESS_ACCEPTED) ; | |
253 logger.debug("show result of ticket:Waiting"); | |
254 return new StringRepresentation("<info>waiting</info>",MediaType.TEXT_XML); | |
255 } | |
256 } | |
257 | |
258 | |
259 } |