Mercurial > hg > eSciDocMPIWGServicesRestlet
diff src/de/mpiwg/itgroup/escidoc/MPIWGServices/Restlet/services/redirect/DigilibRedirector.java @ 0:1aac45997235
first ingest
author | dwinter |
---|---|
date | Wed, 01 Dec 2010 17:35:51 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/de/mpiwg/itgroup/escidoc/MPIWGServices/Restlet/services/redirect/DigilibRedirector.java Wed Dec 01 17:35:51 2010 +0100 @@ -0,0 +1,91 @@ +package de.mpiwg.itgroup.escidoc.MPIWGServices.Restlet.services.redirect; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +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.xpath.XPath; +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 DigilibRedirector extends ServerResource{ + + private String eScidocServer; + private String eScidocPort; + private String digilibPath; + private String eScidocUser; + private String eScidocUserPW; + public DigilibRedirector() 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"); + digilibPath=(String)prop.get("digilibPath"); + eScidocUser=(String)prop.get("eScidocUser"); + eScidocUserPW=(String)prop.get("eScidocUserPW"); + + } + @Get("html") + public Representation getHtml() + { + 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:imageFolder"); + Element item = (Element)xp.selectSingleNode(doc); + path = item.getTextTrim(); + path= ECHORessource.correct(path); // nur pfad nach online + } catch (Exception e) { + setStatus(Status.SERVER_ERROR_INTERNAL); + return new StringRepresentation("<html><body>error3</body></html>"); + } + + + StringRepresentation repr = new StringRepresentation(digilibPath+path); + getResponse().redirectPermanent(digilibPath+path); + return repr; + } +}