diff src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResourceImpl.java @ 16:794077e6288c

CLOSED - # 252: Tags for Annotations https://it-dev.mpiwg-berlin.mpg.de/tracs/mpdl-project-software/ticket/252
author casties
date Tue, 04 Sep 2012 20:02:59 +0200
parents 58357a4b86de
children aafa3884b2c4
line wrap: on
line diff
--- a/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResourceImpl.java	Tue Aug 28 20:23:12 2012 +0200
+++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResourceImpl.java	Tue Sep 04 20:02:59 2012 +0200
@@ -9,7 +9,9 @@
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -189,6 +191,9 @@
             jo.put("text", annot.getBodyText());
             jo.put("uri", annot.getTargetBaseUri());
 
+            /*
+             * user
+             */
             if (makeUserObject) {
                 // create user object
                 JSONObject userObject = new JSONObject();
@@ -213,6 +218,9 @@
                 jo.put("user", annot.getCreatorUri());
             }
 
+            /*
+             * ranges
+             */
             if (annot.getTargetFragment() != null) {
                 // we only look at the first xpointer
                 List<String> fragments = new ArrayList<String>();
@@ -225,7 +233,9 @@
                 }
             }
             
-            // permissions
+            /*
+             * permissions
+             */
             JSONObject perms = new JSONObject();
             jo.put("permissions", perms);
             // admin
@@ -266,6 +276,21 @@
                 readPerms.put(readPerm.getIdString());
             }
             
+            /*
+             * tags
+             */
+            Set<String> tagset = annot.getTags(); 
+            if (tagset != null) {
+                JSONArray tags = new JSONArray();
+                jo.put("tags", tags);
+                for (String tag : tagset) {
+                    tags.put(tag);
+                }
+            }
+            
+            /*
+             * id
+             */
             // encode Annotation URL (=id) in base64
             String annotUrl = annot.getUri();
             String annotId = encodeJsonId(annotUrl);
@@ -412,15 +437,21 @@
      */
     public Annotation updateAnnotation(Annotation annot, JSONObject jo, Representation entity) throws JSONException,
             UnsupportedEncodingException {
-        // target uri
+        /*
+         * target uri
+         */
         if (jo.has("uri")) {
             annot.setTargetBaseUri(jo.getString("uri"));
         }
-        // annotation text
+        /*
+         * annotation text
+         */
         if (jo.has("text")) {
             annot.setBodyText(jo.getString("text"));
         }
-        // check authentication
+        /*
+         * check authentication
+         */
         String authUser = checkAuthToken(entity);
         if (authUser == null) {
             /*
@@ -433,7 +464,9 @@
              * } authUser = httpUser.getIdentifier();
              */
         }
-        // get or create creator object
+        /*
+         * get or create creator object
+         */
         Actor creator = annot.getCreator();
         if (creator == null) {
             creator = new Person();
@@ -482,7 +515,9 @@
         if (creator.getUri() == null) {
             creator.setUri(userUri);
         }
-
+        /*
+         * creation date
+         */
         if (annot.getCreated() == null) {
             // set creation date
             SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
@@ -490,7 +525,9 @@
             annot.setCreated(ct);
         }
 
-        // create xpointer from the first range/area
+        /*
+         * create xpointer from the first range/area
+         */
         if (jo.has("ranges")) {
             JSONObject ranges = jo.getJSONArray("ranges").getJSONObject(0);
             annot.setFragmentType(FragmentTypes.XPOINTER);
@@ -504,7 +541,9 @@
             annot.setTargetFragment(fragment);
         }
 
-        // permissions
+        /*
+         * permissions
+         */
         if (jo.has("permissions")) {
             JSONObject permissions = jo.getJSONObject("permissions");
             if (permissions.has("admin")) {
@@ -529,6 +568,19 @@
             }
         }
 
+        /*
+         * tags
+         */
+        if (jo.has("tags")) {
+            HashSet<String> tagset = new HashSet<String>();
+            JSONArray tags = jo.getJSONArray("tags");
+            for (int i = 0; i < tags.length(); ++i) {
+                tagset.add(tags.getString(i));
+            }
+            annot.setTags(tagset);
+        }
+
+        
         return annot;
     }