source: AnnotationManagerN4J/src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/GroupMembersResource.java @ 27:6bc918105c9a

Last change on this file since 27:6bc918105c9a was 27:6bc918105c9a, checked in by casties, 12 years ago

back to this.getReference, problem was with mod_proxy (ProxyPreserveHost?).

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