source: AnnotationManagerN4J/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorAnnotationsByTags.java @ 105:7417f5915181

tip
Last change on this file since 105:7417f5915181 was 105:7417f5915181, checked in by casties, 7 years ago

check admin permission before changing permissions.
Enum for typesafe actions.

File size: 3.5 KB
Line 
1package de.mpiwg.itgroup.annotations.restlet;
2
3/*
4 * #%L
5 * AnnotationManager
6 * %%
7 * Copyright (C) 2012 - 2014 MPIWG Berlin
8 * %%
9 * This program is free software: you can redistribute it and/or modify
10 * it under the terms of the GNU Lesser General Public License as
11 * published by the Free Software Foundation, either version 3 of the
12 * License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 * GNU General Lesser Public License for more details.
18 *
19 * You should have received a copy of the GNU General Lesser Public
20 * License along with this program.  If not, see
21 * <http://www.gnu.org/licenses/lgpl-3.0.html>.
22 * #L%
23 */
24
25import java.io.UnsupportedEncodingException;
26import java.net.URLDecoder;
27import java.util.ArrayList;
28import java.util.List;
29
30import org.json.JSONArray;
31import org.json.JSONException;
32import org.json.JSONObject;
33import org.restlet.data.Form;
34import org.restlet.data.Status;
35import org.restlet.ext.json.JsonRepresentation;
36import org.restlet.representation.Representation;
37import org.restlet.resource.Get;
38
39import de.mpiwg.itgroup.annotations.Annotation;
40import de.mpiwg.itgroup.annotations.Annotation.Action;
41import de.mpiwg.itgroup.annotations.Person;
42import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
43import de.mpiwg.itgroup.annotations.restlet.utils.JSONObjectComparator;
44
45/**
46 * API for accessing tags in the Annotation store.
47 *
48 * @author dwinter
49 *
50 */
51public class AnnotatorAnnotationsByTags extends AnnotatorResourceImpl {
52
53    @Get("json")
54    public Representation doGetJSON(Representation entity) {
55        logger.fine("AnnotatorAnnotatonsBytag doGetJSON!");
56
57        // do authentication
58        Person authUser = getUserFromAuthToken(entity);
59        logger.fine("request authenticated=" + authUser);
60
61        String id = (String) getRequest().getAttributes().get("id");
62        // URL decode
63        try {
64            id = URLDecoder.decode(id, "UTF-8");
65        } catch (UnsupportedEncodingException e) {
66            // this shouldn't happen
67        }
68        logger.fine("annotation-id=" + id);
69
70        Form form = getRequest().getResourceRef().getQueryAsForm();
71        String sortBy = form.getFirstValue("sortBy");
72
73        AnnotationStore store = getAnnotationStore();
74        String tagUri = BaseRestlet.TAGS_URI_PREFIX + id;
75        List<Annotation> annotations = store.getAnnotationsByTag(tagUri);
76
77        // JSONArray results = new JSONArray();
78        ArrayList<JSONObject> results = new ArrayList<JSONObject>();
79
80        for (Annotation annot : annotations) {
81            // check permission
82            if (!annot.isActionAllowed(Action.read, authUser, store))
83                continue;
84
85            JSONObject jo = createAnnotatorJson(annot, false);
86            results.add(jo);
87        }
88
89        if (sortBy != null) {
90            JSONObjectComparator.sortAnnotations(results, sortBy);
91        }
92
93        JSONArray resultsJa = new JSONArray();
94        for (JSONObject result : results) {
95            resultsJa.put(result);
96        }
97
98        // assemble result object
99        JSONObject result = new JSONObject();
100        try {
101            result.put("rows", resultsJa);
102            result.put("total", resultsJa.length());
103        } catch (JSONException e) {
104            setStatus(Status.SERVER_ERROR_INTERNAL, "JSON Error");
105            return null;
106        }
107        return new JsonRepresentation(result);
108    }
109
110}
Note: See TracBrowser for help on using the repository browser.