50
|
1 /**
|
|
2 *
|
|
3 */
|
|
4 package de.mpiwg.itgroup.annotations.restlet.annotations_ui;
|
|
5
|
|
6 import org.apache.log4j.Logger;
|
|
7 import org.restlet.data.Form;
|
|
8 import org.restlet.data.MediaType;
|
|
9 import org.restlet.data.Reference;
|
|
10 import org.restlet.data.Status;
|
|
11 import org.restlet.representation.Representation;
|
|
12 import org.restlet.representation.StringRepresentation;
|
|
13 import org.restlet.resource.Delete;
|
|
14 import org.restlet.resource.Get;
|
|
15 import org.restlet.resource.Put;
|
|
16 import org.restlet.resource.ResourceException;
|
|
17 import org.restlet.resource.ServerResource;
|
|
18
|
|
19 import de.mpiwg.itgroup.annotations.Annotation;
|
|
20 import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
|
|
21 import de.mpiwg.itgroup.annotations.restlet.BaseRestlet;
|
|
22
|
|
23 /**
|
|
24 * Resource class for a single annotation.
|
|
25 *
|
|
26 * @author casties
|
|
27 *
|
|
28 */
|
|
29 public class AnnotationResource extends ServerResource {
|
|
30
|
|
31 public static Logger logger = Logger.getLogger(AnnotationResource.class);
|
|
32
|
|
33 protected AnnotationStore store;
|
|
34
|
|
35 protected String requestId;
|
|
36
|
|
37 protected Annotation annotation;
|
|
38
|
|
39 @Override
|
|
40 protected void doInit() throws ResourceException {
|
|
41 super.doInit();
|
|
42 // id from URI /annotations/persons/{id}
|
|
43 requestId = (String) getRequest().getAttributes().get("id");
|
|
44 logger.debug("annoation-id=" + requestId);
|
|
45 // get store instance
|
|
46 if (store == null) {
|
|
47 store = ((BaseRestlet) getApplication()).getAnnotationStore();
|
|
48 }
|
|
49 // get annotation from store
|
|
50 if (requestId != null) {
|
|
51 // the ID in the path is encoded
|
|
52 String id = Annotation.decodeId(requestId);
|
|
53 annotation = store.getAnnotationById(id);
|
|
54 }
|
|
55 }
|
|
56
|
|
57 /**
|
|
58 * GET with HTML content type. Shows the person.
|
|
59 *
|
|
60 * @param entity
|
|
61 * @return
|
|
62 */
|
|
63 @Get("html")
|
|
64 public Representation doGetHTML(Representation entity) {
|
|
65 if (annotation == null) {
|
|
66 // invalid id
|
|
67 setStatus(Status.CLIENT_ERROR_NOT_FOUND);
|
|
68 return null;
|
|
69 }
|
|
70 String result = null;
|
|
71 // get form parameter
|
|
72 Form f = this.getQuery();
|
|
73 String form = f.getFirstValue("form");
|
|
74 if (form != null && form.equals("edit")) {
|
|
75 /*
|
|
76 // output edit form
|
|
77 result = "<html><body>\n";
|
|
78 result += String.format("<h1>Edit person %s</h1>\n", annotation.getId());
|
|
79 result += String.format("<p><a href=\"%s\">All persons</a></p>", this.getReference().getParentRef());
|
|
80 // tunnel PUT method through POST
|
|
81 result += String.format("<form method=\"post\" action=\"%s?method=PUT\">\n", this.getReference().getHierarchicalPart());
|
|
82 result += "<table>";
|
|
83 result += String.format("<tr><td><b>name</b></td><td><input type=\"text\" name=\"name\" value=\"%s\"/></td></tr>\n",
|
|
84 annotation.getName());
|
|
85 result += String.format("<tr><td><b>uri</b></td><td><input type=\"text\" name=\"uri\" value=\"%s\"/></td></tr>\n",
|
|
86 annotation.getUriString());
|
|
87 result += "</table>\n";
|
|
88 result += "<p><input type=\"submit\"/></p>";
|
|
89 result += "</table>\n</form>\n</body>\n</html>";
|
|
90 */
|
|
91 } else {
|
|
92 // output person content
|
|
93 result = "<html><body>\n<h1>Annotation</h1>\n";
|
|
94 result += String.format("<p><a href=\"%s\">All annotations</a></p>", this.getReference().getParentRef());
|
|
95 result += "<table>";
|
|
96 result += String.format("<tr><td><b>uri</b></td><td>%s</td></tr>\n", annotation.getUri());
|
|
97 result += String.format("<tr><td><b>text</b></td><td>%s</td></tr>\n", annotation.getBodyText());
|
|
98 result += String.format("<tr><td><b>target</b></td><td>%s</td></tr>\n", annotation.getTargetBaseUri());
|
|
99 result += String.format("<tr><td><b>fragment</b></td><td>%s</td></tr>\n", annotation.getTargetFragment());
|
|
100 result += String.format("<tr><td><b>creator</b></td><td>%s</td></tr>\n", annotation.getCreatorName());
|
|
101 result += "</table>\n";
|
|
102 //result += "<p><a href=\"?form=edit\">Edit annotation</a></p>\n";
|
|
103 // tunnel POST as DELETE
|
|
104 result += String.format(
|
|
105 "<form method=\"post\" action=\"%s?method=DELETE\"><input type=\"submit\" value=\"Delete annotation\"/></form>\n",
|
|
106 this.getReference().getHierarchicalPart());
|
|
107 result += "</body>\n</html>";
|
|
108 }
|
|
109 return new StringRepresentation(result, MediaType.TEXT_HTML);
|
|
110 }
|
|
111
|
|
112 /**
|
|
113 * PUT updates the annotation.
|
|
114 *
|
|
115 * @param entity
|
|
116 * @return
|
|
117 */
|
|
118 @Put
|
|
119 public Representation doPut(Representation entity) {
|
|
120 logger.debug("AnnotationResource.doPut!");
|
|
121 if (annotation == null) {
|
|
122 // invalid id
|
|
123 setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
|
|
124 return null;
|
|
125 }
|
|
126 // NOT YET
|
|
127 return null;
|
|
128 /*
|
|
129 // TODO: do authentication
|
|
130 Form form = new Form(entity);
|
|
131 String name = form.getFirstValue("name");
|
|
132 String uri = form.getFirstValue("uri");
|
|
133 if (name != null && !name.isEmpty()) {
|
|
134 annotation.setName(name);
|
|
135 }
|
|
136 if (uri != null && !uri.isEmpty()) {
|
|
137 annotation.setUri(uri);
|
|
138 }
|
|
139 store.storeActor(annotation);
|
|
140 // return 303: see other
|
|
141 setStatus(Status.REDIRECTION_SEE_OTHER);
|
|
142 // go GET same URL
|
|
143 Reference url = this.getReference();
|
|
144 this.getResponse().setLocationRef(url);
|
|
145 return null;
|
|
146 */
|
|
147 }
|
|
148
|
|
149 /**
|
|
150 * DELETE deletes the annotation.
|
|
151 *
|
|
152 * @param entity
|
|
153 * @return
|
|
154 */
|
|
155 @Delete
|
|
156 public Representation doDelete(Representation entity) {
|
|
157 logger.debug("AnnotationResource.doDelete!");
|
|
158 if (annotation == null) {
|
|
159 // invalid id
|
|
160 setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
|
|
161 return null;
|
|
162 }
|
|
163 // TODO: do authentication
|
|
164 store.deleteAnnotationById(annotation.getUri());
|
|
165 // return 303: see other
|
|
166 setStatus(Status.REDIRECTION_SEE_OTHER);
|
|
167 // go GET parent URL
|
|
168 Reference url = this.getReference().getParentRef();
|
|
169 this.getResponse().setLocationRef(url);
|
|
170 return null;
|
|
171 }
|
|
172 }
|