annotate src/main/java/de/mpiwg/itgroup/annotationManager/restlet/AddAndReadAnnotations.java @ 26:235b91ba8dff

on the way to new annotations...
author casties
date Thu, 26 Apr 2012 11:44:57 +0200
parents a3e324009990
children e5f5848892a2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
dwinter
parents:
diff changeset
1 //TODO: handle XML-Post des Annoteaprotocolls http://www.w3.org/2001/Annotea/User/Protocol.html
dwinter
parents:
diff changeset
2
dwinter
parents:
diff changeset
3 package de.mpiwg.itgroup.annotationManager.restlet;
dwinter
parents:
diff changeset
4
dwinter
parents:
diff changeset
5 import java.io.IOException;
dwinter
parents:
diff changeset
6 import java.io.UnsupportedEncodingException;
dwinter
parents:
diff changeset
7 import java.net.URLDecoder;
dwinter
parents:
diff changeset
8 import java.net.URLEncoder;
dwinter
parents:
diff changeset
9 import java.util.ArrayList;
dwinter
parents:
diff changeset
10 import java.util.List;
dwinter
parents:
diff changeset
11 import java.util.regex.Matcher;
dwinter
parents:
diff changeset
12 import java.util.regex.Pattern;
dwinter
parents:
diff changeset
13
dwinter
parents:
diff changeset
14 import org.apache.log4j.Logger;
dwinter
parents:
diff changeset
15 import org.json.JSONArray;
dwinter
parents:
diff changeset
16 import org.json.JSONException;
dwinter
parents:
diff changeset
17 import org.json.JSONObject;
5
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
18 import org.restlet.Context;
0
dwinter
parents:
diff changeset
19 import org.restlet.data.ClientInfo;
dwinter
parents:
diff changeset
20 import org.restlet.data.Form;
dwinter
parents:
diff changeset
21 import org.restlet.data.MediaType;
dwinter
parents:
diff changeset
22 import org.restlet.data.Status;
dwinter
parents:
diff changeset
23 import org.restlet.ext.json.JsonRepresentation;
dwinter
parents:
diff changeset
24 import org.restlet.representation.Representation;
dwinter
parents:
diff changeset
25 import org.restlet.representation.StringRepresentation;
dwinter
parents:
diff changeset
26 import org.restlet.resource.Get;
dwinter
parents:
diff changeset
27 import org.restlet.resource.Options;
dwinter
parents:
diff changeset
28 import org.restlet.resource.Post;
dwinter
parents:
diff changeset
29 import org.restlet.resource.ServerResource;
dwinter
parents:
diff changeset
30 import org.restlet.security.User;
dwinter
parents:
diff changeset
31
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
32 import de.mpiwg.itgroup.annotationManager.Constants.NS;
0
dwinter
parents:
diff changeset
33 import de.mpiwg.itgroup.annotationManager.Errors.TripleStoreSearchError;
dwinter
parents:
diff changeset
34 import de.mpiwg.itgroup.annotationManager.Errors.TripleStoreStoreError;
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
35 import de.mpiwg.itgroup.annotationManager.RDFHandling.Annotation;
0
dwinter
parents:
diff changeset
36 import de.mpiwg.itgroup.annotationManager.RDFHandling.Convert;
dwinter
parents:
diff changeset
37 import de.mpiwg.itgroup.annotationManager.RDFHandling.RDFSearcher;
5
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
38 import de.mpiwg.itgroup.annotationManager.drupal.AnnotationHandler;
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
39 import de.mpiwg.itgroup.annotationManager.drupal.UnknowUserException;
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
40 import de.mpiwg.itgroup.triplestoremanager.exceptions.TripleStoreHandlerException;
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
41
0
dwinter
parents:
diff changeset
42
7
97f68ab3430f support both read and search api of Annotator.
casties
parents: 5
diff changeset
43 public class AddAndReadAnnotations extends ServerResource {
0
dwinter
parents:
diff changeset
44
dwinter
parents:
diff changeset
45 private Logger logger = Logger.getRootLogger();
dwinter
parents:
diff changeset
46
dwinter
parents:
diff changeset
47
dwinter
parents:
diff changeset
48
dwinter
parents:
diff changeset
49 @Options
dwinter
parents:
diff changeset
50 public void doOptions(Representation entity) {
dwinter
parents:
diff changeset
51 Form responseHeaders = (Form) getResponse().getAttributes().get(
dwinter
parents:
diff changeset
52 "org.restlet.http.headers");
dwinter
parents:
diff changeset
53 if (responseHeaders == null) {
dwinter
parents:
diff changeset
54 responseHeaders = new Form();
dwinter
parents:
diff changeset
55 getResponse().getAttributes().put("org.restlet.http.headers",
dwinter
parents:
diff changeset
56 responseHeaders);
dwinter
parents:
diff changeset
57 }
7
97f68ab3430f support both read and search api of Annotator.
casties
parents: 5
diff changeset
58 Form requestHeaders = (Form) getRequest().getAttributes().get("org.restlet.http.headers");
97f68ab3430f support both read and search api of Annotator.
casties
parents: 5
diff changeset
59 String origin = requestHeaders.getFirstValue("Origin", true);
97f68ab3430f support both read and search api of Annotator.
casties
parents: 5
diff changeset
60 if (origin == null) {
97f68ab3430f support both read and search api of Annotator.
casties
parents: 5
diff changeset
61 responseHeaders.add("Access-Control-Allow-Origin", "*");
97f68ab3430f support both read and search api of Annotator.
casties
parents: 5
diff changeset
62 } else {
97f68ab3430f support both read and search api of Annotator.
casties
parents: 5
diff changeset
63 responseHeaders.add("Access-Control-Allow-Origin", origin);
97f68ab3430f support both read and search api of Annotator.
casties
parents: 5
diff changeset
64 }
97f68ab3430f support both read and search api of Annotator.
casties
parents: 5
diff changeset
65 String allowHeaders = requestHeaders.getFirstValue("Access-Control-Request-Headers", true);
97f68ab3430f support both read and search api of Annotator.
casties
parents: 5
diff changeset
66 if (allowHeaders != null) {
97f68ab3430f support both read and search api of Annotator.
casties
parents: 5
diff changeset
67 responseHeaders.add("Access-Control-Allow-Headers", allowHeaders);
97f68ab3430f support both read and search api of Annotator.
casties
parents: 5
diff changeset
68 }
0
dwinter
parents:
diff changeset
69 responseHeaders.add("Access-Control-Allow-Methods", "POST,OPTIONS,GET");
7
97f68ab3430f support both read and search api of Annotator.
casties
parents: 5
diff changeset
70 responseHeaders.add("Access-Control-Allow-Credentials", "true");
0
dwinter
parents:
diff changeset
71 responseHeaders.add("Access-Control-Max-Age", "60");
dwinter
parents:
diff changeset
72 }
dwinter
parents:
diff changeset
73
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
74 @Get("html")
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
75 public Representation doGetHTML(Representation entity){
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
76
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
77 doOptions(entity);
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
78 Form form = getRequest().getResourceRef().getQueryAsForm();
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
79 String uri = form.getFirstValue("uri");
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
80 String user = form.getFirstValue("user");
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
81
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
82 String limit=form.getFirstValue("limit");
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
83 String offset=form.getFirstValue("offset");
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
84
5
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
85 try {
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
86 if (uri!=null){
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
87 uri = URLDecoder.decode(uri, "utf-8");
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
88 }
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
89 } catch (UnsupportedEncodingException e1) {
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
90 e1.printStackTrace();
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
91 setStatus(Status.CLIENT_ERROR_NOT_ACCEPTABLE);
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
92 return null;
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
93 }
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
94
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
95 //
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
96 RDFSearcher searcher = new RDFSearcher("file:///annotations"); //TODO should ge into config file
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
97
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
98 String retString="<html><body><table>";
3
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
99 String lineFormat="<tr><td><a href=\"%s\">%s</a></td>" +
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
100 "<td><a href=\"%s\">%s</a></td><td>%s</td><td>%s</td><td><a href=\"%s\">%s</a></td><td><a href=\"%s\">%s</a></td></div>";
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
101 try {
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
102
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
103 List<Annotation> annots=searcher.searchByUriUser(uri,user,limit,offset);
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
104
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
105 for (Annotation annot:annots){
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
106
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
107
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
108 RestServer restServer = (RestServer) getApplication();
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
109 String userName=restServer.getUserNameFromLdap(annot.creator);
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
110 List<String> xpointer = new ArrayList<String>();
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
111
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
112 if (annot.xpointers==null || annot.xpointers.size()==0)
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
113 retString+=String.format(lineFormat, userName,userName,annot.url,annot.url,annot.time,annot.text,annot.xpointer,annot.xpointer,annot.getAnnotationUri(),annot.getAnnotationUri());
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
114 else {
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
115 for(String xpointerString:annot.xpointers){
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
116 retString+=String.format(lineFormat, userName,userName,annot.url,annot.url,annot.time,annot.text,xpointerString,xpointerString,annot.getAnnotationUri(),annot.getAnnotationUri());
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
117 }
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
118 }
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
119
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
120 }
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
121 } catch (TripleStoreHandlerException e) {
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
122 // TODO Auto-generated catch block
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
123 e.printStackTrace();
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
124 setStatus(Status.SERVER_ERROR_INTERNAL,"TripleStoreHandler Error");
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
125 return null;
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
126 } catch (TripleStoreSearchError e) {
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
127 // TODO Auto-generated catch block
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
128 e.printStackTrace();
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
129 setStatus(Status.SERVER_ERROR_INTERNAL,"TripleStoreSearch Error");
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
130 return null;
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
131 }
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
132
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
133 retString+="</table></body></html>";
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
134
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
135 logger.debug("sending:");
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
136 logger.debug(retString);
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
137 return new StringRepresentation(retString,MediaType.TEXT_HTML);
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
138 }
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
139
3
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
140 /**
7
97f68ab3430f support both read and search api of Annotator.
casties
parents: 5
diff changeset
141 * Erzeugt aus einer Annotation, das f�r den Annotator notwendige JSON-Format
3
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
142 * @param annot
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
143 * @return
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
144 */
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
145 public JSONObject annot2AnnotatorJSON(Annotation annot){
3
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
146 JSONObject jo = new JSONObject();
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
147 try {
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
148 jo.put("text", annot.text);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
149 jo.put("uri",annot.url);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
150
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
151 JSONObject userObject= new JSONObject();
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
152 userObject.put("id",annot.creator);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
153
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
154 RestServer restServer = (RestServer) getApplication();
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
155
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
156 String userID= annot.creator;
26
235b91ba8dff on the way to new annotations...
casties
parents: 23
diff changeset
157 if (userID.startsWith(NS.MPIWG_PERSONS_URL)){
235b91ba8dff on the way to new annotations...
casties
parents: 23
diff changeset
158 userID=userID.replace(NS.MPIWG_PERSONS_URL, ""); //entferne NAMESPACE
3
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
159 }
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
160 String userName=restServer.getUserNameFromLdap(userID);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
161 userObject.put("name",userName);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
162
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
163 jo.put("user",userObject);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
164
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
165 List<String> xpointer = new ArrayList<String>();
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
166
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
167 if (annot.xpointers==null || annot.xpointers.size()==0)
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
168 xpointer.add(annot.xpointer);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
169 else {
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
170 for(String xpointerString:annot.xpointers){
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
171 xpointer.add(xpointerString);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
172 }
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
173 }
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
174 jo.put("ranges", transformToRanges(xpointer));
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
175 jo.put("id", annot.getAnnotationUri());
3
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
176 return jo;
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
177 } catch (JSONException e) {
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
178 // TODO Auto-generated catch block
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
179 e.printStackTrace();
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
180 return null;
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
181 }
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
182 }
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
183
0
dwinter
parents:
diff changeset
184 @Get("json")
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
185 public Representation doGetJSON(Representation entity){
0
dwinter
parents:
diff changeset
186
dwinter
parents:
diff changeset
187 doOptions(entity);
7
97f68ab3430f support both read and search api of Annotator.
casties
parents: 5
diff changeset
188 //TODO: Annotator read request does not use parameters
0
dwinter
parents:
diff changeset
189 Form form = getRequest().getResourceRef().getQueryAsForm();
dwinter
parents:
diff changeset
190 String uri = form.getFirstValue("uri");
dwinter
parents:
diff changeset
191 String user = form.getFirstValue("user");
dwinter
parents:
diff changeset
192
dwinter
parents:
diff changeset
193 String limit=form.getFirstValue("limit");
dwinter
parents:
diff changeset
194 String offset=form.getFirstValue("offset");
dwinter
parents:
diff changeset
195
dwinter
parents:
diff changeset
196
dwinter
parents:
diff changeset
197 //
dwinter
parents:
diff changeset
198 RDFSearcher searcher = new RDFSearcher("file:///annotations"); //TODO should ge into config file
dwinter
parents:
diff changeset
199
dwinter
parents:
diff changeset
200 JSONArray ja;
dwinter
parents:
diff changeset
201 try {
dwinter
parents:
diff changeset
202
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
203 List<Annotation> annots=searcher.searchByUriUser(uri,user,limit,offset);
0
dwinter
parents:
diff changeset
204
dwinter
parents:
diff changeset
205 ja = new JSONArray();
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
206 for (Annotation annot:annots){
3
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
207 // JSONObject jo = new JSONObject();
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
208 // jo.put("text", annot.text);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
209 // jo.put("uri",annot.url);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
210 //
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
211 // JSONObject userObject= new JSONObject();
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
212 // userObject.put("id",annot.creator);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
213 //
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
214 // RestServer restServer = (RestServer) getApplication();
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
215 //
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
216 // String userID= annot.creator;
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
217 // if (userID.startsWith(NS.MPIWG_PERSONS)){
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
218 // userID=userID.replace(NS.MPIWG_PERSONS, ""); //entferne NAMESPACE
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
219 // }
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
220 // String userName=restServer.getUserNameFromLdap(userID);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
221 // userObject.put("name",userName);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
222 //
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
223 // jo.put("user",userObject);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
224 //
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
225 // List<String> xpointer = new ArrayList<String>();
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
226 //
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
227 // if (annot.xpointers==null || annot.xpointers.size()==0)
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
228 // xpointer.add(annot.xpointer);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
229 // else {
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
230 // for(String xpointerString:annot.xpointers){
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
231 // xpointer.add(xpointerString);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
232 // }
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
233 // }
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
234 // jo.put("ranges", transformToRanges(xpointer));
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
235 JSONObject jo = annot2AnnotatorJSON(annot);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
236 if (jo!=null){
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
237 ja.put(annot2AnnotatorJSON(annot));
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
238 } else {
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
239 setStatus(Status.SERVER_ERROR_INTERNAL,"JSon Error");
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
240 return null;
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
241 }
0
dwinter
parents:
diff changeset
242 }
dwinter
parents:
diff changeset
243 } catch (TripleStoreHandlerException e) {
dwinter
parents:
diff changeset
244 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
245 e.printStackTrace();
dwinter
parents:
diff changeset
246 setStatus(Status.SERVER_ERROR_INTERNAL,"TripleStoreHandler Error");
dwinter
parents:
diff changeset
247 return null;
dwinter
parents:
diff changeset
248 } catch (TripleStoreSearchError e) {
dwinter
parents:
diff changeset
249 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
250 e.printStackTrace();
dwinter
parents:
diff changeset
251 setStatus(Status.SERVER_ERROR_INTERNAL,"TripleStoreSearch Error");
dwinter
parents:
diff changeset
252 return null;
3
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
253 }
0
dwinter
parents:
diff changeset
254
7
97f68ab3430f support both read and search api of Annotator.
casties
parents: 5
diff changeset
255 // annotator read request returns a list of annotation objects
0
dwinter
parents:
diff changeset
256 logger.debug("sending:");
7
97f68ab3430f support both read and search api of Annotator.
casties
parents: 5
diff changeset
257 logger.debug(ja);
97f68ab3430f support both read and search api of Annotator.
casties
parents: 5
diff changeset
258 return new JsonRepresentation(ja);
0
dwinter
parents:
diff changeset
259 }
dwinter
parents:
diff changeset
260
dwinter
parents:
diff changeset
261 private JSONArray transformToRanges(List<String> xpointers) {
dwinter
parents:
diff changeset
262
dwinter
parents:
diff changeset
263 JSONArray ja = new JSONArray();
dwinter
parents:
diff changeset
264
dwinter
parents:
diff changeset
265 Pattern rg = Pattern.compile("#xpointer\\(start-point\\(string-range\\(\"([^\"]*)\",([^,]*),1\\)\\)/range-to\\(end-point\\(string-range\\(\"([^\"]*)\",([^,]*),1\\)\\)\\)\\)");
dwinter
parents:
diff changeset
266 Pattern rg1 = Pattern.compile("#xpointer\\(start-point\\(string-range\\(\"([^\"]*)\",([^,]*),1\\)\\)\\)");
dwinter
parents:
diff changeset
267
dwinter
parents:
diff changeset
268
dwinter
parents:
diff changeset
269
dwinter
parents:
diff changeset
270 try {
dwinter
parents:
diff changeset
271 for(String xpointer:xpointers){
dwinter
parents:
diff changeset
272 String decoded =URLDecoder.decode(xpointer,"utf-8");
dwinter
parents:
diff changeset
273 Matcher m=rg.matcher(decoded);
1
f2f41d0dedf5 minimal changes
dwinter
parents: 0
diff changeset
274
f2f41d0dedf5 minimal changes
dwinter
parents: 0
diff changeset
275 if (m.find()){
0
dwinter
parents:
diff changeset
276 {
dwinter
parents:
diff changeset
277 JSONObject jo = new JSONObject();
dwinter
parents:
diff changeset
278 jo.put("start", m.group(1));
dwinter
parents:
diff changeset
279 jo.put("startOffset", m.group(2));
dwinter
parents:
diff changeset
280 jo.put("end", m.group(3));
dwinter
parents:
diff changeset
281 jo.put("endOffset", m.group(4));
dwinter
parents:
diff changeset
282 ja.put(jo);
1
f2f41d0dedf5 minimal changes
dwinter
parents: 0
diff changeset
283 }
0
dwinter
parents:
diff changeset
284 }
dwinter
parents:
diff changeset
285 m=rg1.matcher(xpointer);
1
f2f41d0dedf5 minimal changes
dwinter
parents: 0
diff changeset
286 if (m.find()){
0
dwinter
parents:
diff changeset
287 JSONObject jo = new JSONObject();
dwinter
parents:
diff changeset
288 jo.put("start", m.group(1));
dwinter
parents:
diff changeset
289 jo.put("startOffset", m.group(2));
dwinter
parents:
diff changeset
290
dwinter
parents:
diff changeset
291 ja.put(jo);
dwinter
parents:
diff changeset
292 }
dwinter
parents:
diff changeset
293
dwinter
parents:
diff changeset
294
dwinter
parents:
diff changeset
295 }
dwinter
parents:
diff changeset
296 } catch (JSONException e) {
dwinter
parents:
diff changeset
297 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
298 e.printStackTrace();
dwinter
parents:
diff changeset
299 } catch (UnsupportedEncodingException e) {
dwinter
parents:
diff changeset
300 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
301 e.printStackTrace();
dwinter
parents:
diff changeset
302 }
dwinter
parents:
diff changeset
303
dwinter
parents:
diff changeset
304
dwinter
parents:
diff changeset
305 return ja;
dwinter
parents:
diff changeset
306
dwinter
parents:
diff changeset
307
dwinter
parents:
diff changeset
308
dwinter
parents:
diff changeset
309
dwinter
parents:
diff changeset
310
dwinter
parents:
diff changeset
311 }
dwinter
parents:
diff changeset
312
3
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
313
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
314 /**
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
315 *
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
316 * json hash: username: name des users xpointer: xpointer auf den Ausschnitt
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
317 * (incl. der URL des Dokumentes) text: text der annotation annoturl: url
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
318 * auf eine Annotation falls extern
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
319 *
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
320 * @return
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
321 */
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
322
0
dwinter
parents:
diff changeset
323 @Post("json")
dwinter
parents:
diff changeset
324 public Representation doPostJson(Representation entity) {
dwinter
parents:
diff changeset
325
3
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
326 Annotation retVal = doPost(entity);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
327
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
328
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
329 // JSONObject jo;
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
330 // try {
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
331 // jo = new JSONObject("{\"annotUrl\":\"" + retVal + "\"}");
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
332 // } catch (JSONException e) {
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
333 // setStatus(Status.SERVER_ERROR_INTERNAL);
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
334 // return null;
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
335 // }
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
336
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
337 if (retVal==null)
0
dwinter
parents:
diff changeset
338 return null;
3
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
339 JSONObject jo = annot2AnnotatorJSON(retVal);
0
dwinter
parents:
diff changeset
340 JsonRepresentation retRep = new JsonRepresentation(jo);
dwinter
parents:
diff changeset
341 return retRep;
dwinter
parents:
diff changeset
342 }
dwinter
parents:
diff changeset
343
dwinter
parents:
diff changeset
344 @Post("html")
dwinter
parents:
diff changeset
345 public Representation doPostHtml(Representation entity) {
3
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
346 Annotation retValAnnot = doPost(entity);
5
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
347 if (retValAnnot == null) {
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
348 return null;
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
349 }
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
350
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
351
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
352 String retVal=retValAnnot.getAnnotationUri();
0
dwinter
parents:
diff changeset
353 if (retVal == null) {
dwinter
parents:
diff changeset
354 return null;
dwinter
parents:
diff changeset
355 }
5
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
356
0
dwinter
parents:
diff changeset
357 String text = String.format(
dwinter
parents:
diff changeset
358 "<html><body><a href=\"%s\">%s</a></body></html>", retVal
dwinter
parents:
diff changeset
359 .replace(">", "").replace("<", ""),
dwinter
parents:
diff changeset
360 retVal.replace(">", "&gt;").replace("<", "&lt;"));
dwinter
parents:
diff changeset
361 Representation retRep = new StringRepresentation(text,
dwinter
parents:
diff changeset
362 MediaType.TEXT_HTML);
dwinter
parents:
diff changeset
363 return retRep;
dwinter
parents:
diff changeset
364 }
dwinter
parents:
diff changeset
365
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
366 public Annotation doPost(Representation entity) {
3
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
367
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
368 doOptions(entity);
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
369 Annotation annot;
0
dwinter
parents:
diff changeset
370 // versuche basic authentifizierung und hole den Benutzer von dort.
dwinter
parents:
diff changeset
371
dwinter
parents:
diff changeset
372 // User authUser;= handleBasicAuthentification(entity);
dwinter
parents:
diff changeset
373
dwinter
parents:
diff changeset
374 if (entity.getMediaType().equals(MediaType.APPLICATION_JSON)) {
dwinter
parents:
diff changeset
375
dwinter
parents:
diff changeset
376 JsonRepresentation jrep;
dwinter
parents:
diff changeset
377 try {
dwinter
parents:
diff changeset
378 jrep = new JsonRepresentation(entity);
dwinter
parents:
diff changeset
379 } catch (IOException e1) {
dwinter
parents:
diff changeset
380 setStatus(Status.SERVER_ERROR_INTERNAL);
dwinter
parents:
diff changeset
381 return null;
dwinter
parents:
diff changeset
382 }
dwinter
parents:
diff changeset
383
dwinter
parents:
diff changeset
384 // try {
dwinter
parents:
diff changeset
385 // logger.debug(jrep.getText());
dwinter
parents:
diff changeset
386 // } catch (IOException e1) {
dwinter
parents:
diff changeset
387 // // TODO Auto-generated catch block
dwinter
parents:
diff changeset
388 // e1.printStackTrace();
dwinter
parents:
diff changeset
389 // }
dwinter
parents:
diff changeset
390 //
dwinter
parents:
diff changeset
391
dwinter
parents:
diff changeset
392 try {
dwinter
parents:
diff changeset
393 JSONObject jo = jrep.getJsonObject();
4
c32080f364c6 minor bugs
dwinter
parents: 3
diff changeset
394 if(jo==null){
c32080f364c6 minor bugs
dwinter
parents: 3
diff changeset
395 setStatus(Status.SERVER_ERROR_INTERNAL);
c32080f364c6 minor bugs
dwinter
parents: 3
diff changeset
396 return null;
c32080f364c6 minor bugs
dwinter
parents: 3
diff changeset
397 }
c32080f364c6 minor bugs
dwinter
parents: 3
diff changeset
398
c32080f364c6 minor bugs
dwinter
parents: 3
diff changeset
399 String mode=null;
c32080f364c6 minor bugs
dwinter
parents: 3
diff changeset
400 if(jo.has("mode")){
c32080f364c6 minor bugs
dwinter
parents: 3
diff changeset
401 mode = jo.getString("mode"); // hole modus
c32080f364c6 minor bugs
dwinter
parents: 3
diff changeset
402 }
0
dwinter
parents:
diff changeset
403 if (mode==null || mode.equals(""))
dwinter
parents:
diff changeset
404 mode="annotea"; // default mode (annotea) TODO make this configurable
dwinter
parents:
diff changeset
405
dwinter
parents:
diff changeset
406 if (mode.equals("annotator") ) { // annotator format
dwinter
parents:
diff changeset
407 annot = handleAnnotatorSchema(jo, entity);
dwinter
parents:
diff changeset
408 logger.debug("storing annotator object");
dwinter
parents:
diff changeset
409 logger.debug(jo);
dwinter
parents:
diff changeset
410 } else if (mode.equals("annotea")){
dwinter
parents:
diff changeset
411 annot = handleAnnotea(jo, entity);
dwinter
parents:
diff changeset
412 } else {
dwinter
parents:
diff changeset
413 setStatus(Status.CLIENT_ERROR_BAD_REQUEST,"mode "+mode+"not supported!");
dwinter
parents:
diff changeset
414 return null;
dwinter
parents:
diff changeset
415 }
dwinter
parents:
diff changeset
416
dwinter
parents:
diff changeset
417 } catch (JSONException e) {
dwinter
parents:
diff changeset
418 setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
dwinter
parents:
diff changeset
419 return null;
dwinter
parents:
diff changeset
420 }
dwinter
parents:
diff changeset
421
dwinter
parents:
diff changeset
422 } else if (entity.getMediaType().equals(MediaType.APPLICATION_WWW_FORM)) {
dwinter
parents:
diff changeset
423 annot = handleForm(entity);
dwinter
parents:
diff changeset
424
dwinter
parents:
diff changeset
425 } else {
dwinter
parents:
diff changeset
426 setStatus(Status.CLIENT_ERROR_UNSUPPORTED_MEDIA_TYPE);
dwinter
parents:
diff changeset
427
dwinter
parents:
diff changeset
428 return null;
dwinter
parents:
diff changeset
429 }
dwinter
parents:
diff changeset
430
dwinter
parents:
diff changeset
431 if (annot==null){
dwinter
parents:
diff changeset
432 return null;
dwinter
parents:
diff changeset
433 }
dwinter
parents:
diff changeset
434 if (annot.xpointer == null || annot.creator == null) {
dwinter
parents:
diff changeset
435 setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
dwinter
parents:
diff changeset
436
dwinter
parents:
diff changeset
437 return null;
dwinter
parents:
diff changeset
438 }
dwinter
parents:
diff changeset
439
dwinter
parents:
diff changeset
440
dwinter
parents:
diff changeset
441
dwinter
parents:
diff changeset
442 try {
dwinter
parents:
diff changeset
443 return new Convert("file:///annotations").storeAnnotation(annot);
dwinter
parents:
diff changeset
444 } catch (TripleStoreStoreError e) {
dwinter
parents:
diff changeset
445 e.printStackTrace();
dwinter
parents:
diff changeset
446 setStatus(Status.SERVER_ERROR_INTERNAL, "TripleStore Error");
dwinter
parents:
diff changeset
447 return null;
dwinter
parents:
diff changeset
448 }
dwinter
parents:
diff changeset
449 }
dwinter
parents:
diff changeset
450
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
451
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
452 /**
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
453 *
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
454 * @param entity should contain a form with the parameters "username", "password", "xpointer","text","uri","type"
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
455 *
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
456 * username,password is optional, if not given BasicAuthentification is used.
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
457 *
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
458 *
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
459 *
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
460 * If username given as a URI, the username will be transformed to an URI, username will be added to the MPIWG namespace defined in de.mpiwg.itgroup.annotationManager.Constants.NS
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
461 *
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
462 * @return
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
463 */
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
464 protected Annotation handleForm(Representation entity) {
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
465 Annotation annot;
0
dwinter
parents:
diff changeset
466 Form form = new Form(entity);
dwinter
parents:
diff changeset
467 String username = form.getValues("username");
5
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
468 String mode = form.getValues("mode");
0
dwinter
parents:
diff changeset
469 String password = form.getValues("password");
dwinter
parents:
diff changeset
470 String xpointer = form.getValues("xpointer");
dwinter
parents:
diff changeset
471 String text = form.getValues("text");
5
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
472 String title = form.getValues("title");
0
dwinter
parents:
diff changeset
473 String url = form.getValues("url");
dwinter
parents:
diff changeset
474 String type = form.getValues("type");
dwinter
parents:
diff changeset
475 RestServer restServer = (RestServer) getApplication();
dwinter
parents:
diff changeset
476
dwinter
parents:
diff changeset
477 // falls user and password nicht null sind:
dwinter
parents:
diff changeset
478 User userFromForm = null;
dwinter
parents:
diff changeset
479 if (username != null && password != null) {
dwinter
parents:
diff changeset
480 if (restServer.authenticate(username, password, getRequest())) {
dwinter
parents:
diff changeset
481 userFromForm = new User(username);
dwinter
parents:
diff changeset
482 }
dwinter
parents:
diff changeset
483 }
dwinter
parents:
diff changeset
484 User authUser = null;
dwinter
parents:
diff changeset
485
dwinter
parents:
diff changeset
486 if (userFromForm == null) {
dwinter
parents:
diff changeset
487 authUser = handleBasicAuthentification(entity);
dwinter
parents:
diff changeset
488 }
dwinter
parents:
diff changeset
489
dwinter
parents:
diff changeset
490 // weder BasicAuth noch FormAuth
dwinter
parents:
diff changeset
491 if (authUser == null && userFromForm == null) {
dwinter
parents:
diff changeset
492 setStatus(Status.CLIENT_ERROR_FORBIDDEN);
dwinter
parents:
diff changeset
493 return null;
dwinter
parents:
diff changeset
494 }
dwinter
parents:
diff changeset
495
dwinter
parents:
diff changeset
496 if (userFromForm != null) {
dwinter
parents:
diff changeset
497 username = userFromForm.getIdentifier();
dwinter
parents:
diff changeset
498 } else {
dwinter
parents:
diff changeset
499 username = authUser.getIdentifier();
dwinter
parents:
diff changeset
500 }
dwinter
parents:
diff changeset
501
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
502 //username should be a URI, if not it will set to the MPIWG namespace defined in de.mpiwg.itgroup.annotationManager.Constants.NS
5
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
503 String usernameOrig=username;
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
504 if (!username.startsWith("http"))
26
235b91ba8dff on the way to new annotations...
casties
parents: 23
diff changeset
505 username=NS.MPIWG_PERSONS_URL+username;
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
506
5
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
507 if (mode.equals("complexAnnotation")){// Annotation mit text in externer ressource
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
508
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
509 Context context = getContext();
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
510 String drupalPath = context.getParameters().getFirstValue("de.mpiwg.itgroup.annotationManager.drupalServer");
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
511
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
512
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
513 AnnotationHandler ah = new AnnotationHandler(drupalPath);
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
514 JSONObject newAnnot;
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
515 try {
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
516 newAnnot = ah.createAnnotation(title, text, usernameOrig, password);
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
517 } catch (UnknowUserException e1) {
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
518 setStatus(Status.CLIENT_ERROR_FORBIDDEN);
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
519 e1.printStackTrace();
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
520 return null;
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
521 }
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
522 try {
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
523 annot= new Annotation(xpointer, username, null, text, type, newAnnot.getString("node_uri"));
5
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
524 } catch (JSONException e) {
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
525 // TODO Auto-generated catch block
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
526 e.printStackTrace();
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
527 setStatus(Status.SERVER_ERROR_INTERNAL);
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
528 return null;
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
529 }
0be9d53a6967 editor for annotations
dwinter
parents: 4
diff changeset
530 } else
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
531 annot = new Annotation(xpointer, username, null, text,
0
dwinter
parents:
diff changeset
532 type, url);
dwinter
parents:
diff changeset
533 return annot;
dwinter
parents:
diff changeset
534 }
dwinter
parents:
diff changeset
535
dwinter
parents:
diff changeset
536 @Post
dwinter
parents:
diff changeset
537 public Representation doPostHtml2(Representation entity) {
dwinter
parents:
diff changeset
538 return doPostHtml(entity);
dwinter
parents:
diff changeset
539 }
dwinter
parents:
diff changeset
540
dwinter
parents:
diff changeset
541 private User handleBasicAuthentification(Representation entity) {
dwinter
parents:
diff changeset
542 RestServer restServer = (RestServer) getApplication();
dwinter
parents:
diff changeset
543 if (!restServer.authenticate(getRequest(), getResponse())) {
dwinter
parents:
diff changeset
544 // Not authenticated
dwinter
parents:
diff changeset
545 return null;
dwinter
parents:
diff changeset
546 }
dwinter
parents:
diff changeset
547
dwinter
parents:
diff changeset
548 ClientInfo ci = getRequest().getClientInfo();
dwinter
parents:
diff changeset
549 logger.debug(ci);
dwinter
parents:
diff changeset
550 return getRequest().getClientInfo().getUser();
dwinter
parents:
diff changeset
551
dwinter
parents:
diff changeset
552 }
dwinter
parents:
diff changeset
553
dwinter
parents:
diff changeset
554 /**
dwinter
parents:
diff changeset
555 * using a minimal annotation format based on the annotea specification
dwinter
parents:
diff changeset
556 *
dwinter
parents:
diff changeset
557 * @param jo
dwinter
parents:
diff changeset
558 * must contain xpointer, text,url,type and can contain a
dwinter
parents:
diff changeset
559 * username, if not the username form the authentification will
dwinter
parents:
diff changeset
560 * be used.
dwinter
parents:
diff changeset
561 * @param authUser
dwinter
parents:
diff changeset
562 * user object
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
563 * The username will be transformed to an URI if not given already as URI, if not it will set to the MPIWG namespace defined in de.mpiwg.itgroup.annotationManager.Constants.NS
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
564
0
dwinter
parents:
diff changeset
565 * @return
dwinter
parents:
diff changeset
566 * @throws JSONException
dwinter
parents:
diff changeset
567 */
dwinter
parents:
diff changeset
568 public Annotation handleAnnotea(JSONObject jo, Representation entity)
dwinter
parents:
diff changeset
569 throws JSONException {
dwinter
parents:
diff changeset
570
dwinter
parents:
diff changeset
571 User authUser = handleBasicAuthentification(entity);
dwinter
parents:
diff changeset
572 String username = jo.getString("username"); // not required, if no
dwinter
parents:
diff changeset
573 // username given authuser
dwinter
parents:
diff changeset
574 // will be used.
dwinter
parents:
diff changeset
575 String xpointer = jo.getString("xpointer");
dwinter
parents:
diff changeset
576 String text = null;
dwinter
parents:
diff changeset
577 if (jo.has("text"))
dwinter
parents:
diff changeset
578 text = jo.getString("text");
dwinter
parents:
diff changeset
579
dwinter
parents:
diff changeset
580 String url = null;
dwinter
parents:
diff changeset
581 if (jo.has("url"))
dwinter
parents:
diff changeset
582 url = jo.getString("url");
dwinter
parents:
diff changeset
583
dwinter
parents:
diff changeset
584 String type = null;
dwinter
parents:
diff changeset
585 if (jo.has("type"))
dwinter
parents:
diff changeset
586 type = jo.getString("type");
dwinter
parents:
diff changeset
587
dwinter
parents:
diff changeset
588 if (username == null)
dwinter
parents:
diff changeset
589 username = authUser.getIdentifier();
dwinter
parents:
diff changeset
590
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
591 //username should be a URI, if not it will set to the MPIWG namespace defined in de.mpiwg.itgroup.annotationManager.Constants.NS
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
592 if (!username.startsWith("http"))
26
235b91ba8dff on the way to new annotations...
casties
parents: 23
diff changeset
593 username=NS.MPIWG_PERSONS_URL+username;
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
594
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
595 return new Annotation(xpointer, username, null, text, type, url);
0
dwinter
parents:
diff changeset
596 }
dwinter
parents:
diff changeset
597
dwinter
parents:
diff changeset
598 /**
dwinter
parents:
diff changeset
599 * uses the specification from the annotator project.
dwinter
parents:
diff changeset
600 *
3
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
601 * @see{https://github.com/okfn/annotator/wiki/Annotation-format} The user
0
dwinter
parents:
diff changeset
602 * object must
dwinter
parents:
diff changeset
603 * contain an
dwinter
parents:
diff changeset
604 * id and
dwinter
parents:
diff changeset
605 * password or
dwinter
parents:
diff changeset
606 * basic
dwinter
parents:
diff changeset
607 * authentification
dwinter
parents:
diff changeset
608 * is used.
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
609 * The username will be transformed to an URI if not given already as URI, if not it will set to the MPIWG namespace defined in de.mpiwg.itgroup.annotationManager.Constants.NS
0
dwinter
parents:
diff changeset
610 * @param jo
dwinter
parents:
diff changeset
611 * @param authUser
dwinter
parents:
diff changeset
612 * @return
dwinter
parents:
diff changeset
613 * @throws JSONException
dwinter
parents:
diff changeset
614 */
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
615 public Annotation handleAnnotatorSchema(JSONObject jo,
0
dwinter
parents:
diff changeset
616 Representation entity) throws JSONException {
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
617 Annotation annot;
0
dwinter
parents:
diff changeset
618 String url = jo.getString("uri");
dwinter
parents:
diff changeset
619 String text = jo.getString("text");
dwinter
parents:
diff changeset
620
dwinter
parents:
diff changeset
621 String username = null;
dwinter
parents:
diff changeset
622 if (jo.has("user")) { // not required, if no username given authuser
dwinter
parents:
diff changeset
623 // will be used otherwise username and password
dwinter
parents:
diff changeset
624 // has to be submitted
dwinter
parents:
diff changeset
625 JSONObject user = jo.getJSONObject("user");
dwinter
parents:
diff changeset
626 if (user.has("id")) {
dwinter
parents:
diff changeset
627 username = user.getString("id");
dwinter
parents:
diff changeset
628 if(!user.has("password")){
dwinter
parents:
diff changeset
629 User authUser = handleBasicAuthentification(entity);
dwinter
parents:
diff changeset
630 if (authUser==null){
dwinter
parents:
diff changeset
631 setStatus(Status.CLIENT_ERROR_FORBIDDEN);
dwinter
parents:
diff changeset
632 return null;
dwinter
parents:
diff changeset
633 }
dwinter
parents:
diff changeset
634 username = authUser.getIdentifier();
dwinter
parents:
diff changeset
635 } else {
dwinter
parents:
diff changeset
636 String password = user.getString("password");
dwinter
parents:
diff changeset
637 if (!((RestServer) getApplication()).authenticate(username,
dwinter
parents:
diff changeset
638 password, getRequest())) {
dwinter
parents:
diff changeset
639 setStatus(Status.CLIENT_ERROR_FORBIDDEN);
dwinter
parents:
diff changeset
640 return null;
dwinter
parents:
diff changeset
641 }
dwinter
parents:
diff changeset
642 }
dwinter
parents:
diff changeset
643 }
dwinter
parents:
diff changeset
644
dwinter
parents:
diff changeset
645 } else {
dwinter
parents:
diff changeset
646 User authUser = handleBasicAuthentification(entity);
dwinter
parents:
diff changeset
647 if (authUser == null) {
dwinter
parents:
diff changeset
648 setStatus(Status.CLIENT_ERROR_FORBIDDEN);
dwinter
parents:
diff changeset
649 return null;
dwinter
parents:
diff changeset
650 }
dwinter
parents:
diff changeset
651 username = authUser.getIdentifier();
dwinter
parents:
diff changeset
652 }
dwinter
parents:
diff changeset
653
dwinter
parents:
diff changeset
654 String xpointer;
dwinter
parents:
diff changeset
655 if (jo.has("ranges")) {
dwinter
parents:
diff changeset
656 JSONObject ranges = jo.getJSONArray("ranges").getJSONObject(0);
dwinter
parents:
diff changeset
657 String start = ranges.getString("start");
dwinter
parents:
diff changeset
658 String end = ranges.getString("end");
dwinter
parents:
diff changeset
659 String startOffset = ranges.getString("startOffset");
dwinter
parents:
diff changeset
660 String endOffset = ranges.getString("endOffset");
dwinter
parents:
diff changeset
661
dwinter
parents:
diff changeset
662 try {
dwinter
parents:
diff changeset
663 xpointer = url+"#"+
dwinter
parents:
diff changeset
664 URLEncoder.encode(String.format(
dwinter
parents:
diff changeset
665 "xpointer(start-point(string-range(\"%s\",%s,1))/range-to(end-point(string-range(\"%s\",%s,1))))",
dwinter
parents:
diff changeset
666 start, startOffset, end, endOffset),"utf-8");
dwinter
parents:
diff changeset
667 } catch (UnsupportedEncodingException e) {
dwinter
parents:
diff changeset
668 e.printStackTrace();
dwinter
parents:
diff changeset
669 setStatus(Status.SERVER_ERROR_INTERNAL);
dwinter
parents:
diff changeset
670 return null;
dwinter
parents:
diff changeset
671 }
dwinter
parents:
diff changeset
672 } else {
dwinter
parents:
diff changeset
673 xpointer = url;
dwinter
parents:
diff changeset
674 }
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
675
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
676 //username should be a URI, if not it will set to the MPIWG namespace defined in de.mpiwg.itgroup.annotationManager.Constants.NS
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
677 if (!username.startsWith("http"))
26
235b91ba8dff on the way to new annotations...
casties
parents: 23
diff changeset
678 username=NS.MPIWG_PERSONS_URL+username;
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
679
17
b0ef5c860464 updating and deleting annotations works now!
casties
parents: 16
diff changeset
680 return new Annotation(xpointer, username, null, text, null);
0
dwinter
parents:
diff changeset
681 }
dwinter
parents:
diff changeset
682
dwinter
parents:
diff changeset
683 }