Mercurial > hg > eSciDocMPIWGServicesRestlet
view src/de/mpiwg/itgroup/escidoc/MPIWGServices/Restlet/services/redirect/OrigRefRedirector.java @ 3:498b68667ff3
Neuer Mechanismus zum umleiten der Quellen.
author | dwinter |
---|---|
date | Fri, 20 Apr 2012 15:55:51 +0200 |
parents | ffeb8be0bded |
children |
line wrap: on
line source
package de.mpiwg.itgroup.escidoc.MPIWGServices.Restlet.services.redirect; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.stream.StreamSource; import org.apache.http.HttpResponse; import org.jdom.Attribute; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.output.XMLOutputter; import org.jdom.transform.JDOMResult; import org.jdom.transform.JDOMSource; import org.jdom.xpath.XPath; import org.restlet.data.Form; import org.restlet.data.MediaType; import org.restlet.data.Status; import org.restlet.representation.Representation; import org.restlet.representation.StringRepresentation; import org.restlet.resource.Get; import org.restlet.resource.ServerResource; import de.mpiwg.itgroup.eSciDoc.Tools.EScidocBasicHandler; import de.mpiwg.itgroup.eSciDoc.Tools.EScidocTools; import de.mpiwg.itgroup.eSciDoc.echoObjects.ECHORessource; public class OrigRefRedirector extends ServerResource{ private String eScidocServer; private String eScidocPort; private String eScidocUser; private String eScidocUserPW; public OrigRefRedirector() throws IOException{ InputStream is = getClass().getResourceAsStream("/de/mpiwg/itgroup/escidoc/MPIWGServices/Restlet/config/eScidocServer.config"); Properties prop = new Properties(); prop.load(is); eScidocServer= (String)prop.get("eScidocServer"); eScidocPort=(String)prop.get("eScidocPort"); eScidocUser=(String)prop.get("eScidocUser"); eScidocUserPW=(String)prop.get("eScidocUserPW"); } @Get("html") public Representation getHtml() throws JDOMException, IOException, TransformerFactoryConfigurationError, TransformerException { Form form = getRequest().getResourceRef().getQueryAsForm(); String mode=form.getValues("mode"); //xml or html default is html if(mode==null || mode.equals("")) mode="xml"; String id = (String)getRequest().getAttributes().get("escidocId"); EScidocBasicHandler handler = null; if (getContext().getAttributes().containsKey("escidocHandler")){ handler = (EScidocBasicHandler) getContext().getAttributes().get("escidocHandler"); } if (handler==null){ handler = new EScidocBasicHandler(eScidocServer, Integer.valueOf(eScidocPort),eScidocUser,eScidocUserPW); } HttpResponse resp; try { resp = handler.eScidocGet("/ir/item/"+id); } catch (IOException e) { setStatus(Status.SERVER_ERROR_INTERNAL); return new StringRepresentation("<html><body>error1</body></html>"); } int code = resp.getStatusLine().getStatusCode(); if (code!=200){ setStatus(new Status(code)); return new StringRepresentation("<html><body>error2</body></html>"); } Document doc; String path; try { doc = new SAXBuilder().build(resp.getEntity().getContent()); XPath xp= EScidocTools.getESciDocXpath("//metadataRecords:md-record[@xlink:title='mpiwg-admin']/mpiwg:admin/mpiwg:orig-ref/@xlink:href"); Attribute item = (Attribute)xp.selectSingleNode(doc); path = item.getValue(); } catch (Exception e) { setStatus(Status.SERVER_ERROR_INTERNAL); return new StringRepresentation("<html><body>error3</body></html>"); } if(mode.equals("xml")) { StringRepresentation repr = new StringRepresentation(path); getResponse().redirectPermanent(path); return repr; } else if (mode.equals("html")){ Document indexMeta = new SAXBuilder().build(path); InputStream xslt= getClass().getResourceAsStream("/de/mpiwg/itgroup/escidoc/MPIWGServices/Restlet/staticPages/formatIndexMeta.xsl"); //Document styleDoc = new SAXBuilder().build(xslt); Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(xslt)); JDOMSource inxml = new JDOMSource(indexMeta); JDOMResult out = new JDOMResult(); transformer.transform(inxml, out); //logger.debug(printXML(doc)); Document docresult = out.getDocument(); return new StringRepresentation(printXML(docresult),MediaType.TEXT_HTML); } else { setStatus(Status.CLIENT_ERROR_BAD_REQUEST); return new StringRepresentation("<html><body>wrong value for parameter mode, only html or xml allowed.</body></html>"); } } public String printXML(Document dom) throws IOException{ XMLOutputter out = new XMLOutputter(); String string = out.outputString(dom); return string; } }