50
|
1 /**
|
|
2 *
|
|
3 */
|
|
4 package de.mpiwg.itgroup.annotations.restlet.annotations_ui;
|
|
5
|
70
|
6 /*
|
|
7 * #%L
|
|
8 * AnnotationManager
|
|
9 * %%
|
|
10 * Copyright (C) 2012 - 2014 MPIWG Berlin
|
|
11 * %%
|
|
12 * This program is free software: you can redistribute it and/or modify
|
|
13 * it under the terms of the GNU Lesser General Public License as
|
|
14 * published by the Free Software Foundation, either version 3 of the
|
|
15 * License, or (at your option) any later version.
|
|
16 *
|
|
17 * This program is distributed in the hope that it will be useful,
|
|
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
20 * GNU General Lesser Public License for more details.
|
|
21 *
|
|
22 * You should have received a copy of the GNU General Lesser Public
|
|
23 * License along with this program. If not, see
|
|
24 * <http://www.gnu.org/licenses/lgpl-3.0.html>.
|
|
25 * #L%
|
|
26 */
|
|
27
|
65
|
28 import java.io.UnsupportedEncodingException;
|
|
29 import java.net.URLDecoder;
|
75
|
30 import java.util.logging.Logger;
|
65
|
31
|
50
|
32 import org.restlet.data.Form;
|
|
33 import org.restlet.data.MediaType;
|
|
34 import org.restlet.data.Reference;
|
|
35 import org.restlet.data.Status;
|
|
36 import org.restlet.representation.Representation;
|
|
37 import org.restlet.representation.StringRepresentation;
|
|
38 import org.restlet.resource.Delete;
|
|
39 import org.restlet.resource.Get;
|
|
40 import org.restlet.resource.Put;
|
|
41 import org.restlet.resource.ResourceException;
|
|
42 import org.restlet.resource.ServerResource;
|
|
43
|
|
44 import de.mpiwg.itgroup.annotations.Annotation;
|
|
45 import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
|
|
46 import de.mpiwg.itgroup.annotations.restlet.BaseRestlet;
|
|
47
|
|
48 /**
|
|
49 * Resource class for a single annotation.
|
|
50 *
|
|
51 * @author casties
|
|
52 *
|
|
53 */
|
|
54 public class AnnotationResource extends ServerResource {
|
|
55
|
75
|
56 public static Logger logger = Logger.getLogger("de.mpiwg.itgroup.annotations.restlet.annotations_ui.AnnotationResource");
|
50
|
57
|
|
58 protected AnnotationStore store;
|
|
59
|
|
60 protected String requestId;
|
|
61
|
|
62 protected Annotation annotation;
|
|
63
|
|
64 @Override
|
|
65 protected void doInit() throws ResourceException {
|
|
66 super.doInit();
|
|
67 // id from URI /annotations/persons/{id}
|
|
68 requestId = (String) getRequest().getAttributes().get("id");
|
75
|
69 logger.fine("annoation-id=" + requestId);
|
50
|
70 // get store instance
|
|
71 if (store == null) {
|
|
72 store = ((BaseRestlet) getApplication()).getAnnotationStore();
|
|
73 }
|
|
74 // get annotation from store
|
|
75 if (requestId != null) {
|
65
|
76 // URL decode
|
|
77 try {
|
|
78 requestId = URLDecoder.decode(requestId, "UTF-8");
|
|
79 } catch (UnsupportedEncodingException e) {
|
|
80 // this shouldn't happen
|
|
81 }
|
50
|
82 // the ID in the path is encoded
|
|
83 String id = Annotation.decodeId(requestId);
|
|
84 annotation = store.getAnnotationById(id);
|
|
85 }
|
|
86 }
|
|
87
|
|
88 /**
|
|
89 * GET with HTML content type. Shows the person.
|
|
90 *
|
|
91 * @param entity
|
|
92 * @return
|
|
93 */
|
|
94 @Get("html")
|
|
95 public Representation doGetHTML(Representation entity) {
|
|
96 if (annotation == null) {
|
|
97 // invalid id
|
|
98 setStatus(Status.CLIENT_ERROR_NOT_FOUND);
|
|
99 return null;
|
|
100 }
|
|
101 String result = null;
|
|
102 // get form parameter
|
|
103 Form f = this.getQuery();
|
|
104 String form = f.getFirstValue("form");
|
|
105 if (form != null && form.equals("edit")) {
|
|
106 /*
|
|
107 // output edit form
|
|
108 result = "<html><body>\n";
|
|
109 result += String.format("<h1>Edit person %s</h1>\n", annotation.getId());
|
|
110 result += String.format("<p><a href=\"%s\">All persons</a></p>", this.getReference().getParentRef());
|
|
111 // tunnel PUT method through POST
|
|
112 result += String.format("<form method=\"post\" action=\"%s?method=PUT\">\n", this.getReference().getHierarchicalPart());
|
|
113 result += "<table>";
|
|
114 result += String.format("<tr><td><b>name</b></td><td><input type=\"text\" name=\"name\" value=\"%s\"/></td></tr>\n",
|
|
115 annotation.getName());
|
|
116 result += String.format("<tr><td><b>uri</b></td><td><input type=\"text\" name=\"uri\" value=\"%s\"/></td></tr>\n",
|
|
117 annotation.getUriString());
|
|
118 result += "</table>\n";
|
|
119 result += "<p><input type=\"submit\"/></p>";
|
|
120 result += "</table>\n</form>\n</body>\n</html>";
|
|
121 */
|
|
122 } else {
|
|
123 // output person content
|
|
124 result = "<html><body>\n<h1>Annotation</h1>\n";
|
|
125 result += String.format("<p><a href=\"%s\">All annotations</a></p>", this.getReference().getParentRef());
|
|
126 result += "<table>";
|
|
127 result += String.format("<tr><td><b>uri</b></td><td>%s</td></tr>\n", annotation.getUri());
|
|
128 result += String.format("<tr><td><b>text</b></td><td>%s</td></tr>\n", annotation.getBodyText());
|
|
129 result += String.format("<tr><td><b>target</b></td><td>%s</td></tr>\n", annotation.getTargetBaseUri());
|
|
130 result += String.format("<tr><td><b>fragment</b></td><td>%s</td></tr>\n", annotation.getTargetFragment());
|
77
|
131 result += String.format("<tr><td><b>quote</b></td><td>%s</td></tr>\n", annotation.getQuote());
|
|
132 result += String.format("<tr><td><b>resource</b></td><td>%s</td></tr>\n", annotation.getResourceUri());
|
50
|
133 result += String.format("<tr><td><b>creator</b></td><td>%s</td></tr>\n", annotation.getCreatorName());
|
|
134 result += "</table>\n";
|
|
135 //result += "<p><a href=\"?form=edit\">Edit annotation</a></p>\n";
|
|
136 // tunnel POST as DELETE
|
|
137 result += String.format(
|
|
138 "<form method=\"post\" action=\"%s?method=DELETE\"><input type=\"submit\" value=\"Delete annotation\"/></form>\n",
|
|
139 this.getReference().getHierarchicalPart());
|
|
140 result += "</body>\n</html>";
|
|
141 }
|
|
142 return new StringRepresentation(result, MediaType.TEXT_HTML);
|
|
143 }
|
|
144
|
|
145 /**
|
|
146 * PUT updates the annotation.
|
|
147 *
|
|
148 * @param entity
|
|
149 * @return
|
|
150 */
|
|
151 @Put
|
|
152 public Representation doPut(Representation entity) {
|
75
|
153 logger.fine("AnnotationResource.doPut!");
|
50
|
154 if (annotation == null) {
|
|
155 // invalid id
|
|
156 setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
|
|
157 return null;
|
|
158 }
|
|
159 // NOT YET
|
|
160 return null;
|
|
161 /*
|
|
162 // TODO: do authentication
|
|
163 Form form = new Form(entity);
|
|
164 String name = form.getFirstValue("name");
|
|
165 String uri = form.getFirstValue("uri");
|
|
166 if (name != null && !name.isEmpty()) {
|
|
167 annotation.setName(name);
|
|
168 }
|
|
169 if (uri != null && !uri.isEmpty()) {
|
|
170 annotation.setUri(uri);
|
|
171 }
|
|
172 store.storeActor(annotation);
|
|
173 // return 303: see other
|
|
174 setStatus(Status.REDIRECTION_SEE_OTHER);
|
|
175 // go GET same URL
|
|
176 Reference url = this.getReference();
|
|
177 this.getResponse().setLocationRef(url);
|
|
178 return null;
|
|
179 */
|
|
180 }
|
|
181
|
|
182 /**
|
|
183 * DELETE deletes the annotation.
|
|
184 *
|
|
185 * @param entity
|
|
186 * @return
|
|
187 */
|
|
188 @Delete
|
|
189 public Representation doDelete(Representation entity) {
|
75
|
190 logger.fine("AnnotationResource.doDelete!");
|
50
|
191 if (annotation == null) {
|
|
192 // invalid id
|
|
193 setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
|
|
194 return null;
|
|
195 }
|
|
196 // TODO: do authentication
|
|
197 store.deleteAnnotationById(annotation.getUri());
|
|
198 // return 303: see other
|
|
199 setStatus(Status.REDIRECTION_SEE_OTHER);
|
|
200 // go GET parent URL
|
|
201 Reference url = this.getReference().getParentRef();
|
|
202 this.getResponse().setLocationRef(url);
|
|
203 return null;
|
|
204 }
|
|
205 }
|