annotate src/de/mpiwg/itgroup/annotationManager/restlet/AddAndSearchAnnotations.java @ 3:e5f0906c107c

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