Mercurial > hg > fulltextSearchServer
view src/de/mpiwg/dwinter/fulltextSearchServer/ShowResultOfTicket.java @ 0:db87c1b7eb6d
initial
author | dwinter |
---|---|
date | Wed, 03 Nov 2010 12:18:46 +0100 |
parents | |
children |
line wrap: on
line source
package de.mpiwg.dwinter.fulltextSearchServer; import java.io.ByteArrayInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.StringBufferInputStream; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.apache.log4j.Logger; import org.jdom.JDOMException; import org.restlet.data.Form; import org.restlet.data.MediaType; import org.restlet.data.Parameter; import org.restlet.data.Status; import org.restlet.representation.Representation; import org.restlet.representation.StringRepresentation; import org.restlet.resource.Get; import org.restlet.resource.Options; import org.restlet.resource.ServerResource; import org.w3c.dom.Document; import org.w3c.dom.DocumentFragment; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import de.mpiwg.dwinter.fulltext.ticket.TicketWriter; import de.mpiwg.dwinter.fulltextIndexer.harvester.MyResolver; public class ShowResultOfTicket extends ServerResource { Logger logger = Logger.getRootLogger(); //need options for crossdomain scripting @Options public void doOptions(Representation entity) { Form responseHeaders = (Form) getResponse().getAttributes().get("org.restlet.http.headers"); if (responseHeaders == null) { responseHeaders = new Form(); getResponse().getAttributes().put("org.restlet.http.headers", responseHeaders); } responseHeaders.add("Access-Control-Allow-Origin", "*"); responseHeaders.add("Access-Control-Allow-Methods", "POST,OPTIONS,GET"); responseHeaders.add("Access-Control-Allow-Headers", "Content-Type"); responseHeaders.add("Access-Control-Allow-Credentials", "false"); responseHeaders.add("Access-Control-Max-Age", "60"); } @Get("html") public Representation getHTML( ) throws NumberFormatException, JDOMException { logger.debug("show result of ticker: get HTML"); // response header fuer cross-site.scripting Form responseHeaders = (Form) getResponse().getAttributes().get("org.restlet.http.headers"); if (responseHeaders == null) { responseHeaders = new Form(); getResponse().getAttributes().put("org.restlet.http.headers", responseHeaders); } responseHeaders.add("Access-Control-Allow-Origin", "*"); String ticket = (String) getRequest().getAttributes().get("ticket") ; String lang = (String) getRequest().getAttributes().get("lang") ; Form form = getRequest().getResourceRef().getQueryAsForm(); String from=""; Integer intFrom=0; Integer intTo=Integer.MAX_VALUE; String to=""; Boolean restricted= false; for (Parameter parameter : form) { String name =parameter.getName(); if (name.equals("from")){ from = parameter.getValue(); try{ intFrom=Integer.valueOf(from); restricted=true; } catch (NumberFormatException nf) { // nothing to do } } else if (name.equals("to")) { to = parameter.getValue(); try{ intTo=Integer.valueOf(to); restricted=true; } catch (NumberFormatException nf) { // nothing to do } } } StringRepresentation representation = null; String xml = ""; try { if (restricted){ xml = TicketWriter.getResultXML(ticket, lang,intFrom,intTo); } else { xml = TicketWriter.getResultXML(ticket,lang); } if (xml == null) { setStatus(Status.SUCCESS_ACCEPTED) ; logger.debug("show result of ticket:Waiting"); return new StringRepresentation("<info>waiting</info>",MediaType.TEXT_XML); } } catch (FileNotFoundException e) { e.printStackTrace(); logger.debug("show result of ticker: file not found xml"); setStatus(Status.SERVER_ERROR_INTERNAL) ; return null; } catch (IOException e) { logger.debug("show result of ticker: IO error xml"); e.printStackTrace(); setStatus(Status.SERVER_ERROR_INTERNAL) ; return null; } // String txt = IOUtils.toString(new FileInputStream(file)); // get rid of the entities TransformerFactory tf = TransformerFactory.newInstance(); InputStream res = getClass().getResourceAsStream("/de/mpiwg/dwinter/fulltextSearchServer/xsl/ticketResultToHTML.xsl"); Transformer t; try { t = tf.newTransformer(new StreamSource(res)); } catch (TransformerConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } //OutputStream output = new ByteArrayOutputStream(); //BufferedWriter sw = new BufferedWriter(new OutputStreamWriter(output, "utf-8")); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); dbf.setValidating(false); DocumentBuilder db; try { db = dbf.newDocumentBuilder(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } //db.setEntityResolver(new MyResolver()); Document doc; try { //stream = new StringInputStream(xml,"utf-8"); ByteArrayInputStream stream = new ByteArrayInputStream(xml.getBytes("utf-8")); doc = db.parse(stream); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } StringWriter sw = new StringWriter(); StreamResult sr = new StreamResult(sw); //org.w3c.dom.Document tgtDoc = db.newDocument(); //DocumentFragment fragment = tgtDoc.createDocumentFragment(); //DOMResult tgtDom = new DOMResult( fragment ); t.setOutputProperty(OutputKeys.ENCODING, "utf-8"); try { t.transform(new DOMSource(doc), sr); } catch (TransformerException e) { // TODO Auto-generated catch block e.printStackTrace(); } String txt = sw.toString(); representation = new StringRepresentation(txt, MediaType.TEXT_HTML) ; return representation; } //@Get("xml") public Representation getXML( ) { logger.debug("show result of ticker: get xml"); // response header fuer cross-site.scripting Form responseHeaders = (Form) getResponse().getAttributes().get("org.restlet.http.headers"); if (responseHeaders == null) { responseHeaders = new Form(); getResponse().getAttributes().put("org.restlet.http.headers", responseHeaders); } responseHeaders.add("Access-Control-Allow-Origin", "*"); String ticket = (String) getRequest().getAttributes().get("ticket") ; String lang = (String) getRequest().getAttributes().get("lang") ; StringRepresentation representation = null; String xml; try { xml = TicketWriter.getResultXML(ticket,lang); } catch (FileNotFoundException e) { e.printStackTrace(); logger.debug("show result of ticker: file not found xml"); setStatus(Status.SERVER_ERROR_INTERNAL) ; return null; } catch (IOException e) { logger.debug("show result of ticker: IO error xml"); e.printStackTrace(); setStatus(Status.SERVER_ERROR_INTERNAL) ; return null; } if (xml != null) { representation = new StringRepresentation(xml, MediaType.TEXT_XML) ; return representation; } else { setStatus(Status.SUCCESS_ACCEPTED) ; logger.debug("show result of ticket:Waiting"); return new StringRepresentation("<info>waiting</info>",MediaType.TEXT_XML); } } }