source: AnnotationManagerN4J/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationResource.java @ 75:25eb2e1df106

Last change on this file since 75:25eb2e1df106 was 75:25eb2e1df106, checked in by casties, 10 years ago

change logging to java.util.logging.

File size: 7.3 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>creator</b></td><td>%s</td></tr>\n", annotation.getCreatorName());
132            result += "</table>\n";
133            //result += "<p><a href=\"?form=edit\">Edit annotation</a></p>\n";
134            // tunnel POST as DELETE
135            result += String.format(
136                    "<form method=\"post\" action=\"%s?method=DELETE\"><input type=\"submit\" value=\"Delete annotation\"/></form>\n",
137                    this.getReference().getHierarchicalPart());
138            result += "</body>\n</html>";
139        }
140        return new StringRepresentation(result, MediaType.TEXT_HTML);
141    }
142
143    /**
144     * PUT updates the annotation.
145     *
146     * @param entity
147     * @return
148     */
149    @Put
150    public Representation doPut(Representation entity) {
151        logger.fine("AnnotationResource.doPut!");
152        if (annotation == null) {
153            // invalid id
154            setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
155            return null;
156        }
157        // NOT YET
158        return null;
159        /*
160        // TODO: do authentication
161        Form form = new Form(entity);
162        String name = form.getFirstValue("name");
163        String uri = form.getFirstValue("uri");
164        if (name != null && !name.isEmpty()) {
165            annotation.setName(name);
166        }
167        if (uri != null && !uri.isEmpty()) {
168            annotation.setUri(uri);
169        }
170        store.storeActor(annotation);
171        // return 303: see other
172        setStatus(Status.REDIRECTION_SEE_OTHER);
173        // go GET same URL
174        Reference url = this.getReference();
175        this.getResponse().setLocationRef(url);
176        return null;
177        */
178    }
179
180    /**
181     * DELETE deletes the annotation.
182     *
183     * @param entity
184     * @return
185     */
186    @Delete
187    public Representation doDelete(Representation entity) {
188        logger.fine("AnnotationResource.doDelete!");
189        if (annotation == null) {
190            // invalid id
191            setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
192            return null;
193        }
194        // TODO: do authentication
195        store.deleteAnnotationById(annotation.getUri());
196        // return 303: see other
197        setStatus(Status.REDIRECTION_SEE_OTHER);
198        // go GET parent URL
199        Reference url = this.getReference().getParentRef();
200        this.getResponse().setLocationRef(url);
201        return null;
202    }
203}
Note: See TracBrowser for help on using the repository browser.