source: AnnotationManagerN4J/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationResource.java @ 50:64aa756c60cc

Last change on this file since 50:64aa756c60cc was 50:64aa756c60cc, checked in by casties, 12 years ago

annotations ui can show and delete annotations now.

File size: 6.2 KB
Line 
1/**
2 *
3 */
4package de.mpiwg.itgroup.annotations.restlet.annotations_ui;
5
6import org.apache.log4j.Logger;
7import org.restlet.data.Form;
8import org.restlet.data.MediaType;
9import org.restlet.data.Reference;
10import org.restlet.data.Status;
11import org.restlet.representation.Representation;
12import org.restlet.representation.StringRepresentation;
13import org.restlet.resource.Delete;
14import org.restlet.resource.Get;
15import org.restlet.resource.Put;
16import org.restlet.resource.ResourceException;
17import org.restlet.resource.ServerResource;
18
19import de.mpiwg.itgroup.annotations.Annotation;
20import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
21import de.mpiwg.itgroup.annotations.restlet.BaseRestlet;
22
23/**
24 * Resource class for a single annotation.
25 *
26 * @author casties
27 *
28 */
29public class AnnotationResource extends ServerResource {
30
31    public static Logger logger = Logger.getLogger(AnnotationResource.class);
32
33    protected AnnotationStore store;
34
35    protected String requestId;
36
37    protected Annotation annotation;
38
39    @Override
40    protected void doInit() throws ResourceException {
41        super.doInit();
42        // id from URI /annotations/persons/{id}
43        requestId = (String) getRequest().getAttributes().get("id");
44        logger.debug("annoation-id=" + requestId);
45        // get store instance
46        if (store == null) {
47            store = ((BaseRestlet) getApplication()).getAnnotationStore();
48        }
49        // get annotation from store
50        if (requestId != null) {
51            // the ID in the path is encoded
52            String id = Annotation.decodeId(requestId);
53            annotation = store.getAnnotationById(id);
54        }
55    }
56
57    /**
58     * GET with HTML content type. Shows the person.
59     *
60     * @param entity
61     * @return
62     */
63    @Get("html")
64    public Representation doGetHTML(Representation entity) {
65        if (annotation == null) {
66            // invalid id
67            setStatus(Status.CLIENT_ERROR_NOT_FOUND);
68            return null;
69        }
70        String result = null;
71        // get form parameter
72        Form f = this.getQuery();
73        String form = f.getFirstValue("form");
74        if (form != null && form.equals("edit")) {
75            /*
76            // output edit form
77            result = "<html><body>\n";
78            result += String.format("<h1>Edit person %s</h1>\n", annotation.getId());
79            result += String.format("<p><a href=\"%s\">All persons</a></p>", this.getReference().getParentRef());
80            // tunnel PUT method through POST
81            result += String.format("<form method=\"post\" action=\"%s?method=PUT\">\n", this.getReference().getHierarchicalPart());
82            result += "<table>";
83            result += String.format("<tr><td><b>name</b></td><td><input type=\"text\" name=\"name\" value=\"%s\"/></td></tr>\n",
84                    annotation.getName());
85            result += String.format("<tr><td><b>uri</b></td><td><input type=\"text\" name=\"uri\" value=\"%s\"/></td></tr>\n",
86                    annotation.getUriString());
87            result += "</table>\n";
88            result += "<p><input type=\"submit\"/></p>";
89            result += "</table>\n</form>\n</body>\n</html>";
90            */
91        } else {
92            // output person content
93            result = "<html><body>\n<h1>Annotation</h1>\n";
94            result += String.format("<p><a href=\"%s\">All annotations</a></p>", this.getReference().getParentRef());
95            result += "<table>";
96            result += String.format("<tr><td><b>uri</b></td><td>%s</td></tr>\n", annotation.getUri());
97            result += String.format("<tr><td><b>text</b></td><td>%s</td></tr>\n", annotation.getBodyText());
98            result += String.format("<tr><td><b>target</b></td><td>%s</td></tr>\n", annotation.getTargetBaseUri());
99            result += String.format("<tr><td><b>fragment</b></td><td>%s</td></tr>\n", annotation.getTargetFragment());
100            result += String.format("<tr><td><b>creator</b></td><td>%s</td></tr>\n", annotation.getCreatorName());
101            result += "</table>\n";
102            //result += "<p><a href=\"?form=edit\">Edit annotation</a></p>\n";
103            // tunnel POST as DELETE
104            result += String.format(
105                    "<form method=\"post\" action=\"%s?method=DELETE\"><input type=\"submit\" value=\"Delete annotation\"/></form>\n",
106                    this.getReference().getHierarchicalPart());
107            result += "</body>\n</html>";
108        }
109        return new StringRepresentation(result, MediaType.TEXT_HTML);
110    }
111
112    /**
113     * PUT updates the annotation.
114     *
115     * @param entity
116     * @return
117     */
118    @Put
119    public Representation doPut(Representation entity) {
120        logger.debug("AnnotationResource.doPut!");
121        if (annotation == null) {
122            // invalid id
123            setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
124            return null;
125        }
126        // NOT YET
127        return null;
128        /*
129        // TODO: do authentication
130        Form form = new Form(entity);
131        String name = form.getFirstValue("name");
132        String uri = form.getFirstValue("uri");
133        if (name != null && !name.isEmpty()) {
134            annotation.setName(name);
135        }
136        if (uri != null && !uri.isEmpty()) {
137            annotation.setUri(uri);
138        }
139        store.storeActor(annotation);
140        // return 303: see other
141        setStatus(Status.REDIRECTION_SEE_OTHER);
142        // go GET same URL
143        Reference url = this.getReference();
144        this.getResponse().setLocationRef(url);
145        return null;
146        */
147    }
148
149    /**
150     * DELETE deletes the annotation.
151     *
152     * @param entity
153     * @return
154     */
155    @Delete
156    public Representation doDelete(Representation entity) {
157        logger.debug("AnnotationResource.doDelete!");
158        if (annotation == null) {
159            // invalid id
160            setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
161            return null;
162        }
163        // TODO: do authentication
164        store.deleteAnnotationById(annotation.getUri());
165        // return 303: see other
166        setStatus(Status.REDIRECTION_SEE_OTHER);
167        // go GET parent URL
168        Reference url = this.getReference().getParentRef();
169        this.getResponse().setLocationRef(url);
170        return null;
171    }
172}
Note: See TracBrowser for help on using the repository browser.