source: AnnotationManagerN4J/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationResource.java @ 77:f2ff7de7b49d

Last change on this file since 77:f2ff7de7b49d was 77:f2ff7de7b49d, checked in by casties, 10 years ago

show more fields in annotations_ui annotation view.

File size: 7.5 KB
Line 
1/**
2 *
3 */
4package de.mpiwg.itgroup.annotations.restlet.annotations_ui;
5
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
28import java.io.UnsupportedEncodingException;
29import java.net.URLDecoder;
30import java.util.logging.Logger;
31
32import org.restlet.data.Form;
33import org.restlet.data.MediaType;
34import org.restlet.data.Reference;
35import org.restlet.data.Status;
36import org.restlet.representation.Representation;
37import org.restlet.representation.StringRepresentation;
38import org.restlet.resource.Delete;
39import org.restlet.resource.Get;
40import org.restlet.resource.Put;
41import org.restlet.resource.ResourceException;
42import org.restlet.resource.ServerResource;
43
44import de.mpiwg.itgroup.annotations.Annotation;
45import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
46import de.mpiwg.itgroup.annotations.restlet.BaseRestlet;
47
48/**
49 * Resource class for a single annotation.
50 *
51 * @author casties
52 *
53 */
54public class AnnotationResource extends ServerResource {
55
56    public static Logger logger = Logger.getLogger("de.mpiwg.itgroup.annotations.restlet.annotations_ui.AnnotationResource");
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");
69        logger.fine("annoation-id=" + requestId);
70        // get store instance
71        if (store == null) {
72            store = ((BaseRestlet) getApplication()).getAnnotationStore();
73        }
74        // get annotation from store
75        if (requestId != null) {
76            // URL decode
77            try {
78                requestId = URLDecoder.decode(requestId, "UTF-8");
79            } catch (UnsupportedEncodingException e) {
80                // this shouldn't happen
81            }
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());
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());
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) {
153        logger.fine("AnnotationResource.doPut!");
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) {
190        logger.fine("AnnotationResource.doDelete!");
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}
Note: See TracBrowser for help on using the repository browser.