source: AnnotationManagerN4J/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationResource.java @ 93:3d1a00418b42

admin_ui_rel_links
Last change on this file since 93:3d1a00418b42 was 93:3d1a00418b42, checked in by casties, 9 years ago

starting web admin ui with relative links. doesn't fully work yet.

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