annotate src/de/mpiwg/itgroup/escidoc/MPIWGServices/Restlet/services/redirect/ComponentURLRedirector.java @ 3:498b68667ff3

Neuer Mechanismus zum umleiten der Quellen.
author dwinter
date Fri, 20 Apr 2012 15:55:51 +0200
parents 1aac45997235
children
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
1aac45997235 first ingest
dwinter
parents:
diff changeset
4 import java.io.IOException;
1aac45997235 first ingest
dwinter
parents:
diff changeset
5 import java.io.InputStream;
1aac45997235 first ingest
dwinter
parents:
diff changeset
6 import java.util.Properties;
1aac45997235 first ingest
dwinter
parents:
diff changeset
7
1aac45997235 first ingest
dwinter
parents:
diff changeset
8 import org.apache.http.HttpResponse;
1aac45997235 first ingest
dwinter
parents:
diff changeset
9 import org.jdom.Attribute;
1aac45997235 first ingest
dwinter
parents:
diff changeset
10 import org.jdom.Document;
1aac45997235 first ingest
dwinter
parents:
diff changeset
11 import org.jdom.JDOMException;
1aac45997235 first ingest
dwinter
parents:
diff changeset
12 import org.jdom.input.SAXBuilder;
1aac45997235 first ingest
dwinter
parents:
diff changeset
13 import org.jdom.xpath.XPath;
1aac45997235 first ingest
dwinter
parents:
diff changeset
14 import org.restlet.data.Status;
1aac45997235 first ingest
dwinter
parents:
diff changeset
15 import org.restlet.representation.Representation;
1aac45997235 first ingest
dwinter
parents:
diff changeset
16 import org.restlet.representation.StringRepresentation;
1aac45997235 first ingest
dwinter
parents:
diff changeset
17 import org.restlet.resource.Get;
1aac45997235 first ingest
dwinter
parents:
diff changeset
18 import org.restlet.resource.ServerResource;
1aac45997235 first ingest
dwinter
parents:
diff changeset
19
1aac45997235 first ingest
dwinter
parents:
diff changeset
20 import de.mpiwg.itgroup.eSciDoc.Tools.EScidocBasicHandler;
1aac45997235 first ingest
dwinter
parents:
diff changeset
21 import de.mpiwg.itgroup.eSciDoc.Tools.EScidocTools;
1aac45997235 first ingest
dwinter
parents:
diff changeset
22
1aac45997235 first ingest
dwinter
parents:
diff changeset
23
1aac45997235 first ingest
dwinter
parents:
diff changeset
24 public class ComponentURLRedirector extends ServerResource{
1aac45997235 first ingest
dwinter
parents:
diff changeset
25
1aac45997235 first ingest
dwinter
parents:
diff changeset
26 private String eScidocServer;
1aac45997235 first ingest
dwinter
parents:
diff changeset
27 private String eScidocPort;
1aac45997235 first ingest
dwinter
parents:
diff changeset
28 private String content_cat;
1aac45997235 first ingest
dwinter
parents:
diff changeset
29 private String eScidocUser;
1aac45997235 first ingest
dwinter
parents:
diff changeset
30 private String eScidocUserPW;
1aac45997235 first ingest
dwinter
parents:
diff changeset
31
1aac45997235 first ingest
dwinter
parents:
diff changeset
32 public ComponentURLRedirector(String content_cat) throws IOException{
1aac45997235 first ingest
dwinter
parents:
diff changeset
33 this.content_cat = content_cat;
1aac45997235 first ingest
dwinter
parents:
diff changeset
34 InputStream is = getClass().getResourceAsStream("/de/mpiwg/itgroup/escidoc/MPIWGServices/Restlet/config/eScidocServer.config");
1aac45997235 first ingest
dwinter
parents:
diff changeset
35 Properties prop = new Properties();
1aac45997235 first ingest
dwinter
parents:
diff changeset
36 prop.load(is);
1aac45997235 first ingest
dwinter
parents:
diff changeset
37
1aac45997235 first ingest
dwinter
parents:
diff changeset
38 eScidocServer= (String)prop.get("eScidocServer");
1aac45997235 first ingest
dwinter
parents:
diff changeset
39 eScidocPort=(String)prop.get("eScidocPort");
1aac45997235 first ingest
dwinter
parents:
diff changeset
40 eScidocUser = (String)prop.get("eScidocUser");
1aac45997235 first ingest
dwinter
parents:
diff changeset
41 eScidocUserPW=(String)prop.get("eScidocUserPW");
1aac45997235 first ingest
dwinter
parents:
diff changeset
42
1aac45997235 first ingest
dwinter
parents:
diff changeset
43 }
1aac45997235 first ingest
dwinter
parents:
diff changeset
44 @Get("html")
1aac45997235 first ingest
dwinter
parents:
diff changeset
45 public Representation getHtml()
1aac45997235 first ingest
dwinter
parents:
diff changeset
46 {
1aac45997235 first ingest
dwinter
parents:
diff changeset
47 String id = (String)getRequest().getAttributes().get("escidocId");
1aac45997235 first ingest
dwinter
parents:
diff changeset
48 EScidocBasicHandler handler = null;
1aac45997235 first ingest
dwinter
parents:
diff changeset
49 if (getContext().getAttributes().containsKey("escidocHandler")){
1aac45997235 first ingest
dwinter
parents:
diff changeset
50 handler = (EScidocBasicHandler) getContext().getAttributes().get("escidocHandler");
1aac45997235 first ingest
dwinter
parents:
diff changeset
51 }
1aac45997235 first ingest
dwinter
parents:
diff changeset
52
1aac45997235 first ingest
dwinter
parents:
diff changeset
53 if (handler==null){
1aac45997235 first ingest
dwinter
parents:
diff changeset
54 handler = new EScidocBasicHandler(eScidocServer, Integer.valueOf(eScidocPort),eScidocUser,eScidocUserPW);
1aac45997235 first ingest
dwinter
parents:
diff changeset
55 }
1aac45997235 first ingest
dwinter
parents:
diff changeset
56
1aac45997235 first ingest
dwinter
parents:
diff changeset
57
1aac45997235 first ingest
dwinter
parents:
diff changeset
58 HttpResponse resp;
1aac45997235 first ingest
dwinter
parents:
diff changeset
59 try {
1aac45997235 first ingest
dwinter
parents:
diff changeset
60 resp = handler.eScidocGet("/ir/item/"+id);
1aac45997235 first ingest
dwinter
parents:
diff changeset
61 } catch (IOException e) {
1aac45997235 first ingest
dwinter
parents:
diff changeset
62 setStatus(Status.SERVER_ERROR_INTERNAL);
1aac45997235 first ingest
dwinter
parents:
diff changeset
63 return new StringRepresentation("<html><body>error1</body></html>");
1aac45997235 first ingest
dwinter
parents:
diff changeset
64 }
1aac45997235 first ingest
dwinter
parents:
diff changeset
65 int code = resp.getStatusLine().getStatusCode();
1aac45997235 first ingest
dwinter
parents:
diff changeset
66 if (code!=200){
1aac45997235 first ingest
dwinter
parents:
diff changeset
67 setStatus(new Status(code));
1aac45997235 first ingest
dwinter
parents:
diff changeset
68 return new StringRepresentation("<html><body>error2</body></html>");
1aac45997235 first ingest
dwinter
parents:
diff changeset
69
1aac45997235 first ingest
dwinter
parents:
diff changeset
70 }
1aac45997235 first ingest
dwinter
parents:
diff changeset
71
1aac45997235 first ingest
dwinter
parents:
diff changeset
72 Document doc;
1aac45997235 first ingest
dwinter
parents:
diff changeset
73 String url;
1aac45997235 first ingest
dwinter
parents:
diff changeset
74 try {
1aac45997235 first ingest
dwinter
parents:
diff changeset
75 doc = new SAXBuilder().build(resp.getEntity().getContent());
1aac45997235 first ingest
dwinter
parents:
diff changeset
76
1aac45997235 first ingest
dwinter
parents:
diff changeset
77
1aac45997235 first ingest
dwinter
parents:
diff changeset
78 XPath xp= EScidocTools.getESciDocXpath("//escidocComponents:component[escidocComponents:properties/prop:content-category[text()='"+content_cat+"']]/escidocComponents:content/@xlink:href");
1aac45997235 first ingest
dwinter
parents:
diff changeset
79 Attribute item = (Attribute)xp.selectSingleNode(doc);
1aac45997235 first ingest
dwinter
parents:
diff changeset
80 url = item.getValue();
1aac45997235 first ingest
dwinter
parents:
diff changeset
81
1aac45997235 first ingest
dwinter
parents:
diff changeset
82 } catch (Exception e) {
1aac45997235 first ingest
dwinter
parents:
diff changeset
83
3
498b68667ff3 Neuer Mechanismus zum umleiten der Quellen.
dwinter
parents: 0
diff changeset
84 if (content_cat.equals("display_url")) // wenn display und error dann versuche genrische anzeige der bilder
0
1aac45997235 first ingest
dwinter
parents:
diff changeset
85 {
1aac45997235 first ingest
dwinter
parents:
diff changeset
86 url="./images";
1aac45997235 first ingest
dwinter
parents:
diff changeset
87 StringRepresentation repr = new StringRepresentation(url);
1aac45997235 first ingest
dwinter
parents:
diff changeset
88 getResponse().redirectPermanent(url);
1aac45997235 first ingest
dwinter
parents:
diff changeset
89 return repr;
1aac45997235 first ingest
dwinter
parents:
diff changeset
90
1aac45997235 first ingest
dwinter
parents:
diff changeset
91 } else {
1aac45997235 first ingest
dwinter
parents:
diff changeset
92 setStatus(Status.SERVER_ERROR_INTERNAL);
1aac45997235 first ingest
dwinter
parents:
diff changeset
93
1aac45997235 first ingest
dwinter
parents:
diff changeset
94 return new StringRepresentation("<html><body>error3a</body></html>");
1aac45997235 first ingest
dwinter
parents:
diff changeset
95 }
1aac45997235 first ingest
dwinter
parents:
diff changeset
96 }
1aac45997235 first ingest
dwinter
parents:
diff changeset
97
1aac45997235 first ingest
dwinter
parents:
diff changeset
98
1aac45997235 first ingest
dwinter
parents:
diff changeset
99 if (!url.startsWith("http")) { // relative url
1aac45997235 first ingest
dwinter
parents:
diff changeset
100 url="http://"+eScidocServer+":"+eScidocPort+url;
1aac45997235 first ingest
dwinter
parents:
diff changeset
101 }
1aac45997235 first ingest
dwinter
parents:
diff changeset
102
1aac45997235 first ingest
dwinter
parents:
diff changeset
103 StringRepresentation repr = new StringRepresentation(url);
1aac45997235 first ingest
dwinter
parents:
diff changeset
104 getResponse().redirectPermanent(url);
1aac45997235 first ingest
dwinter
parents:
diff changeset
105 return repr;
1aac45997235 first ingest
dwinter
parents:
diff changeset
106 }
1aac45997235 first ingest
dwinter
parents:
diff changeset
107 }