# HG changeset patch # User casties # Date 1348337538 -7200 # Node ID d22d01ba953a5222743743877be232b5149bbf93 # Parent b1fb0d11787772e530dc12fc3231b561cc86b2ba reorganised code for annotations and groups ui. work in progress. diff -r b1fb0d117877 -r d22d01ba953a src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotationStoreGroups.java --- a/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotationStoreGroups.java Thu Sep 20 17:42:26 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,134 +0,0 @@ -/** - * - */ -package de.mpiwg.itgroup.annotations.restlet; - -import java.util.List; - -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.Get; -import org.restlet.resource.Post; -import org.restlet.resource.ServerResource; - -import de.mpiwg.itgroup.annotations.Actor; -import de.mpiwg.itgroup.annotations.Group; -import de.mpiwg.itgroup.annotations.Person; -import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore; - -/** - * @author casties - * - */ -public class AnnotationStoreGroups extends ServerResource { - - public static Logger logger = Logger.getLogger(AnnotationStoreGroups.class); - - private AnnotationStore store; - - /** - * GET with HTML content type. Lists all groups. - * - * @param entity - * @return - */ - @Get("html") - public Representation doGetHTML(Representation entity) { - // id from URI /annotations/groups/{id} - String id = (String) getRequest().getAttributes().get("id"); - logger.debug("group-id=" + id); - String result = null; - store = getAnnotationStore(); - if (id == null) { - // list all groups - result = "\n

Groups

\n"; - result += ""; - List groups = store.getGroups("uri", "*"); - for (Group group : groups) { - Reference groupUrl = this.getReference(); - groupUrl.addSegment(group.getId()); - result += String.format("\n", groupUrl, - group.getId(), group.getName(), group.getUri()); - } - result += "
idnameuri
%s%s%s
\n\n"; - } else { - // just one group - Reference groupsUrl = this.getReference().getParentRef(); - result = "\n

Group

\n"; - result += String.format("

All groups

", groupsUrl); - Group group = new Group(id); - group = (Group) store.getActor(group); - result += ""; - result += String.format("\n", group.getId()); - result += String.format("\n", group.getName()); - result += String.format("\n", group.getUri()); - result += "\n"; - result += "
id%s
name%s
uri%s
members"; - List members = store.getMembersOfGroup(group); - for (Person p : members) { - result += String.format("%s (%s)\n", p.getName(), p.getIdString()); - } - result += "
\n\n"; - } - - logger.debug("sending:"); - logger.debug(result); - return new StringRepresentation(result, MediaType.TEXT_HTML); - } - - /** - * POST with HTML content-type. Creates a new Group. - * - * @return - */ - @Post - public Representation doPostHTML(Representation entity) { - logger.debug("AnnotationStoreGroups doPostHTML!"); - // TODO: do authentication - Form form = new Form(entity); - String id = form.getFirstValue("id"); - String name = form.getFirstValue("name"); - if (id == null || id.isEmpty()) { - // invalid id - setStatus(Status.CLIENT_ERROR_BAD_REQUEST); - return null; - } - String gid = makeGroupId(id); - Group newGroup = new Group(gid, null, name); - store = getAnnotationStore(); - Actor storedGroup = store.storeActor(newGroup); - gid = storedGroup.getId(); - // return 303: see other - setStatus(Status.REDIRECTION_SEE_OTHER); - // go GET URL for this group - Reference groupUrl = this.getReference(); - groupUrl.addSegment(gid); - this.getResponse().setLocationRef(groupUrl); - return null; - } - - /** - * Returns a group id based on the given id. - * - * @param id - * @return - */ - protected String makeGroupId(String id) { - // TODO: should we use different ids? - id = id.replaceAll("\\W", "_"); - id = id.toLowerCase(); - return id; - } - - protected AnnotationStore getAnnotationStore() { - if (store == null) { - store = ((BaseRestlet) getApplication()).getAnnotationStore(); - } - return store; - } -} diff -r b1fb0d117877 -r d22d01ba953a src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotationStoreInfo.java --- a/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotationStoreInfo.java Thu Sep 20 17:42:26 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -package de.mpiwg.itgroup.annotations.restlet; - -import java.io.InputStream; - -import org.restlet.data.MediaType; -import org.restlet.representation.InputRepresentation; -import org.restlet.representation.Representation; -import org.restlet.resource.Get; -import org.restlet.resource.ServerResource; - - -public class AnnotationStoreInfo extends ServerResource { - - @Get("html") - public Representation getHTML(){ - InputStream is = getClass().getResourceAsStream("/de/mpiwg/itgroup/annotations/annotationstore-info.html"); - - Representation rep = new InputRepresentation(is,MediaType.TEXT_HTML); - return rep; - - } - -} - diff -r b1fb0d117877 -r d22d01ba953a src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotationStoreRestlet.java --- a/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotationStoreRestlet.java Thu Sep 20 17:42:26 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/** - * - */ -package de.mpiwg.itgroup.annotations.restlet; - -import org.apache.log4j.Logger; -import org.restlet.Context; -import org.restlet.Restlet; -import org.restlet.routing.Router; - -/** - * @author casties - * - */ -public class AnnotationStoreRestlet extends BaseRestlet { - - public final String version = "AnnotationManagerN4J/AnnotationStore 0.1"; - - public static Logger logger = Logger.getLogger(AnnotationStoreRestlet.class); - - public AnnotationStoreRestlet(Context context) { - super(context); - logger.debug("StoreRestlet!"); - } - - /* - * (non-Javadoc) - * - * @see org.restlet.Application#createInboundRoot() - */ - @Override - public Restlet createInboundRoot() { - // this.authenticator = createAuthenticator(); - - Router router = new Router(getContext()); - - router.attach("/groups", AnnotationStoreGroups.class); - router.attach("/groups/", AnnotationStoreGroups.class); - router.attach("/groups/{id}", AnnotationStoreGroups.class); - - router.attach("/", AnnotationStoreInfo.class); - // authenticator.setNext(router); - // return authenticator; - - return router; - } - - - @Override - public String getVersion() { - return version; - } - -} diff -r b1fb0d117877 -r d22d01ba953a src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationsUiRestlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationsUiRestlet.java Sat Sep 22 20:12:18 2012 +0200 @@ -0,0 +1,58 @@ +/** + * + */ +package de.mpiwg.itgroup.annotations.restlet.annotations_ui; + +import org.apache.log4j.Logger; +import org.restlet.Context; +import org.restlet.Restlet; +import org.restlet.routing.Router; + +import de.mpiwg.itgroup.annotations.restlet.BaseRestlet; + +/** + * @author casties + * + */ +public class AnnotationsUiRestlet extends BaseRestlet { + + public final String version = "AnnotationManagerN4J/AnnotationStore 0.1"; + + public static Logger logger = Logger.getLogger(AnnotationsUiRestlet.class); + + public AnnotationsUiRestlet(Context context) { + super(context); + logger.debug("StoreRestlet!"); + } + + /* + * (non-Javadoc) + * + * @see org.restlet.Application#createInboundRoot() + */ + @Override + public Restlet createInboundRoot() { + // this.authenticator = createAuthenticator(); + + Router router = new Router(getContext()); + + router.attach("/groups", GroupsResource.class); + router.attach("/groups/", GroupsResource.class); + router.attach("/groups/{id}", GroupResource.class); + router.attach("/groups/{id}/", GroupResource.class); + router.attach("/groups/{id}/members", GroupMembersResource.class); + + router.attach("/", InfoResource.class); + // authenticator.setNext(router); + // return authenticator; + + return router; + } + + + @Override + public String getVersion() { + return version; + } + +} diff -r b1fb0d117877 -r d22d01ba953a src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/GroupMembersResource.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/GroupMembersResource.java Sat Sep 22 20:12:18 2012 +0200 @@ -0,0 +1,115 @@ +/** + * + */ +package de.mpiwg.itgroup.annotations.restlet.annotations_ui; + +import java.util.List; + +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.Get; +import org.restlet.resource.Post; +import org.restlet.resource.ServerResource; + +import de.mpiwg.itgroup.annotations.Actor; +import de.mpiwg.itgroup.annotations.Group; +import de.mpiwg.itgroup.annotations.Person; +import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore; +import de.mpiwg.itgroup.annotations.restlet.BaseRestlet; + +/** + * Resource class for the members of an annotation group. + * + * @author casties + * + */ +public class GroupMembersResource extends ServerResource { + + public static Logger logger = Logger.getLogger(GroupMembersResource.class); + + private AnnotationStore store; + + /** + * GET with HTML content type. Shows the members of the group. + * + * @param entity + * @return + */ + @Get("html") + public Representation doGetHTML(Representation entity) { + // id from URI /annotations/groups/{id}/members + String id = (String) getRequest().getAttributes().get("id"); + logger.debug("group-id=" + id); + if (id == null || id.isEmpty()) { + // invalid id + setStatus(Status.CLIENT_ERROR_BAD_REQUEST); + return null; + } + String result = null; + store = getAnnotationStore(); + Reference groupsUrl = this.getReference().getParentRef(); + result = "\n

Members of group

\n"; + Group group = new Group(id); + group = (Group) store.getActor(group); + result += String.format("

Group: %s (%s)

\n", group.getName(), groupsUrl, group.getId()); + result += "

Members:

\n"; + result += ""; + List members = store.getMembersOfGroup(group); + for (Person p : members) { + result += String.format("\n", p.getName(), p.getIdString()); + } + result += "
%s(%s)
\n"; + result += "
\n"; + result += "

Add new member: \n"; + result += "\n"; + result += "

\n"; + result += "\n"; + + return new StringRepresentation(result, MediaType.TEXT_HTML); + } + + /** + * POST creates a new Group. + * + * @return + */ + @Post + public Representation doPost(Representation entity) { + logger.debug("AnnotationsUiGroup doPost!"); + // TODO: do authentication + Form form = new Form(entity); + String id = form.getFirstValue("id"); + String name = form.getFirstValue("name"); + if (id == null || id.isEmpty()) { + // invalid id + setStatus(Status.CLIENT_ERROR_BAD_REQUEST); + return null; + } + String gid = null; + Group newGroup = new Group(gid, null, name); + store = getAnnotationStore(); + Actor storedGroup = store.storeActor(newGroup); + gid = storedGroup.getId(); + // return 303: see other + setStatus(Status.REDIRECTION_SEE_OTHER); + // go GET URL for this group + Reference groupUrl = this.getReference(); + groupUrl.addSegment(gid); + this.getResponse().setLocationRef(groupUrl); + return null; + } + + protected AnnotationStore getAnnotationStore() { + if (store == null) { + store = ((BaseRestlet) getApplication()).getAnnotationStore(); + } + return store; + } +} diff -r b1fb0d117877 -r d22d01ba953a src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/GroupResource.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/GroupResource.java Sat Sep 22 20:12:18 2012 +0200 @@ -0,0 +1,107 @@ +/** + * + */ +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.Get; +import org.restlet.resource.Post; +import org.restlet.resource.ServerResource; + +import de.mpiwg.itgroup.annotations.Actor; +import de.mpiwg.itgroup.annotations.Group; +import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore; +import de.mpiwg.itgroup.annotations.restlet.BaseRestlet; + +/** + * Resource class for a single group. + * + * @author casties + * + */ +public class GroupResource extends ServerResource { + + public static Logger logger = Logger.getLogger(GroupResource.class); + + private AnnotationStore store; + + /** + * GET with HTML content type. Shows the group. + * + * @param entity + * @return + */ + @Get("html") + public Representation doGetHTML(Representation entity) { + // id from URI /annotations/groups/{id} + String id = (String) getRequest().getAttributes().get("id"); + logger.debug("group-id=" + id); + if (id == null || id.isEmpty()) { + // invalid id + setStatus(Status.CLIENT_ERROR_BAD_REQUEST); + return null; + } + String result = null; + store = getAnnotationStore(); + Reference groupsUrl = this.getReference().getParentRef(); + result = "\n

Group

\n"; + result += String.format("

All groups

", groupsUrl); + Group group = new Group(id); + group = (Group) store.getActor(group); + result += ""; + result += String.format("\n", group.getId()); + result += String.format("\n", group.getName()); + result += String.format("\n", group.getUri()); + result += String.format("\n", this.getReference() + .addSegment("members")); + result += "
id%s
name%s
uri%s
membersview members
\n\n"; + + logger.debug("sending:"); + logger.debug(result); + return new StringRepresentation(result, MediaType.TEXT_HTML); + } + + /** + * POST creates a new Group. + * + * @return + */ + @Post + public Representation doPost(Representation entity) { + logger.debug("AnnotationsUiGroup doPost!"); + // TODO: do authentication + Form form = new Form(entity); + String id = form.getFirstValue("id"); + String name = form.getFirstValue("name"); + if (id == null || id.isEmpty()) { + // invalid id + setStatus(Status.CLIENT_ERROR_BAD_REQUEST); + return null; + } + String gid = null; + Group newGroup = new Group(gid, null, name); + store = getAnnotationStore(); + Actor storedGroup = store.storeActor(newGroup); + gid = storedGroup.getId(); + // return 303: see other + setStatus(Status.REDIRECTION_SEE_OTHER); + // go GET URL for this group + Reference groupUrl = this.getReference(); + groupUrl.addSegment(gid); + this.getResponse().setLocationRef(groupUrl); + return null; + } + + protected AnnotationStore getAnnotationStore() { + if (store == null) { + store = ((BaseRestlet) getApplication()).getAnnotationStore(); + } + return store; + } +} diff -r b1fb0d117877 -r d22d01ba953a src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/GroupsResource.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/GroupsResource.java Sat Sep 22 20:12:18 2012 +0200 @@ -0,0 +1,112 @@ +/** + * + */ +package de.mpiwg.itgroup.annotations.restlet.annotations_ui; + +import java.util.List; + +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.Get; +import org.restlet.resource.Post; +import org.restlet.resource.ServerResource; + +import de.mpiwg.itgroup.annotations.Actor; +import de.mpiwg.itgroup.annotations.Group; +import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore; +import de.mpiwg.itgroup.annotations.restlet.BaseRestlet; + +/** + * Resource class for the list of annotation groups. + * + * @author casties + * + */ +public class GroupsResource extends ServerResource { + + public static Logger logger = Logger.getLogger(GroupsResource.class); + + private AnnotationStore store; + + /** + * GET with HTML content type. Lists all groups. + * + * @param entity + * @return + */ + @Get("html") + public Representation doGetHTML(Representation entity) { + String result = null; + store = getAnnotationStore(); + // list all groups + result = "\n

Groups

\n"; + result += ""; + List groups = store.getGroups("uri", "*"); + for (Group group : groups) { + Reference groupUrl = this.getReference(); + groupUrl.addSegment(group.getId()); + result += String.format("\n", groupUrl, group.getId(), + group.getName(), group.getUri()); + } + result += "
idnameuri
%s%s%s
\n\n"; + logger.debug("sending:"); + logger.debug(result); + return new StringRepresentation(result, MediaType.TEXT_HTML); + } + + /** + * POST creates a new Group. + * + * @return + */ + @Post + public Representation doPost(Representation entity) { + logger.debug("AnnotationsUiGroups doPost!"); + // TODO: do authentication + Form form = new Form(entity); + String id = form.getFirstValue("id"); + String name = form.getFirstValue("name"); + if (id == null || id.isEmpty()) { + // invalid id + setStatus(Status.CLIENT_ERROR_BAD_REQUEST); + return null; + } + String gid = makeGroupId(id); + Group newGroup = new Group(gid, null, name); + store = getAnnotationStore(); + Actor storedGroup = store.storeActor(newGroup); + gid = storedGroup.getId(); + // return 303: see other + setStatus(Status.REDIRECTION_SEE_OTHER); + // go GET URL for this group + Reference groupUrl = this.getReference(); + groupUrl.addSegment(gid); + this.getResponse().setLocationRef(groupUrl); + return null; + } + + /** + * Returns a group id based on the given id. + * + * @param id + * @return + */ + protected String makeGroupId(String id) { + // TODO: should we use different ids? + id = id.replaceAll("\\W", "_"); + id = id.toLowerCase(); + return id; + } + + protected AnnotationStore getAnnotationStore() { + if (store == null) { + store = ((BaseRestlet) getApplication()).getAnnotationStore(); + } + return store; + } +} diff -r b1fb0d117877 -r d22d01ba953a src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/InfoResource.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/InfoResource.java Sat Sep 22 20:12:18 2012 +0200 @@ -0,0 +1,24 @@ +package de.mpiwg.itgroup.annotations.restlet.annotations_ui; + +import java.io.InputStream; + +import org.restlet.data.MediaType; +import org.restlet.representation.InputRepresentation; +import org.restlet.representation.Representation; +import org.restlet.resource.Get; +import org.restlet.resource.ServerResource; + + +public class InfoResource extends ServerResource { + + @Get("html") + public Representation getHTML(){ + InputStream is = getClass().getResourceAsStream("/de/mpiwg/itgroup/annotations/annotationstore-info.html"); + + Representation rep = new InputRepresentation(is,MediaType.TEXT_HTML); + return rep; + + } + +} + diff -r b1fb0d117877 -r d22d01ba953a src/main/webapp/WEB-INF/web.xml --- a/src/main/webapp/WEB-INF/web.xml Thu Sep 20 17:42:26 2012 +0200 +++ b/src/main/webapp/WEB-INF/web.xml Sat Sep 22 20:12:18 2012 +0200 @@ -24,7 +24,7 @@ org.restlet.application - de.mpiwg.itgroup.annotations.restlet.AnnotationStoreRestlet + de.mpiwg.itgroup.annotations.restlet.annotations_ui.AnnotationsUiRestlet