source: AnnotationManagerN4J/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/PersonResource.java @ 70:2b1e6df5e21a

Last change on this file since 70:2b1e6df5e21a was 70:2b1e6df5e21a, checked in by casties, 10 years ago

added lgpl_v3 license information.

File size: 6.7 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;
30
31import org.apache.log4j.Logger;
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.Person;
45import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
46import de.mpiwg.itgroup.annotations.restlet.BaseRestlet;
47
48/**
49 * Resource class for a single person.
50 *
51 * @author casties
52 *
53 */
54public class PersonResource extends ServerResource {
55
56    public static Logger logger = Logger.getLogger(PersonResource.class);
57
58    protected AnnotationStore store;
59
60    protected String requestId;
61
62    protected Person person;
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.debug("person-id=" + requestId);
70        // get store instance
71        if (store == null) {
72            store = ((BaseRestlet) getApplication()).getAnnotationStore();
73        }
74        // get person 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            person = (Person) store.getActor(new Person(requestId));
83        }
84    }
85
86    /**
87     * GET with HTML content type. Shows the person.
88     *
89     * @param entity
90     * @return
91     */
92    @Get("html")
93    public Representation doGetHTML(Representation entity) {
94        if (person == null) {
95            // invalid id
96            setStatus(Status.CLIENT_ERROR_NOT_FOUND);
97            return null;
98        }
99        String result = null;
100        // get form parameter
101        Form f = this.getQuery();
102        String form = f.getFirstValue("form");
103        if (form != null && form.equals("edit")) {
104            // output edit form
105            result = "<html><body>\n";
106            result += String.format("<h1>Edit person %s</h1>\n", person.getId());
107            result += String.format("<p><a href=\"%s\">All persons</a></p>", this.getReference().getParentRef());
108            // tunnel PUT method through POST
109            result += String.format("<form method=\"post\" action=\"%s?method=PUT\">\n", this.getReference().getHierarchicalPart());
110            result += "<table>";
111            result += String.format("<tr><td><b>name</b></td><td><input type=\"text\" name=\"name\" value=\"%s\"/></td></tr>\n",
112                    person.getName());
113            result += String.format("<tr><td><b>uri</b></td><td><input type=\"text\" name=\"uri\" value=\"%s\"/></td></tr>\n",
114                    person.getUriString());
115            result += "</table>\n";
116            result += "<p><input type=\"submit\"/></p>";
117            result += "</table>\n</form>\n</body>\n</html>";
118        } else {
119            // output person content
120            result = "<html><body>\n<h1>Person</h1>\n";
121            result += String.format("<p><a href=\"%s\">All persons</a></p>", this.getReference().getParentRef());
122            result += "<table>";
123            result += String.format("<tr><td><b>id</b></td><td>%s</td></tr>\n", person.getId());
124            result += String.format("<tr><td><b>name</b></td><td>%s</td></tr>\n", person.getName());
125            result += String.format("<tr><td><b>uri</b></td><td>%s</td></tr>\n", person.getUri());
126            result += "</table>\n";
127            result += "<p><a href=\"?form=edit\">Edit person</a></p>\n";
128            // tunnel POST as DELETE
129            result += String.format(
130                    "<form method=\"post\" action=\"%s?method=DELETE\"><input type=\"submit\" value=\"Delete person\"/></form>\n",
131                    this.getReference().getHierarchicalPart());
132            result += "</body>\n</html>";
133        }
134        return new StringRepresentation(result, MediaType.TEXT_HTML);
135    }
136
137    /**
138     * PUT updates the person.
139     *
140     * @param entity
141     * @return
142     */
143    @Put
144    public Representation doPut(Representation entity) {
145        logger.debug("PersonResource.doPut!");
146        if (person == null) {
147            // invalid id
148            setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
149            return null;
150        }
151        // TODO: do authentication
152        Form form = new Form(entity);
153        String name = form.getFirstValue("name");
154        String uri = form.getFirstValue("uri");
155        if (name != null && !name.isEmpty()) {
156            person.setName(name);
157        }
158        if (uri != null && !uri.isEmpty()) {
159            person.setUri(uri);
160        }
161        store.storeActor(person);
162        // return 303: see other
163        setStatus(Status.REDIRECTION_SEE_OTHER);
164        // go GET same URL
165        Reference url = this.getReference();
166        this.getResponse().setLocationRef(url);
167        return null;
168    }
169
170    /**
171     * DELETE deletes the person.
172     *
173     * @param entity
174     * @return
175     */
176    @Delete
177    public Representation doDelete(Representation entity) {
178        logger.debug("PersonResource.doDelete!");
179        if (person == null) {
180            // invalid id
181            setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
182            return null;
183        }
184        // TODO: do authentication
185        store.deleteActor(person);
186        // return 303: see other
187        setStatus(Status.REDIRECTION_SEE_OTHER);
188        // go GET parent URL
189        Reference url = this.getReference().getParentRef();
190        this.getResponse().setLocationRef(url);
191        return null;
192    }
193}
Note: See TracBrowser for help on using the repository browser.