annotate src/de/mpiwg/itgroup/annotationManager/restlet/AddAndSearchAnnotations.java @ 4:c32080f364c6

minor bugs
author dwinter
date Fri, 02 Dec 2011 09:25:37 +0100
parents e5f0906c107c
children 0be9d53a6967
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();
4
c32080f364c6 minor bugs
dwinter
parents: 3
diff changeset
375 if(jo==null){
c32080f364c6 minor bugs
dwinter
parents: 3
diff changeset
376 setStatus(Status.SERVER_ERROR_INTERNAL);
c32080f364c6 minor bugs
dwinter
parents: 3
diff changeset
377 return null;
c32080f364c6 minor bugs
dwinter
parents: 3
diff changeset
378 }
c32080f364c6 minor bugs
dwinter
parents: 3
diff changeset
379
c32080f364c6 minor bugs
dwinter
parents: 3
diff changeset
380 String mode=null;
c32080f364c6 minor bugs
dwinter
parents: 3
diff changeset
381 if(jo.has("mode")){
c32080f364c6 minor bugs
dwinter
parents: 3
diff changeset
382 mode = jo.getString("mode"); // hole modus
c32080f364c6 minor bugs
dwinter
parents: 3
diff changeset
383 }
0
dwinter
parents:
diff changeset
384 if (mode==null || mode.equals(""))
dwinter
parents:
diff changeset
385 mode="annotea"; // default mode (annotea) TODO make this configurable
dwinter
parents:
diff changeset
386
dwinter
parents:
diff changeset
387 if (mode.equals("annotator") ) { // annotator format
dwinter
parents:
diff changeset
388 annot = handleAnnotatorSchema(jo, entity);
dwinter
parents:
diff changeset
389 logger.debug("storing annotator object");
dwinter
parents:
diff changeset
390 logger.debug(jo);
dwinter
parents:
diff changeset
391 } else if (mode.equals("annotea")){
dwinter
parents:
diff changeset
392 annot = handleAnnotea(jo, entity);
dwinter
parents:
diff changeset
393 } else {
dwinter
parents:
diff changeset
394 setStatus(Status.CLIENT_ERROR_BAD_REQUEST,"mode "+mode+"not supported!");
dwinter
parents:
diff changeset
395 return null;
dwinter
parents:
diff changeset
396 }
dwinter
parents:
diff changeset
397
dwinter
parents:
diff changeset
398 } catch (JSONException e) {
dwinter
parents:
diff changeset
399 setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
dwinter
parents:
diff changeset
400 return null;
dwinter
parents:
diff changeset
401 }
dwinter
parents:
diff changeset
402
dwinter
parents:
diff changeset
403 } else if (entity.getMediaType().equals(MediaType.APPLICATION_WWW_FORM)) {
dwinter
parents:
diff changeset
404 annot = handleForm(entity);
dwinter
parents:
diff changeset
405
dwinter
parents:
diff changeset
406 } else {
dwinter
parents:
diff changeset
407 setStatus(Status.CLIENT_ERROR_UNSUPPORTED_MEDIA_TYPE);
dwinter
parents:
diff changeset
408
dwinter
parents:
diff changeset
409 return null;
dwinter
parents:
diff changeset
410 }
dwinter
parents:
diff changeset
411
dwinter
parents:
diff changeset
412 if (annot==null){
dwinter
parents:
diff changeset
413 return null;
dwinter
parents:
diff changeset
414 }
dwinter
parents:
diff changeset
415 if (annot.xpointer == null || annot.creator == null) {
dwinter
parents:
diff changeset
416 setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
dwinter
parents:
diff changeset
417
dwinter
parents:
diff changeset
418 return null;
dwinter
parents:
diff changeset
419 }
dwinter
parents:
diff changeset
420
dwinter
parents:
diff changeset
421
dwinter
parents:
diff changeset
422
dwinter
parents:
diff changeset
423 try {
dwinter
parents:
diff changeset
424 return new Convert("file:///annotations").storeAnnotation(annot);
dwinter
parents:
diff changeset
425 } catch (TripleStoreStoreError e) {
dwinter
parents:
diff changeset
426 e.printStackTrace();
dwinter
parents:
diff changeset
427 setStatus(Status.SERVER_ERROR_INTERNAL, "TripleStore Error");
dwinter
parents:
diff changeset
428 return null;
dwinter
parents:
diff changeset
429 }
dwinter
parents:
diff changeset
430 }
dwinter
parents:
diff changeset
431
2
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 /**
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 * @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
436 *
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
437 * username,password is optional, if not given BasicAuthentification is used.
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
438 *
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
439 *
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
440 *
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
441 * 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
442 *
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
443 * @return
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
444 */
0
dwinter
parents:
diff changeset
445 protected Convert.Annotation handleForm(Representation entity) {
dwinter
parents:
diff changeset
446 Convert.Annotation annot;
dwinter
parents:
diff changeset
447 Form form = new Form(entity);
dwinter
parents:
diff changeset
448 String username = form.getValues("username");
dwinter
parents:
diff changeset
449 String password = form.getValues("password");
dwinter
parents:
diff changeset
450 String xpointer = form.getValues("xpointer");
dwinter
parents:
diff changeset
451 String text = form.getValues("text");
dwinter
parents:
diff changeset
452 String url = form.getValues("url");
dwinter
parents:
diff changeset
453 String type = form.getValues("type");
dwinter
parents:
diff changeset
454 RestServer restServer = (RestServer) getApplication();
dwinter
parents:
diff changeset
455
dwinter
parents:
diff changeset
456 // falls user and password nicht null sind:
dwinter
parents:
diff changeset
457 User userFromForm = null;
dwinter
parents:
diff changeset
458 if (username != null && password != null) {
dwinter
parents:
diff changeset
459 if (restServer.authenticate(username, password, getRequest())) {
dwinter
parents:
diff changeset
460 userFromForm = new User(username);
dwinter
parents:
diff changeset
461 }
dwinter
parents:
diff changeset
462 }
dwinter
parents:
diff changeset
463 User authUser = null;
dwinter
parents:
diff changeset
464
dwinter
parents:
diff changeset
465 if (userFromForm == null) {
dwinter
parents:
diff changeset
466 authUser = handleBasicAuthentification(entity);
dwinter
parents:
diff changeset
467 }
dwinter
parents:
diff changeset
468
dwinter
parents:
diff changeset
469 // weder BasicAuth noch FormAuth
dwinter
parents:
diff changeset
470 if (authUser == null && userFromForm == null) {
dwinter
parents:
diff changeset
471 setStatus(Status.CLIENT_ERROR_FORBIDDEN);
dwinter
parents:
diff changeset
472 return null;
dwinter
parents:
diff changeset
473 }
dwinter
parents:
diff changeset
474
dwinter
parents:
diff changeset
475 if (userFromForm != null) {
dwinter
parents:
diff changeset
476 username = userFromForm.getIdentifier();
dwinter
parents:
diff changeset
477 } else {
dwinter
parents:
diff changeset
478 username = authUser.getIdentifier();
dwinter
parents:
diff changeset
479 }
dwinter
parents:
diff changeset
480
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
481 //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
482 if (!username.startsWith("http"))
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
483 username=NS.MPIWG_PERSONS+username;
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
484
0
dwinter
parents:
diff changeset
485 annot = new Convert.Annotation(xpointer, username, null, text,
dwinter
parents:
diff changeset
486 type, url);
dwinter
parents:
diff changeset
487 return annot;
dwinter
parents:
diff changeset
488 }
dwinter
parents:
diff changeset
489
dwinter
parents:
diff changeset
490 @Post
dwinter
parents:
diff changeset
491 public Representation doPostHtml2(Representation entity) {
dwinter
parents:
diff changeset
492 return doPostHtml(entity);
dwinter
parents:
diff changeset
493 }
dwinter
parents:
diff changeset
494
dwinter
parents:
diff changeset
495 private User handleBasicAuthentification(Representation entity) {
dwinter
parents:
diff changeset
496 RestServer restServer = (RestServer) getApplication();
dwinter
parents:
diff changeset
497 if (!restServer.authenticate(getRequest(), getResponse())) {
dwinter
parents:
diff changeset
498 // Not authenticated
dwinter
parents:
diff changeset
499 return null;
dwinter
parents:
diff changeset
500 }
dwinter
parents:
diff changeset
501
dwinter
parents:
diff changeset
502 ClientInfo ci = getRequest().getClientInfo();
dwinter
parents:
diff changeset
503 logger.debug(ci);
dwinter
parents:
diff changeset
504 return getRequest().getClientInfo().getUser();
dwinter
parents:
diff changeset
505
dwinter
parents:
diff changeset
506 }
dwinter
parents:
diff changeset
507
dwinter
parents:
diff changeset
508 /**
dwinter
parents:
diff changeset
509 * using a minimal annotation format based on the annotea specification
dwinter
parents:
diff changeset
510 *
dwinter
parents:
diff changeset
511 * @param jo
dwinter
parents:
diff changeset
512 * must contain xpointer, text,url,type and can contain a
dwinter
parents:
diff changeset
513 * username, if not the username form the authentification will
dwinter
parents:
diff changeset
514 * be used.
dwinter
parents:
diff changeset
515 * @param authUser
dwinter
parents:
diff changeset
516 * user object
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
517 * 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
518
0
dwinter
parents:
diff changeset
519 * @return
dwinter
parents:
diff changeset
520 * @throws JSONException
dwinter
parents:
diff changeset
521 */
dwinter
parents:
diff changeset
522 public Annotation handleAnnotea(JSONObject jo, Representation entity)
dwinter
parents:
diff changeset
523 throws JSONException {
dwinter
parents:
diff changeset
524
dwinter
parents:
diff changeset
525 User authUser = handleBasicAuthentification(entity);
dwinter
parents:
diff changeset
526 String username = jo.getString("username"); // not required, if no
dwinter
parents:
diff changeset
527 // username given authuser
dwinter
parents:
diff changeset
528 // will be used.
dwinter
parents:
diff changeset
529 String xpointer = jo.getString("xpointer");
dwinter
parents:
diff changeset
530 String text = null;
dwinter
parents:
diff changeset
531 if (jo.has("text"))
dwinter
parents:
diff changeset
532 text = jo.getString("text");
dwinter
parents:
diff changeset
533
dwinter
parents:
diff changeset
534 String url = null;
dwinter
parents:
diff changeset
535 if (jo.has("url"))
dwinter
parents:
diff changeset
536 url = jo.getString("url");
dwinter
parents:
diff changeset
537
dwinter
parents:
diff changeset
538 String type = null;
dwinter
parents:
diff changeset
539 if (jo.has("type"))
dwinter
parents:
diff changeset
540 type = jo.getString("type");
dwinter
parents:
diff changeset
541
dwinter
parents:
diff changeset
542 if (username == null)
dwinter
parents:
diff changeset
543 username = authUser.getIdentifier();
dwinter
parents:
diff changeset
544
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
545 //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
546 if (!username.startsWith("http"))
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
547 username=NS.MPIWG_PERSONS+username;
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
548
0
dwinter
parents:
diff changeset
549 return new Convert.Annotation(xpointer, username, null, text, type, url);
dwinter
parents:
diff changeset
550 }
dwinter
parents:
diff changeset
551
dwinter
parents:
diff changeset
552 /**
dwinter
parents:
diff changeset
553 * uses the specification from the annotator project.
dwinter
parents:
diff changeset
554 *
3
e5f0906c107c Neue Startseite
dwinter
parents: 2
diff changeset
555 * @see{https://github.com/okfn/annotator/wiki/Annotation-format} The user
0
dwinter
parents:
diff changeset
556 * object must
dwinter
parents:
diff changeset
557 * contain an
dwinter
parents:
diff changeset
558 * id and
dwinter
parents:
diff changeset
559 * password or
dwinter
parents:
diff changeset
560 * basic
dwinter
parents:
diff changeset
561 * authentification
dwinter
parents:
diff changeset
562 * is used.
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
0
dwinter
parents:
diff changeset
564 * @param jo
dwinter
parents:
diff changeset
565 * @param authUser
dwinter
parents:
diff changeset
566 * @return
dwinter
parents:
diff changeset
567 * @throws JSONException
dwinter
parents:
diff changeset
568 */
dwinter
parents:
diff changeset
569 public Convert.Annotation handleAnnotatorSchema(JSONObject jo,
dwinter
parents:
diff changeset
570 Representation entity) throws JSONException {
dwinter
parents:
diff changeset
571 Convert.Annotation annot;
dwinter
parents:
diff changeset
572 String url = jo.getString("uri");
dwinter
parents:
diff changeset
573 String text = jo.getString("text");
dwinter
parents:
diff changeset
574
dwinter
parents:
diff changeset
575 String username = null;
dwinter
parents:
diff changeset
576 if (jo.has("user")) { // not required, if no username given authuser
dwinter
parents:
diff changeset
577 // will be used otherwise username and password
dwinter
parents:
diff changeset
578 // has to be submitted
dwinter
parents:
diff changeset
579 JSONObject user = jo.getJSONObject("user");
dwinter
parents:
diff changeset
580 if (user.has("id")) {
dwinter
parents:
diff changeset
581 username = user.getString("id");
dwinter
parents:
diff changeset
582 if(!user.has("password")){
dwinter
parents:
diff changeset
583 User authUser = handleBasicAuthentification(entity);
dwinter
parents:
diff changeset
584 if (authUser==null){
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 username = authUser.getIdentifier();
dwinter
parents:
diff changeset
589 } else {
dwinter
parents:
diff changeset
590 String password = user.getString("password");
dwinter
parents:
diff changeset
591 if (!((RestServer) getApplication()).authenticate(username,
dwinter
parents:
diff changeset
592 password, getRequest())) {
dwinter
parents:
diff changeset
593 setStatus(Status.CLIENT_ERROR_FORBIDDEN);
dwinter
parents:
diff changeset
594 return null;
dwinter
parents:
diff changeset
595 }
dwinter
parents:
diff changeset
596 }
dwinter
parents:
diff changeset
597 }
dwinter
parents:
diff changeset
598
dwinter
parents:
diff changeset
599 } else {
dwinter
parents:
diff changeset
600 User authUser = handleBasicAuthentification(entity);
dwinter
parents:
diff changeset
601 if (authUser == null) {
dwinter
parents:
diff changeset
602 setStatus(Status.CLIENT_ERROR_FORBIDDEN);
dwinter
parents:
diff changeset
603 return null;
dwinter
parents:
diff changeset
604 }
dwinter
parents:
diff changeset
605 username = authUser.getIdentifier();
dwinter
parents:
diff changeset
606 }
dwinter
parents:
diff changeset
607
dwinter
parents:
diff changeset
608 String xpointer;
dwinter
parents:
diff changeset
609 if (jo.has("ranges")) {
dwinter
parents:
diff changeset
610 JSONObject ranges = jo.getJSONArray("ranges").getJSONObject(0);
dwinter
parents:
diff changeset
611 String start = ranges.getString("start");
dwinter
parents:
diff changeset
612 String end = ranges.getString("end");
dwinter
parents:
diff changeset
613 String startOffset = ranges.getString("startOffset");
dwinter
parents:
diff changeset
614 String endOffset = ranges.getString("endOffset");
dwinter
parents:
diff changeset
615
dwinter
parents:
diff changeset
616 try {
dwinter
parents:
diff changeset
617 xpointer = url+"#"+
dwinter
parents:
diff changeset
618 URLEncoder.encode(String.format(
dwinter
parents:
diff changeset
619 "xpointer(start-point(string-range(\"%s\",%s,1))/range-to(end-point(string-range(\"%s\",%s,1))))",
dwinter
parents:
diff changeset
620 start, startOffset, end, endOffset),"utf-8");
dwinter
parents:
diff changeset
621 } catch (UnsupportedEncodingException e) {
dwinter
parents:
diff changeset
622 e.printStackTrace();
dwinter
parents:
diff changeset
623 setStatus(Status.SERVER_ERROR_INTERNAL);
dwinter
parents:
diff changeset
624 return null;
dwinter
parents:
diff changeset
625 }
dwinter
parents:
diff changeset
626 } else {
dwinter
parents:
diff changeset
627 xpointer = url;
dwinter
parents:
diff changeset
628 }
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
629
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
630 //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
631 if (!username.startsWith("http"))
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
632 username=NS.MPIWG_PERSONS+username;
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 1
diff changeset
633
0
dwinter
parents:
diff changeset
634 return new Convert.Annotation(xpointer, username, null, text, null);
dwinter
parents:
diff changeset
635 }
dwinter
parents:
diff changeset
636
dwinter
parents:
diff changeset
637 }