annotate src/de/mpiwg/itgroup/escidoc/MPIWGServices/Restlet/services/redirect/OrigRefRedirector.java @ 2:ffeb8be0bded

minor bugs / logging lib added
author dwinter
date Mon, 13 Dec 2010 11:13:02 +0100
parents 1aac45997235
children 498b68667ff3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1aac45997235 first ingest
dwinter
parents:
diff changeset
1 package de.mpiwg.itgroup.escidoc.MPIWGServices.Restlet.services.redirect;
1aac45997235 first ingest
dwinter
parents:
diff changeset
2
1aac45997235 first ingest
dwinter
parents:
diff changeset
3 import java.io.IOException;
1aac45997235 first ingest
dwinter
parents:
diff changeset
4 import java.io.InputStream;
1aac45997235 first ingest
dwinter
parents:
diff changeset
5 import java.util.Properties;
1aac45997235 first ingest
dwinter
parents:
diff changeset
6
1aac45997235 first ingest
dwinter
parents:
diff changeset
7 import javax.xml.transform.Transformer;
1aac45997235 first ingest
dwinter
parents:
diff changeset
8 import javax.xml.transform.TransformerConfigurationException;
1aac45997235 first ingest
dwinter
parents:
diff changeset
9 import javax.xml.transform.TransformerException;
1aac45997235 first ingest
dwinter
parents:
diff changeset
10 import javax.xml.transform.TransformerFactory;
1aac45997235 first ingest
dwinter
parents:
diff changeset
11 import javax.xml.transform.TransformerFactoryConfigurationError;
1aac45997235 first ingest
dwinter
parents:
diff changeset
12 import javax.xml.transform.stream.StreamSource;
1aac45997235 first ingest
dwinter
parents:
diff changeset
13
1aac45997235 first ingest
dwinter
parents:
diff changeset
14 import org.apache.http.HttpResponse;
1aac45997235 first ingest
dwinter
parents:
diff changeset
15 import org.jdom.Attribute;
1aac45997235 first ingest
dwinter
parents:
diff changeset
16 import org.jdom.Document;
1aac45997235 first ingest
dwinter
parents:
diff changeset
17 import org.jdom.Element;
1aac45997235 first ingest
dwinter
parents:
diff changeset
18 import org.jdom.JDOMException;
1aac45997235 first ingest
dwinter
parents:
diff changeset
19 import org.jdom.input.SAXBuilder;
1aac45997235 first ingest
dwinter
parents:
diff changeset
20 import org.jdom.output.XMLOutputter;
1aac45997235 first ingest
dwinter
parents:
diff changeset
21 import org.jdom.transform.JDOMResult;
1aac45997235 first ingest
dwinter
parents:
diff changeset
22 import org.jdom.transform.JDOMSource;
1aac45997235 first ingest
dwinter
parents:
diff changeset
23 import org.jdom.xpath.XPath;
1aac45997235 first ingest
dwinter
parents:
diff changeset
24 import org.restlet.data.Form;
1aac45997235 first ingest
dwinter
parents:
diff changeset
25 import org.restlet.data.MediaType;
1aac45997235 first ingest
dwinter
parents:
diff changeset
26 import org.restlet.data.Status;
1aac45997235 first ingest
dwinter
parents:
diff changeset
27 import org.restlet.representation.Representation;
1aac45997235 first ingest
dwinter
parents:
diff changeset
28 import org.restlet.representation.StringRepresentation;
1aac45997235 first ingest
dwinter
parents:
diff changeset
29 import org.restlet.resource.Get;
1aac45997235 first ingest
dwinter
parents:
diff changeset
30 import org.restlet.resource.ServerResource;
1aac45997235 first ingest
dwinter
parents:
diff changeset
31
1aac45997235 first ingest
dwinter
parents:
diff changeset
32 import de.mpiwg.itgroup.eSciDoc.Tools.EScidocBasicHandler;
1aac45997235 first ingest
dwinter
parents:
diff changeset
33 import de.mpiwg.itgroup.eSciDoc.Tools.EScidocTools;
1aac45997235 first ingest
dwinter
parents:
diff changeset
34 import de.mpiwg.itgroup.eSciDoc.echoObjects.ECHORessource;
1aac45997235 first ingest
dwinter
parents:
diff changeset
35
1aac45997235 first ingest
dwinter
parents:
diff changeset
36
1aac45997235 first ingest
dwinter
parents:
diff changeset
37 public class OrigRefRedirector extends ServerResource{
1aac45997235 first ingest
dwinter
parents:
diff changeset
38
1aac45997235 first ingest
dwinter
parents:
diff changeset
39 private String eScidocServer;
1aac45997235 first ingest
dwinter
parents:
diff changeset
40 private String eScidocPort;
1aac45997235 first ingest
dwinter
parents:
diff changeset
41
1aac45997235 first ingest
dwinter
parents:
diff changeset
42 private String eScidocUser;
1aac45997235 first ingest
dwinter
parents:
diff changeset
43 private String eScidocUserPW;
1aac45997235 first ingest
dwinter
parents:
diff changeset
44 public OrigRefRedirector() throws IOException{
1aac45997235 first ingest
dwinter
parents:
diff changeset
45 InputStream is = getClass().getResourceAsStream("/de/mpiwg/itgroup/escidoc/MPIWGServices/Restlet/config/eScidocServer.config");
1aac45997235 first ingest
dwinter
parents:
diff changeset
46 Properties prop = new Properties();
1aac45997235 first ingest
dwinter
parents:
diff changeset
47 prop.load(is);
1aac45997235 first ingest
dwinter
parents:
diff changeset
48 eScidocServer= (String)prop.get("eScidocServer");
1aac45997235 first ingest
dwinter
parents:
diff changeset
49 eScidocPort=(String)prop.get("eScidocPort");
1aac45997235 first ingest
dwinter
parents:
diff changeset
50 eScidocUser=(String)prop.get("eScidocUser");
1aac45997235 first ingest
dwinter
parents:
diff changeset
51 eScidocUserPW=(String)prop.get("eScidocUserPW");
1aac45997235 first ingest
dwinter
parents:
diff changeset
52
1aac45997235 first ingest
dwinter
parents:
diff changeset
53 }
1aac45997235 first ingest
dwinter
parents:
diff changeset
54 @Get("html")
1aac45997235 first ingest
dwinter
parents:
diff changeset
55 public Representation getHtml() throws JDOMException, IOException, TransformerFactoryConfigurationError, TransformerException
1aac45997235 first ingest
dwinter
parents:
diff changeset
56 {
1aac45997235 first ingest
dwinter
parents:
diff changeset
57
1aac45997235 first ingest
dwinter
parents:
diff changeset
58 Form form = getRequest().getResourceRef().getQueryAsForm();
1aac45997235 first ingest
dwinter
parents:
diff changeset
59
1aac45997235 first ingest
dwinter
parents:
diff changeset
60 String mode=form.getValues("mode"); //xml or html default is html
2
ffeb8be0bded minor bugs / logging lib added
dwinter
parents: 0
diff changeset
61 if(mode==null || mode.equals(""))
0
1aac45997235 first ingest
dwinter
parents:
diff changeset
62 mode="xml";
1aac45997235 first ingest
dwinter
parents:
diff changeset
63
1aac45997235 first ingest
dwinter
parents:
diff changeset
64 String id = (String)getRequest().getAttributes().get("escidocId");
1aac45997235 first ingest
dwinter
parents:
diff changeset
65 EScidocBasicHandler handler = null;
1aac45997235 first ingest
dwinter
parents:
diff changeset
66 if (getContext().getAttributes().containsKey("escidocHandler")){
1aac45997235 first ingest
dwinter
parents:
diff changeset
67 handler = (EScidocBasicHandler) getContext().getAttributes().get("escidocHandler");
1aac45997235 first ingest
dwinter
parents:
diff changeset
68 }
1aac45997235 first ingest
dwinter
parents:
diff changeset
69
1aac45997235 first ingest
dwinter
parents:
diff changeset
70 if (handler==null){
1aac45997235 first ingest
dwinter
parents:
diff changeset
71 handler = new EScidocBasicHandler(eScidocServer, Integer.valueOf(eScidocPort),eScidocUser,eScidocUserPW);
1aac45997235 first ingest
dwinter
parents:
diff changeset
72 }
1aac45997235 first ingest
dwinter
parents:
diff changeset
73
1aac45997235 first ingest
dwinter
parents:
diff changeset
74
1aac45997235 first ingest
dwinter
parents:
diff changeset
75 HttpResponse resp;
1aac45997235 first ingest
dwinter
parents:
diff changeset
76 try {
1aac45997235 first ingest
dwinter
parents:
diff changeset
77 resp = handler.eScidocGet("/ir/item/"+id);
1aac45997235 first ingest
dwinter
parents:
diff changeset
78 } catch (IOException e) {
1aac45997235 first ingest
dwinter
parents:
diff changeset
79 setStatus(Status.SERVER_ERROR_INTERNAL);
1aac45997235 first ingest
dwinter
parents:
diff changeset
80 return new StringRepresentation("<html><body>error1</body></html>");
1aac45997235 first ingest
dwinter
parents:
diff changeset
81 }
1aac45997235 first ingest
dwinter
parents:
diff changeset
82 int code = resp.getStatusLine().getStatusCode();
1aac45997235 first ingest
dwinter
parents:
diff changeset
83 if (code!=200){
1aac45997235 first ingest
dwinter
parents:
diff changeset
84 setStatus(new Status(code));
1aac45997235 first ingest
dwinter
parents:
diff changeset
85 return new StringRepresentation("<html><body>error2</body></html>");
1aac45997235 first ingest
dwinter
parents:
diff changeset
86
1aac45997235 first ingest
dwinter
parents:
diff changeset
87 }
1aac45997235 first ingest
dwinter
parents:
diff changeset
88
1aac45997235 first ingest
dwinter
parents:
diff changeset
89 Document doc;
1aac45997235 first ingest
dwinter
parents:
diff changeset
90 String path;
1aac45997235 first ingest
dwinter
parents:
diff changeset
91 try {
1aac45997235 first ingest
dwinter
parents:
diff changeset
92 doc = new SAXBuilder().build(resp.getEntity().getContent());
1aac45997235 first ingest
dwinter
parents:
diff changeset
93
1aac45997235 first ingest
dwinter
parents:
diff changeset
94
1aac45997235 first ingest
dwinter
parents:
diff changeset
95 XPath xp= EScidocTools.getESciDocXpath("//metadataRecords:md-record[@xlink:title='mpiwg-admin']/mpiwg:admin/mpiwg:orig-ref/@xlink:href");
1aac45997235 first ingest
dwinter
parents:
diff changeset
96 Attribute item = (Attribute)xp.selectSingleNode(doc);
1aac45997235 first ingest
dwinter
parents:
diff changeset
97 path = item.getValue();
1aac45997235 first ingest
dwinter
parents:
diff changeset
98 } catch (Exception e) {
1aac45997235 first ingest
dwinter
parents:
diff changeset
99 setStatus(Status.SERVER_ERROR_INTERNAL);
1aac45997235 first ingest
dwinter
parents:
diff changeset
100 return new StringRepresentation("<html><body>error3</body></html>");
1aac45997235 first ingest
dwinter
parents:
diff changeset
101 }
1aac45997235 first ingest
dwinter
parents:
diff changeset
102
1aac45997235 first ingest
dwinter
parents:
diff changeset
103 if(mode.equals("xml"))
1aac45997235 first ingest
dwinter
parents:
diff changeset
104 {
1aac45997235 first ingest
dwinter
parents:
diff changeset
105 StringRepresentation repr = new StringRepresentation(path);
1aac45997235 first ingest
dwinter
parents:
diff changeset
106 getResponse().redirectPermanent(path);
1aac45997235 first ingest
dwinter
parents:
diff changeset
107 return repr;
1aac45997235 first ingest
dwinter
parents:
diff changeset
108 } else if (mode.equals("html")){
1aac45997235 first ingest
dwinter
parents:
diff changeset
109 Document indexMeta = new SAXBuilder().build(path);
1aac45997235 first ingest
dwinter
parents:
diff changeset
110 InputStream xslt= getClass().getResourceAsStream("/de/mpiwg/itgroup/escidoc/MPIWGServices/Restlet/staticPages/formatIndexMeta.xsl");
1aac45997235 first ingest
dwinter
parents:
diff changeset
111 //Document styleDoc = new SAXBuilder().build(xslt);
1aac45997235 first ingest
dwinter
parents:
diff changeset
112
1aac45997235 first ingest
dwinter
parents:
diff changeset
113 Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(xslt));
1aac45997235 first ingest
dwinter
parents:
diff changeset
114 JDOMSource inxml = new JDOMSource(indexMeta);
1aac45997235 first ingest
dwinter
parents:
diff changeset
115 JDOMResult out = new JDOMResult();
1aac45997235 first ingest
dwinter
parents:
diff changeset
116 transformer.transform(inxml, out);
1aac45997235 first ingest
dwinter
parents:
diff changeset
117 //logger.debug(printXML(doc));
1aac45997235 first ingest
dwinter
parents:
diff changeset
118
1aac45997235 first ingest
dwinter
parents:
diff changeset
119 Document docresult = out.getDocument();
1aac45997235 first ingest
dwinter
parents:
diff changeset
120 return new StringRepresentation(printXML(docresult),MediaType.TEXT_HTML);
1aac45997235 first ingest
dwinter
parents:
diff changeset
121 } else {
1aac45997235 first ingest
dwinter
parents:
diff changeset
122 setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
1aac45997235 first ingest
dwinter
parents:
diff changeset
123 return new StringRepresentation("<html><body>wrong value for parameter mode, only html or xml allowed.</body></html>");
1aac45997235 first ingest
dwinter
parents:
diff changeset
124 }
1aac45997235 first ingest
dwinter
parents:
diff changeset
125 }
1aac45997235 first ingest
dwinter
parents:
diff changeset
126
1aac45997235 first ingest
dwinter
parents:
diff changeset
127 public String printXML(Document dom) throws IOException{
1aac45997235 first ingest
dwinter
parents:
diff changeset
128 XMLOutputter out = new XMLOutputter();
1aac45997235 first ingest
dwinter
parents:
diff changeset
129
1aac45997235 first ingest
dwinter
parents:
diff changeset
130 String string = out.outputString(dom);
1aac45997235 first ingest
dwinter
parents:
diff changeset
131 return string;
1aac45997235 first ingest
dwinter
parents:
diff changeset
132 }
1aac45997235 first ingest
dwinter
parents:
diff changeset
133 }