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 }