annotate src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/GroupMembersResource.java @ 50:64aa756c60cc

annotations ui can show and delete annotations now.
author casties
date Thu, 27 Sep 2012 17:12:08 +0200
parents 707902d468f6
children 2b1e6df5e21a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
1 /**
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
2 *
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
3 */
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
4 package de.mpiwg.itgroup.annotations.restlet.annotations_ui;
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
5
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
6 import java.util.List;
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
7
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
8 import org.restlet.data.Form;
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
9 import org.restlet.data.MediaType;
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
10 import org.restlet.data.Reference;
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
11 import org.restlet.data.Status;
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
12 import org.restlet.representation.Representation;
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
13 import org.restlet.representation.StringRepresentation;
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
14 import org.restlet.resource.Get;
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
15 import org.restlet.resource.Post;
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
16
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
17 import de.mpiwg.itgroup.annotations.Person;
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
18
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
19 /**
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
20 * Resource class for the members of an annotation group.
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
21 *
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
22 * @author casties
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
23 *
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
24 */
24
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
25 public class GroupMembersResource extends GroupResource {
23
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
26
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
27 /**
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
28 * GET with HTML content type. Shows the members of the group.
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
29 *
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
30 * @param entity
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
31 * @return
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
32 */
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
33 @Get("html")
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
34 public Representation doGetHTML(Representation entity) {
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
35 // id from URI /annotations/groups/{id}/members
24
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
36 if (requestId == null || requestId.isEmpty()) {
23
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
37 // invalid id
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
38 setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
39 return null;
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
40 }
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
41 String result = null;
27
6bc918105c9a back to this.getReference, problem was with mod_proxy (ProxyPreserveHost).
casties
parents: 26
diff changeset
42 Reference thisUrl = this.getReference();
24
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
43 Reference groupsUrl = thisUrl.getParentRef();
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
44 result = "<html><body>\n<h1>Group members</h1>\n";
23
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
45 result += String.format("<p>Group: %s <a href=\"%s\">(%s)</a></p>\n", group.getName(), groupsUrl, group.getId());
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
46 result += "<p>Members:</p>\n";
27
6bc918105c9a back to this.getReference, problem was with mod_proxy (ProxyPreserveHost).
casties
parents: 26
diff changeset
47 result += String.format("<form method=\"post\" action=\"%s\">", thisUrl);
23
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
48 result += "<table>";
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
49 List<Person> members = store.getMembersOfGroup(group);
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
50 for (Person p : members) {
24
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
51 result += String.format("<tr><td>%s</td><td>(%s)</td>", p.getName(), p.getIdString());
25
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
52 result += String.format("<td><input type=\"submit\" name=\"del_member\" value=\"delete:%s\"></td></tr>\n", p.getIdString());
23
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
53 }
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
54 result += "</table>\n";
25
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
55 result += "</form>\n";
24
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
56 result += String.format("<form method=\"post\" action=\"%s\">\n", thisUrl);
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
57 result += "<p>Add new member: <select name=\"add_member\">\n";
45
707902d468f6 store reads and sends annotations resources now.
casties
parents: 27
diff changeset
58 for (Person p : store.getPersons("uri", "*")) {
24
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
59 result += String.format("<option value=\"%s\">%s</option>\n", p.getIdString(), p.getName());
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
60 }
23
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
61 result += "</select>\n";
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
62 result += "<input type=\"submit\"/>\n";
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
63 result += "</form>\n";
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
64 result += "</body>\n</html>";
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
65
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
66 return new StringRepresentation(result, MediaType.TEXT_HTML);
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
67 }
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
68
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
69 /**
24
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
70 * POST adds or deletes members of the Group.
23
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
71 *
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
72 * @return
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
73 */
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
74 @Post
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
75 public Representation doPost(Representation entity) {
24
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
76 logger.debug("GroupMembersResource doPost!");
23
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
77 // TODO: do authentication
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
78 Form form = new Form(entity);
24
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
79 String addMemberId = form.getFirstValue("add_member");
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
80 String delMemberId = form.getFirstValue("del_member");
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
81 if (group == null || ((addMemberId == null || addMemberId.isEmpty())
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
82 && (delMemberId == null || delMemberId.isEmpty()))) {
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
83 // no id
23
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
84 setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
85 return null;
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
86 }
25
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
87 if (addMemberId != null) {
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
88 logger.debug("adding member: "+addMemberId);
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
89 Person member = new Person(addMemberId);
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
90 store.addGroupMember(group, member);
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
91 } else if (delMemberId != null) {
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
92 if (delMemberId.startsWith("delete:")) {
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
93 delMemberId = delMemberId.substring(7);
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
94 }
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
95 logger.debug("deleting member: "+delMemberId);
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
96 Person member = new Person(delMemberId);
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
97 store.deleteGroupMember(group, member);
2140ef107551 adding and deleting group members.
casties
parents: 24
diff changeset
98 }
23
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
99 // return 303: see other
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
100 setStatus(Status.REDIRECTION_SEE_OTHER);
24
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
101 // go get same URL
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
102 Reference thisUrl = this.getReference();
e208a7b1a37a more work on groups ui.
casties
parents: 23
diff changeset
103 this.getResponse().setLocationRef(thisUrl);
23
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
104 return null;
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
105 }
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
106
d22d01ba953a reorganised code for annotations and groups ui. work in progress.
casties
parents:
diff changeset
107 }