annotate src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorAnnotationsByResources.java @ 65:c0dd5314bada

deal with special characters in urls.
author casties
date Wed, 05 Dec 2012 15:36:43 +0100
parents 64aa756c60cc
children 2b1e6df5e21a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
44
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
1 package de.mpiwg.itgroup.annotations.restlet;
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
2
65
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
3 import java.io.UnsupportedEncodingException;
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
4 import java.net.URLDecoder;
44
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
5 import java.util.ArrayList;
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
6 import java.util.List;
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
7
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
8 import org.json.JSONArray;
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
9 import org.json.JSONException;
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
10 import org.json.JSONObject;
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
11 import org.restlet.data.Form;
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
12 import org.restlet.data.Parameter;
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
13 import org.restlet.data.Status;
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
14 import org.restlet.ext.json.JsonRepresentation;
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
15 import org.restlet.representation.Representation;
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
16 import org.restlet.resource.Get;
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
17
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
18 import de.mpiwg.itgroup.annotations.Annotation;
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
19 import de.mpiwg.itgroup.annotations.Person;
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
20 import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
21 import de.mpiwg.itgroup.annotations.restlet.utils.JSONObjectComparator;
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
22
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
23 /**
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
24 * API for accessing tags in the Annotation store.
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
25 *
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
26 * @author dwinter
65
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
27 *
44
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
28 */
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
29 public class AnnotatorAnnotationsByResources extends AnnotatorResourceImpl {
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
30 protected String getAllowedMethodsForHeader() {
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
31 return "OPTIONS,GET";
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
32 }
65
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
33
44
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
34 @Get("json")
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
35 public Representation doGetJSON(Representation entity) {
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
36 logger.debug("AnnotatorAnnotatonsByResource doGetJSON!");
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
37 setCorsHeaders();
65
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
38
44
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
39 // do authentication
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
40 Person authUser = Person.createPersonWithId(this.checkAuthToken(entity));
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
41 logger.debug("request authenticated=" + authUser);
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
42
65
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
43 String id = null;
44
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
44 String jsonId = (String) getRequest().getAttributes().get("id");
65
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
45 if (jsonId != null) {
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
46 // URL decode
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
47 try {
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
48 jsonId = URLDecoder.decode(jsonId, "UTF-8");
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
49 } catch (UnsupportedEncodingException e) {
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
50 // this shouldn't happen
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
51 }
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
52 id = decodeJsonId(jsonId);
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
53 // String id = jsonId;
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
54 logger.debug("ressource-id=" + id);
44
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
55 }
65
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
56
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
57 Form form = getRequest().getResourceRef().getQueryAsForm();
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
58 String sortBy = null;
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
59 for (Parameter parameter : form) {
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
60 if (parameter.getName().equals("sortBy")) {
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
61 sortBy = parameter.getValue();
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
62 }
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
63 }
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
64
44
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
65 AnnotationStore store = getAnnotationStore();
65
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
66 // String tagUri=NS.MPIWG_TAGS_URL+id;
44
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
67 List<Annotation> annotations = store.getAnnotationsByResource(id);
65
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
68
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
69 // JSONArray results = new JSONArray();
44
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
70 ArrayList<JSONObject> results = new ArrayList<JSONObject>();
65
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
71
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
72 for (Annotation annot : annotations) {
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
73 // check permission
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
74 if (!annot.isActionAllowed("read", authUser, store))
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
75 continue;
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
76
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
77 JSONObject jo = createAnnotatorJson(annot, false);
44
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
78 results.add(jo);
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
79 }
65
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
80
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
81 if (sortBy != null) {
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
82 JSONObjectComparator.sortAnnotations(results, sortBy);
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
83 }
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
84
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
85 JSONArray resultsJa = new JSONArray();
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
86 for (JSONObject result : results) {
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
87 resultsJa.put(result);
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
88 }
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
89
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
90 // assemble result object
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
91 JSONObject result = new JSONObject();
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
92 try {
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
93 result.put("rows", resultsJa);
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
94 result.put("total", resultsJa.length());
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
95 } catch (JSONException e) {
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
96 setStatus(Status.SERVER_ERROR_INTERNAL, "JSON Error");
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
97 return null;
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
98 }
c0dd5314bada deal with special characters in urls.
casties
parents: 50
diff changeset
99 return new JsonRepresentation(result);
44
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
100 }
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
101
5e9d90461929 rest interface for resources
dwinter
parents:
diff changeset
102 }