Mercurial > hg > AnnotationManagerN4J
diff src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationResource.java @ 50:64aa756c60cc
annotations ui can show and delete annotations now.
author | casties |
---|---|
date | Thu, 27 Sep 2012 17:12:08 +0200 |
parents | |
children | c0dd5314bada |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationResource.java Thu Sep 27 17:12:08 2012 +0200 @@ -0,0 +1,172 @@ +/** + * + */ +package de.mpiwg.itgroup.annotations.restlet.annotations_ui; + +import org.apache.log4j.Logger; +import org.restlet.data.Form; +import org.restlet.data.MediaType; +import org.restlet.data.Reference; +import org.restlet.data.Status; +import org.restlet.representation.Representation; +import org.restlet.representation.StringRepresentation; +import org.restlet.resource.Delete; +import org.restlet.resource.Get; +import org.restlet.resource.Put; +import org.restlet.resource.ResourceException; +import org.restlet.resource.ServerResource; + +import de.mpiwg.itgroup.annotations.Annotation; +import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore; +import de.mpiwg.itgroup.annotations.restlet.BaseRestlet; + +/** + * Resource class for a single annotation. + * + * @author casties + * + */ +public class AnnotationResource extends ServerResource { + + public static Logger logger = Logger.getLogger(AnnotationResource.class); + + protected AnnotationStore store; + + protected String requestId; + + protected Annotation annotation; + + @Override + protected void doInit() throws ResourceException { + super.doInit(); + // id from URI /annotations/persons/{id} + requestId = (String) getRequest().getAttributes().get("id"); + logger.debug("annoation-id=" + requestId); + // get store instance + if (store == null) { + store = ((BaseRestlet) getApplication()).getAnnotationStore(); + } + // get annotation from store + if (requestId != null) { + // the ID in the path is encoded + String id = Annotation.decodeId(requestId); + annotation = store.getAnnotationById(id); + } + } + + /** + * GET with HTML content type. Shows the person. + * + * @param entity + * @return + */ + @Get("html") + public Representation doGetHTML(Representation entity) { + if (annotation == null) { + // invalid id + setStatus(Status.CLIENT_ERROR_NOT_FOUND); + return null; + } + String result = null; + // get form parameter + Form f = this.getQuery(); + String form = f.getFirstValue("form"); + if (form != null && form.equals("edit")) { + /* + // output edit form + result = "<html><body>\n"; + result += String.format("<h1>Edit person %s</h1>\n", annotation.getId()); + result += String.format("<p><a href=\"%s\">All persons</a></p>", this.getReference().getParentRef()); + // tunnel PUT method through POST + result += String.format("<form method=\"post\" action=\"%s?method=PUT\">\n", this.getReference().getHierarchicalPart()); + result += "<table>"; + result += String.format("<tr><td><b>name</b></td><td><input type=\"text\" name=\"name\" value=\"%s\"/></td></tr>\n", + annotation.getName()); + result += String.format("<tr><td><b>uri</b></td><td><input type=\"text\" name=\"uri\" value=\"%s\"/></td></tr>\n", + annotation.getUriString()); + result += "</table>\n"; + result += "<p><input type=\"submit\"/></p>"; + result += "</table>\n</form>\n</body>\n</html>"; + */ + } else { + // output person content + result = "<html><body>\n<h1>Annotation</h1>\n"; + result += String.format("<p><a href=\"%s\">All annotations</a></p>", this.getReference().getParentRef()); + result += "<table>"; + result += String.format("<tr><td><b>uri</b></td><td>%s</td></tr>\n", annotation.getUri()); + result += String.format("<tr><td><b>text</b></td><td>%s</td></tr>\n", annotation.getBodyText()); + result += String.format("<tr><td><b>target</b></td><td>%s</td></tr>\n", annotation.getTargetBaseUri()); + result += String.format("<tr><td><b>fragment</b></td><td>%s</td></tr>\n", annotation.getTargetFragment()); + result += String.format("<tr><td><b>creator</b></td><td>%s</td></tr>\n", annotation.getCreatorName()); + result += "</table>\n"; + //result += "<p><a href=\"?form=edit\">Edit annotation</a></p>\n"; + // tunnel POST as DELETE + result += String.format( + "<form method=\"post\" action=\"%s?method=DELETE\"><input type=\"submit\" value=\"Delete annotation\"/></form>\n", + this.getReference().getHierarchicalPart()); + result += "</body>\n</html>"; + } + return new StringRepresentation(result, MediaType.TEXT_HTML); + } + + /** + * PUT updates the annotation. + * + * @param entity + * @return + */ + @Put + public Representation doPut(Representation entity) { + logger.debug("AnnotationResource.doPut!"); + if (annotation == null) { + // invalid id + setStatus(Status.CLIENT_ERROR_BAD_REQUEST); + return null; + } + // NOT YET + return null; + /* + // TODO: do authentication + Form form = new Form(entity); + String name = form.getFirstValue("name"); + String uri = form.getFirstValue("uri"); + if (name != null && !name.isEmpty()) { + annotation.setName(name); + } + if (uri != null && !uri.isEmpty()) { + annotation.setUri(uri); + } + store.storeActor(annotation); + // return 303: see other + setStatus(Status.REDIRECTION_SEE_OTHER); + // go GET same URL + Reference url = this.getReference(); + this.getResponse().setLocationRef(url); + return null; + */ + } + + /** + * DELETE deletes the annotation. + * + * @param entity + * @return + */ + @Delete + public Representation doDelete(Representation entity) { + logger.debug("AnnotationResource.doDelete!"); + if (annotation == null) { + // invalid id + setStatus(Status.CLIENT_ERROR_BAD_REQUEST); + return null; + } + // TODO: do authentication + store.deleteAnnotationById(annotation.getUri()); + // return 303: see other + setStatus(Status.REDIRECTION_SEE_OTHER); + // go GET parent URL + Reference url = this.getReference().getParentRef(); + this.getResponse().setLocationRef(url); + return null; + } +}