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