diff src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResourceImpl.java @ 63:9f8c9611848a

fixed bug with new rectangle shapes. added limit, offset and sortBy parameters to annotator/ and annotator/search.
author casties
date Fri, 23 Nov 2012 17:55:04 +0100
parents b8ef15c8c4a5
children c48435e7f312
line wrap: on
line diff
--- a/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResourceImpl.java	Thu Nov 22 17:45:23 2012 +0100
+++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResourceImpl.java	Fri Nov 23 17:55:04 2012 +0100
@@ -386,11 +386,11 @@
             String x = geom.getString("x");
             String y = geom.getString("y");
             fragment = String.format("xywh=fraction:%s,%s,0,0", x, y);
-        } else if (type.equalsIgnoreCase("point")) {
+        } else if (type.equalsIgnoreCase("rectangle")) {
             String x = geom.getString("x");
             String y = geom.getString("y");
-            String width = shape.getString("width");
-            String height = shape.getString("height");
+            String width = geom.getString("width");
+            String height = geom.getString("height");
             fragment = String.format("xywh=fraction:%s,%s,%s,%s", x, y, width, height);
         } else {
             logger.error("Unable to parse this shape: " + shape);
@@ -416,7 +416,6 @@
         String end = range.getString("end");
         String startOffset = range.getString("startOffset");
         String endOffset = range.getString("endOffset");
-
         String fragment = String.format(
                 "xpointer(start-point(string-range(\"%s\",%s,1))/range-to(end-point(string-range(\"%s\",%s,1))))", start,
                 startOffset, end, endOffset);
@@ -559,20 +558,26 @@
          */
         try {
             if (jo.has("ranges")) {
-                JSONObject ranges = jo.getJSONArray("ranges").getJSONObject(0);
-                annot.setFragmentType(FragmentTypes.XPOINTER);
-                String fragment = parseRange(ranges);
-                annot.setTargetFragment(fragment);
+                JSONArray ranges = jo.getJSONArray("ranges");
+                if (ranges.length() > 0) {
+                    JSONObject range = ranges.getJSONObject(0);
+                    annot.setFragmentType(FragmentTypes.XPOINTER);
+                    String fragment = parseRange(range);
+                    annot.setTargetFragment(fragment);
+                }
             }
         } catch (JSONException e) {
             // nothing to do
         }
         try {
             if (jo.has("shapes")) {
-                JSONObject shapes = jo.getJSONArray("shapes").getJSONObject(0);
-                annot.setFragmentType(FragmentTypes.AREA);
-                String fragment = parseShape(shapes);
-                annot.setTargetFragment(fragment);
+                JSONArray shapes = jo.getJSONArray("shapes");
+                if (shapes.length() > 0) {
+                    JSONObject shape = shapes.getJSONObject(0);
+                    annot.setFragmentType(FragmentTypes.AREA);
+                    String fragment = parseShape(shape);
+                    annot.setTargetFragment(fragment);
+                }
             }
         } catch (JSONException e) {
             // nothing to do
@@ -580,15 +585,22 @@
         // deprecated areas type
         try {
             if (jo.has("areas")) {
-                JSONObject area = jo.getJSONArray("areas").getJSONObject(0);
-                annot.setFragmentType(FragmentTypes.AREA);
-                String fragment = parseArea(area);
-                annot.setTargetFragment(fragment);
+                JSONArray areas = jo.getJSONArray("areas");
+                if (areas.length() > 0) {
+                    JSONObject area = areas.getJSONObject(0);
+                    annot.setFragmentType(FragmentTypes.AREA);
+                    String fragment = parseArea(area);
+                    annot.setTargetFragment(fragment);
+                }
             }
         } catch (JSONException e) {
             // nothing to do
         }
-
+        // no fragment is an error
+        if (annot.getFragmentType() == null || annot.getTargetFragment() == null) {
+            throw new JSONException("Annotation has no valid target fragment!");
+        }
+        
         /*
          * permissions
          */
@@ -649,11 +661,19 @@
         return actor;
     }
 
-    public float getFloat(String s) {
+    public static float getFloat(String s) {
         try {
             return Float.parseFloat(s);
         } catch (NumberFormatException e) {
         }
         return 0f;
     }
+
+    public static int getInt(String s) {
+        try {
+            return Integer.parseInt(s);
+        } catch (NumberFormatException e) {
+        }
+        return 0;
+    }
 }