Changeset 63:9f8c9611848a in AnnotationManagerN4J for src


Ignore:
Timestamp:
Nov 23, 2012, 4:55:04 PM (11 years ago)
Author:
casties
Branch:
default
Message:

fixed bug with new rectangle shapes. added limit, offset and sortBy parameters to annotator/ and annotator/search.

Location:
src/main/java/de/mpiwg/itgroup/annotations
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • src/main/java/de/mpiwg/itgroup/annotations/neo4j/AnnotationStore.java

    r59 r63  
    790790     * @param uri
    791791     * @param userUri
    792      * @param limit
    793      * @param offset
    794      * @return
    795      */
    796     public List<Annotation> searchAnnotationByUriUser(String targetUri, String userUri, String limit, String offset) {
     792     * @return
     793     */
     794    public List<Annotation> searchAnnotationByUriUser(String targetUri, String userUri) {
    797795        List<Annotation> annotations = new ArrayList<Annotation>();
    798796        if (targetUri != null) {
    799797            // there should be only one
    800             Node target = getNodeIndex(NodeTypes.TARGET).get("uri", targetUri).getSingle();
     798            Node target = getNodeFromIndex("uri", targetUri, NodeTypes.TARGET);
    801799            if (target != null) {
    802800                Iterable<Relationship> relations = target.getRelationships(RelationTypes.ANNOTATES);
     
    829827        }
    830828        // TODO: if both uri and user are given we should intersect
     829       
    831830        return annotations;
    832831    }
  • src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorAnnotations.java

    r61 r63  
    1313import org.json.JSONObject;
    1414import org.restlet.data.Form;
    15 import org.restlet.data.Parameter;
    1615import org.restlet.data.Status;
    1716import org.restlet.ext.json.JsonRepresentation;
     
    6059
    6160        if (id == null) {
    62             return getAllAnnotations(authUser);
    63         }
    64 
     61            // no id -- send all annotations
     62            Form form = getRequest().getResourceRef().getQueryAsForm();
     63            int limit = getInt(form.getFirstValue("limit"));
     64            int offset = getInt(form.getFirstValue("offset"));
     65            String sortBy = form.getFirstValue("sortBy");
     66            return getAllAnnotations(authUser, limit, offset, sortBy);
     67        }
     68
     69        // send annotation with id
    6570        AnnotationStore store = getAnnotationStore();
    6671        Annotation annot = store.getAnnotationById(id);
     
    7176            }
    7277            JSONObject result = createAnnotatorJson(annot, (authUser == null));
    73             logger.debug("sending:");
    74             logger.debug(result);
    7578            return new JsonRepresentation(result);
    7679        } else {
     
    8184    }
    8285
    83     private Representation getAllAnnotations(Person authUser) {
    84 
    85         Form form = getRequest().getResourceRef().getQueryAsForm();
    86         String sortBy = null;
    87         for (Parameter parameter : form) {
    88             if (parameter.getName().equals("sortBy")) {
    89                 sortBy = parameter.getValue();
    90             }
    91         }
    92 
     86    private Representation getAllAnnotations(Person authUser, int limit, int offset, String sortBy) {
    9387        AnnotationStore store = getAnnotationStore();
    9488        ArrayList<JSONObject> results = new ArrayList<JSONObject>();
    95 
     89       
     90        // read all annotations
    9691        List<Annotation> annotations = store.getAnnotations(null, null);
    9792        for (Annotation annotation : annotations) {
    9893            // check permission
    9994            if (!annotation.isActionAllowed("read", authUser, store)) continue;
    100 
     95            // add annotation to list
    10196            JSONObject jo = createAnnotatorJson(annotation, false);
    10297            results.add(jo);
    10398        }
    10499
     100        // sort if necessary
    105101        if (sortBy != null) {
    106102            JSONObjectComparator.sortAnnotations(results, sortBy);
    107103        }
    108 
    109         JSONArray resultsJa = new JSONArray();
     104       
     105        // put in JSON list
     106        JSONArray rows = new JSONArray();
     107        int cnt = 0;
    110108        for (JSONObject result : results) {
    111             resultsJa.put(result);
     109            cnt += 1;
     110            if (offset > 0 && cnt < offset) continue;
     111            rows.put(result);
     112            if (limit > 0 && cnt >= limit) break;
    112113        }
    113114
     
    115116        JSONObject result = new JSONObject();
    116117        try {
    117             result.put("rows", resultsJa);
    118             result.put("total", resultsJa.length());
     118            result.put("rows", rows);
     119            result.put("total", rows.length());
    119120        } catch (JSONException e) {
    120121            setStatus(Status.SERVER_ERROR_INTERNAL, "JSON Error");
    121122            return null;
    122123        }
    123         logger.debug("sending:");
    124         logger.debug(result);
    125124        return new JsonRepresentation(result);
    126125    }
     
    234233            return retRep;
    235234        } catch (JSONException e) {
    236             e.printStackTrace();
     235            logger.error("Error in doPutJSON", e);
    237236            setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
    238237        } catch (IOException e) {
    239             e.printStackTrace();
     238            logger.error("Error in doPutJSON", e);
    240239            setStatus(Status.SERVER_ERROR_INTERNAL, "Other Error");
    241240        }
     
    269268            }
    270269        }
    271 
    272270        // delete annotation
    273271        store.deleteAnnotationById(id);
  • src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResourceImpl.java

    r61 r63  
    387387            String y = geom.getString("y");
    388388            fragment = String.format("xywh=fraction:%s,%s,0,0", x, y);
    389         } else if (type.equalsIgnoreCase("point")) {
     389        } else if (type.equalsIgnoreCase("rectangle")) {
    390390            String x = geom.getString("x");
    391391            String y = geom.getString("y");
    392             String width = shape.getString("width");
    393             String height = shape.getString("height");
     392            String width = geom.getString("width");
     393            String height = geom.getString("height");
    394394            fragment = String.format("xywh=fraction:%s,%s,%s,%s", x, y, width, height);
    395395        } else {
     
    417417        String startOffset = range.getString("startOffset");
    418418        String endOffset = range.getString("endOffset");
    419 
    420419        String fragment = String.format(
    421420                "xpointer(start-point(string-range(\"%s\",%s,1))/range-to(end-point(string-range(\"%s\",%s,1))))", start,
     
    560559        try {
    561560            if (jo.has("ranges")) {
    562                 JSONObject ranges = jo.getJSONArray("ranges").getJSONObject(0);
    563                 annot.setFragmentType(FragmentTypes.XPOINTER);
    564                 String fragment = parseRange(ranges);
    565                 annot.setTargetFragment(fragment);
     561                JSONArray ranges = jo.getJSONArray("ranges");
     562                if (ranges.length() > 0) {
     563                    JSONObject range = ranges.getJSONObject(0);
     564                    annot.setFragmentType(FragmentTypes.XPOINTER);
     565                    String fragment = parseRange(range);
     566                    annot.setTargetFragment(fragment);
     567                }
    566568            }
    567569        } catch (JSONException e) {
     
    570572        try {
    571573            if (jo.has("shapes")) {
    572                 JSONObject shapes = jo.getJSONArray("shapes").getJSONObject(0);
    573                 annot.setFragmentType(FragmentTypes.AREA);
    574                 String fragment = parseShape(shapes);
    575                 annot.setTargetFragment(fragment);
     574                JSONArray shapes = jo.getJSONArray("shapes");
     575                if (shapes.length() > 0) {
     576                    JSONObject shape = shapes.getJSONObject(0);
     577                    annot.setFragmentType(FragmentTypes.AREA);
     578                    String fragment = parseShape(shape);
     579                    annot.setTargetFragment(fragment);
     580                }
    576581            }
    577582        } catch (JSONException e) {
     
    581586        try {
    582587            if (jo.has("areas")) {
    583                 JSONObject area = jo.getJSONArray("areas").getJSONObject(0);
    584                 annot.setFragmentType(FragmentTypes.AREA);
    585                 String fragment = parseArea(area);
    586                 annot.setTargetFragment(fragment);
     588                JSONArray areas = jo.getJSONArray("areas");
     589                if (areas.length() > 0) {
     590                    JSONObject area = areas.getJSONObject(0);
     591                    annot.setFragmentType(FragmentTypes.AREA);
     592                    String fragment = parseArea(area);
     593                    annot.setTargetFragment(fragment);
     594                }
    587595            }
    588596        } catch (JSONException e) {
    589597            // nothing to do
    590598        }
    591 
     599        // no fragment is an error
     600        if (annot.getFragmentType() == null || annot.getTargetFragment() == null) {
     601            throw new JSONException("Annotation has no valid target fragment!");
     602        }
     603       
    592604        /*
    593605         * permissions
     
    650662    }
    651663
    652     public float getFloat(String s) {
     664    public static float getFloat(String s) {
    653665        try {
    654666            return Float.parseFloat(s);
     
    657669        return 0f;
    658670    }
     671
     672    public static int getInt(String s) {
     673        try {
     674            return Integer.parseInt(s);
     675        } catch (NumberFormatException e) {
     676        }
     677        return 0;
     678    }
    659679}
  • src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorRestlet.java

    r62 r63  
    1515public class AnnotatorRestlet extends BaseRestlet {
    1616
    17     public final String version = "AnnotationManagerN4J/Annotator 0.3.0";
     17    public final String version = "AnnotationManagerN4J/Annotator 0.3.1";
    1818
    1919    public static Logger logger = Logger.getLogger(AnnotatorRestlet.class);
  • src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorSearch.java

    r32 r63  
    44package de.mpiwg.itgroup.annotations.restlet;
    55
     6import java.util.ArrayList;
    67import java.util.List;
    78
     
    1819import de.mpiwg.itgroup.annotations.Person;
    1920import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
     21import de.mpiwg.itgroup.annotations.restlet.utils.JSONObjectComparator;
    2022
    2123/**
     
    3436    /**
    3537     * result for JSON content-type. optional search parameters: uri, user, limit,
    36      * offset.
     38     * offset, sortBy.
    3739     *
    3840     * @param entity
     
    5052        String uri = form.getFirstValue("uri");
    5153        String user = form.getFirstValue("user");
    52         String limit = form.getFirstValue("limit");
    53         String offset = form.getFirstValue("offset");
     54        int limit = getInt(form.getFirstValue("limit"));
     55        int offset = getInt(form.getFirstValue("offset"));
     56        String sortBy = form.getFirstValue("sortBy");
    5457
    55         JSONArray results = new JSONArray();
    5658        // do search
     59        ArrayList<JSONObject> results = new ArrayList<JSONObject>();
    5760        logger.debug(String.format("searching for uri=%s user=%s", uri, user));
    5861        AnnotationStore store = getAnnotationStore();
    59         List<Annotation> annots = store.searchAnnotationByUriUser(uri, user, limit, offset);
     62        List<Annotation> annots = store.searchAnnotationByUriUser(uri, user);
    6063        for (Annotation annot : annots) {
    6164            // check permission
     
    6366            JSONObject jo = createAnnotatorJson(annot, (authUser == null));
    6467            if (jo != null) {
    65                 results.put(jo);
     68                results.add(jo);
    6669            } else {
    6770                setStatus(Status.SERVER_ERROR_INTERNAL, "JSON Error");
     
    6972            }
    7073        }
     74
     75        // sort if necessary
     76        if (sortBy != null) {
     77            JSONObjectComparator.sortAnnotations(results, sortBy);
     78        }
     79       
     80        // put in JSON list
     81        JSONArray rows = new JSONArray();
     82        int cnt = 0;
     83        for (JSONObject result : results) {
     84            cnt += 1;
     85            if (offset > 0 && cnt < offset) continue;
     86            rows.put(result);
     87            if (limit > 0 && cnt >= limit) break;
     88        }
     89
    7190        // assemble result object
    7291        JSONObject result = new JSONObject();
    7392        try {
    74             result.put("rows", results);
    75             result.put("total", results.length());
     93            result.put("rows", rows);
     94            result.put("total", rows.length());
    7695        } catch (JSONException e) {
    7796            setStatus(Status.SERVER_ERROR_INTERNAL, "JSON Error");
  • src/main/java/de/mpiwg/itgroup/annotations/restlet/utils/JSONObjectComparator.java

    r31 r63  
    33import java.util.Comparator;
    44import java.util.List;
    5 
    6 import de.mpiwg.itgroup.annotations.Annotation;
    75
    86import org.json.JSONException;
Note: See TracChangeset for help on using the changeset viewer.