# HG changeset patch
# User casties
# Date 1348758728 -7200
# Node ID 64aa756c60cc152e634d18da93accc03ef8db602
# Parent f30f4208071135a160fe23a810b3de1cd3e8885f
annotations ui can show and delete annotations now.
diff -r f30f42080711 -r 64aa756c60cc src/main/java/de/mpiwg/itgroup/annotations/Annotation.java
--- a/src/main/java/de/mpiwg/itgroup/annotations/Annotation.java Thu Sep 27 12:39:15 2012 +0200
+++ b/src/main/java/de/mpiwg/itgroup/annotations/Annotation.java Thu Sep 27 17:12:08 2012 +0200
@@ -3,8 +3,11 @@
*/
package de.mpiwg.itgroup.annotations;
+import java.io.UnsupportedEncodingException;
import java.util.Set;
+import org.apache.commons.codec.binary.Base64;
+
import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
/**
@@ -160,6 +163,29 @@
}
/**
+ * Returns an URL-compatible id.
+ * Currently the uri as base64 encoded string.
+ * @return
+ */
+ public String getUrlId() {
+ if (uri == null) return null;
+ try {
+ return Base64.encodeBase64URLSafeString(uri.getBytes("UTF-8"));
+ } catch (UnsupportedEncodingException e) {
+ return null;
+ }
+ }
+
+ public static String decodeId(String id) {
+ if (id == null) return null;
+ try {
+ return new String(Base64.decodeBase64(id), "UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ return null;
+ }
+ }
+
+ /**
* @return the bodyText
*/
public String getBodyText() {
diff -r f30f42080711 -r 64aa756c60cc src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorAnnotationsByResources.java
--- a/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorAnnotationsByResources.java Thu Sep 27 12:39:15 2012 +0200
+++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorAnnotationsByResources.java Thu Sep 27 17:12:08 2012 +0200
@@ -6,19 +6,15 @@
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
-import org.neo4j.graphdb.Node;
import org.restlet.data.Form;
import org.restlet.data.Parameter;
import org.restlet.data.Status;
import org.restlet.ext.json.JsonRepresentation;
import org.restlet.representation.Representation;
import org.restlet.resource.Get;
-import org.restlet.resource.ServerResource;
import de.mpiwg.itgroup.annotations.Annotation;
-import de.mpiwg.itgroup.annotations.NS;
import de.mpiwg.itgroup.annotations.Person;
-import de.mpiwg.itgroup.annotations.Tag;
import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
import de.mpiwg.itgroup.annotations.restlet.utils.JSONObjectComparator;
diff -r f30f42080711 -r 64aa756c60cc src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorAnnotationsByTags.java
--- a/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorAnnotationsByTags.java Thu Sep 27 12:39:15 2012 +0200
+++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorAnnotationsByTags.java Thu Sep 27 17:12:08 2012 +0200
@@ -6,19 +6,16 @@
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
-import org.neo4j.graphdb.Node;
import org.restlet.data.Form;
import org.restlet.data.Parameter;
import org.restlet.data.Status;
import org.restlet.ext.json.JsonRepresentation;
import org.restlet.representation.Representation;
import org.restlet.resource.Get;
-import org.restlet.resource.ServerResource;
import de.mpiwg.itgroup.annotations.Annotation;
import de.mpiwg.itgroup.annotations.NS;
import de.mpiwg.itgroup.annotations.Person;
-import de.mpiwg.itgroup.annotations.Tag;
import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
import de.mpiwg.itgroup.annotations.restlet.utils.JSONObjectComparator;
diff -r f30f42080711 -r 64aa756c60cc src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResources.java
--- a/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResources.java Thu Sep 27 12:39:15 2012 +0200
+++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResources.java Thu Sep 27 17:12:08 2012 +0200
@@ -9,19 +9,13 @@
import org.json.JSONException;
import org.json.JSONObject;
import org.neo4j.graphdb.Node;
-import org.restlet.data.Form;
import org.restlet.data.Status;
import org.restlet.ext.json.JsonRepresentation;
import org.restlet.representation.Representation;
import org.restlet.resource.Get;
-import de.mpiwg.itgroup.annotations.Actor;
-import de.mpiwg.itgroup.annotations.Group;
-import de.mpiwg.itgroup.annotations.NS;
import de.mpiwg.itgroup.annotations.Resource;
-import de.mpiwg.itgroup.annotations.Tag;
import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
-import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore.NodeTypes;
/**
diff -r f30f42080711 -r 64aa756c60cc src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorTags.java
--- a/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorTags.java Thu Sep 27 12:39:15 2012 +0200
+++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorTags.java Thu Sep 27 17:12:08 2012 +0200
@@ -9,18 +9,14 @@
import org.json.JSONException;
import org.json.JSONObject;
import org.neo4j.graphdb.Node;
-import org.restlet.data.Form;
import org.restlet.data.Status;
import org.restlet.ext.json.JsonRepresentation;
import org.restlet.representation.Representation;
import org.restlet.resource.Get;
-import de.mpiwg.itgroup.annotations.Actor;
-import de.mpiwg.itgroup.annotations.Group;
import de.mpiwg.itgroup.annotations.NS;
import de.mpiwg.itgroup.annotations.Tag;
import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
-import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore.NodeTypes;
/**
diff -r f30f42080711 -r 64aa756c60cc src/main/java/de/mpiwg/itgroup/annotations/restlet/BaseRestlet.java
--- a/src/main/java/de/mpiwg/itgroup/annotations/restlet/BaseRestlet.java Thu Sep 27 12:39:15 2012 +0200
+++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/BaseRestlet.java Thu Sep 27 17:12:08 2012 +0200
@@ -57,6 +57,9 @@
protected String ldapServerUrl;
public static final String LDAP_SERVER_KEY = "annotationmanager.ldapserver.url";
+ public static final String ADMIN_USER_KEY = "annotationmanager.admin.user";
+ public static final String ADMIN_PASSWORD_KEY = "annotationmanager.admin.password";
+
/**
* constructor
*
diff -r f30f42080711 -r 64aa756c60cc src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationResource.java
--- /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 = "
\n";
+ result += String.format("Edit person %s
\n", annotation.getId());
+ result += String.format("All persons
", this.getReference().getParentRef());
+ // tunnel PUT method through POST
+ result += String.format("\n\n";
+ */
+ } else {
+ // output person content
+ result = "\nAnnotation
\n";
+ result += String.format("All annotations
", this.getReference().getParentRef());
+ result += "";
+ result += String.format("uri | %s |
\n", annotation.getUri());
+ result += String.format("text | %s |
\n", annotation.getBodyText());
+ result += String.format("target | %s |
\n", annotation.getTargetBaseUri());
+ result += String.format("fragment | %s |
\n", annotation.getTargetFragment());
+ result += String.format("creator | %s |
\n", annotation.getCreatorName());
+ result += "
\n";
+ //result += "Edit annotation
\n";
+ // tunnel POST as DELETE
+ result += String.format(
+ "\n",
+ this.getReference().getHierarchicalPart());
+ result += "\n";
+ }
+ 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;
+ }
+}
diff -r f30f42080711 -r 64aa756c60cc src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationsResource.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationsResource.java Thu Sep 27 17:12:08 2012 +0200
@@ -0,0 +1,67 @@
+/**
+ *
+ */
+package de.mpiwg.itgroup.annotations.restlet.annotations_ui;
+
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.restlet.data.MediaType;
+import org.restlet.data.Reference;
+import org.restlet.representation.Representation;
+import org.restlet.representation.StringRepresentation;
+import org.restlet.resource.Get;
+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 the list of annotations.
+ *
+ * @author casties
+ *
+ */
+public class AnnotationsResource extends ServerResource {
+
+ public static Logger logger = Logger.getLogger(AnnotationsResource.class);
+
+ private AnnotationStore store;
+
+ @Override
+ protected void doInit() throws ResourceException {
+ super.doInit();
+ // get store instance
+ if (store == null) {
+ store = ((BaseRestlet) getApplication()).getAnnotationStore();
+ }
+ }
+
+ /**
+ * GET with HTML content type. Lists all annotations.
+ *
+ * @param entity
+ * @return
+ */
+ @Get("html")
+ public Representation doGetHTML(Representation entity) {
+ String result = null;
+ // list all annotations
+ result = "\nAnnotations
\n";
+ result += "uri | text | target | fragment | creator |
";
+ List annotations = store.getAnnotations("id", "*");
+ for (Annotation annotation : annotations) {
+ Reference url = this.getReference().clone();
+ url.addSegment(annotation.getUrlId());
+ result += String.format("%s | %s | %s | %s | %s |
\n", url,
+ annotation.getUri(), annotation.getBodyText(), annotation.getTargetBaseUri(), annotation.getTargetFragment(),
+ annotation.getCreatorName());
+ }
+ result += "
\n";
+ result += "\n";
+ return new StringRepresentation(result, MediaType.TEXT_HTML);
+ }
+
+}
diff -r f30f42080711 -r 64aa756c60cc src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationsUiRestlet.java
--- a/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationsUiRestlet.java Thu Sep 27 12:39:15 2012 +0200
+++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationsUiRestlet.java Thu Sep 27 17:12:08 2012 +0200
@@ -19,13 +19,13 @@
*/
public class AnnotationsUiRestlet extends BaseRestlet {
- public final String version = "AnnotationManagerN4J/AnnotationsUI 0.2";
+ public final String version = "AnnotationManagerN4J/AnnotationsUI 0.3";
public static Logger logger = Logger.getLogger(AnnotationsUiRestlet.class);
public AnnotationsUiRestlet(Context context) {
super(context);
- logger.debug("StoreRestlet!");
+ logger.info(version);
}
/*
@@ -48,12 +48,19 @@
router.attach("/persons/", PersonsResource.class);
router.attach("/persons/{id}", PersonResource.class);
router.attach("/persons/{id}/", PersonResource.class);
+ router.attach("/annotations", AnnotationsResource.class);
+ router.attach("/annotations/", AnnotationsResource.class);
+ router.attach("/annotations/{id}", AnnotationResource.class);
+ router.attach("/annotations/{id}/", AnnotationResource.class);
router.attach("/", InfoResource.class);
- // Create a simple password verifier
+ // use simple password verifier
MapVerifier verifier = new MapVerifier();
- verifier.getLocalSecrets().put("scott", "tiger".toCharArray());
+ // get user name and password
+ String user = serverConfig.getProperty(BaseRestlet.ADMIN_USER_KEY);
+ String pw = serverConfig.getProperty(BaseRestlet.ADMIN_PASSWORD_KEY);
+ verifier.getLocalSecrets().put(user, pw.toCharArray());
// Create a Guard
ChallengeAuthenticator guard = new ChallengeAuthenticator(getContext(), ChallengeScheme.HTTP_BASIC, "Tutorial");
guard.setVerifier(verifier);
diff -r f30f42080711 -r 64aa756c60cc src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/GroupMembersResource.java
--- a/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/GroupMembersResource.java Thu Sep 27 12:39:15 2012 +0200
+++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/GroupMembersResource.java Thu Sep 27 17:12:08 2012 +0200
@@ -14,9 +14,7 @@
import org.restlet.resource.Get;
import org.restlet.resource.Post;
-import de.mpiwg.itgroup.annotations.Actor;
import de.mpiwg.itgroup.annotations.Person;
-import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore.NodeTypes;
/**
* Resource class for the members of an annotation group.
diff -r f30f42080711 -r 64aa756c60cc src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/PersonsResource.java
--- a/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/PersonsResource.java Thu Sep 27 12:39:15 2012 +0200
+++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/PersonsResource.java Thu Sep 27 17:12:08 2012 +0200
@@ -20,7 +20,6 @@
import de.mpiwg.itgroup.annotations.Actor;
import de.mpiwg.itgroup.annotations.Person;
import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
-import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore.NodeTypes;
import de.mpiwg.itgroup.annotations.restlet.BaseRestlet;
/**