view src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorAnnotationsByResources.java @ 50:64aa756c60cc

annotations ui can show and delete annotations now.
author casties
date Thu, 27 Sep 2012 17:12:08 +0200
parents 5e9d90461929
children c0dd5314bada
line wrap: on
line source

package de.mpiwg.itgroup.annotations.restlet;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.restlet.data.Form;
import org.restlet.data.Parameter;
import org.restlet.data.Status;
import org.restlet.ext.json.JsonRepresentation;
import org.restlet.representation.Representation;
import org.restlet.resource.Get;

import de.mpiwg.itgroup.annotations.Annotation;
import de.mpiwg.itgroup.annotations.Person;
import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
import de.mpiwg.itgroup.annotations.restlet.utils.JSONObjectComparator;

/**
 * API for accessing tags in the Annotation store.
 * 
 * @author dwinter
 *
 */
public class AnnotatorAnnotationsByResources extends AnnotatorResourceImpl {
    protected String getAllowedMethodsForHeader() {
        return "OPTIONS,GET";
    }
    
    @Get("json")
    public Representation doGetJSON(Representation entity) {
        logger.debug("AnnotatorAnnotatonsByResource doGetJSON!");
        setCorsHeaders();
       
        // do authentication
        Person authUser = Person.createPersonWithId(this.checkAuthToken(entity));
        logger.debug("request authenticated=" + authUser);

        
        String jsonId = (String) getRequest().getAttributes().get("id");
       
        Form form = getRequest().getResourceRef().getQueryAsForm();
        String sortBy=null;
        for (Parameter parameter : form) {
          if (parameter.getName().equals("sortBy")){
          sortBy =  parameter.getValue();
          }
        }
        
        String id = decodeJsonId(jsonId);
        //String id = jsonId;
        logger.debug("ressource-id=" + id);
        
        AnnotationStore store = getAnnotationStore();
  	  	//String tagUri=NS.MPIWG_TAGS_URL+id;
        List<Annotation> annotations = store.getAnnotationsByResource(id);
        
		//JSONArray results = new JSONArray();
        ArrayList<JSONObject> results = new ArrayList<JSONObject>();
        
		for (Annotation annot : annotations) {
			//check permission
			if (!annot.isActionAllowed("read", authUser, store)) continue;
            
			JSONObject jo = createAnnotatorJson(annot,false);
            results.add(jo);
        }
    
	if (sortBy!=null){
		JSONObjectComparator.sortAnnotations(results,sortBy);
	}
		
	JSONArray resultsJa = new JSONArray();
	for (JSONObject result:results){
		resultsJa.put(result);
	}
	
    // assemble result object
    JSONObject result = new JSONObject();
    try {
        result.put("rows", resultsJa);
        result.put("total", resultsJa.length());
    } catch (JSONException e) {
        setStatus(Status.SERVER_ERROR_INTERNAL, "JSON Error");
        return null;
    }
    logger.debug("sending:");
    logger.debug(result);
    return new JsonRepresentation(result);
}

    
	
}