Mercurial > hg > AnnotationManager
view src/de/mpiwg/itgroup/annotationManager/restlet/AnnotatorResourceImpl.java @ 8:11baadcdd2c8
start of new Annotator API implementation.
author | casties |
---|---|
date | Mon, 19 Mar 2012 14:50:28 +0100 |
parents | |
children | 0bdfe01e30b5 |
line wrap: on
line source
/** * Base class for Annotator resource classes. */ package de.mpiwg.itgroup.annotationManager.restlet; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.restlet.data.Form; import org.restlet.representation.Representation; import org.restlet.resource.Options; import org.restlet.resource.ServerResource; import de.mpiwg.itgroup.annotationManager.Constants.NS; import de.mpiwg.itgroup.annotationManager.RDFHandling.Convert; /** * Base class for Annotator resource classes. * * @author dwinter, casties * */ public abstract class AnnotatorResourceImpl extends ServerResource { protected String getAllowedMethodsForHeader() { return "OPTIONS,GET,POST"; } /** * Handle options request to allow CORS for AJAX. * * @param entity */ @Options public void doOptions(Representation entity) { Form responseHeaders = (Form) getResponse().getAttributes().get( "org.restlet.http.headers"); if (responseHeaders == null) { responseHeaders = new Form(); getResponse().getAttributes().put("org.restlet.http.headers", responseHeaders); } responseHeaders.add("Access-Control-Allow-Methods", getAllowedMethodsForHeader()); // echo back Origin and Request-Headers Form requestHeaders = (Form) getRequest().getAttributes().get( "org.restlet.http.headers"); String origin = requestHeaders.getFirstValue("Origin", true); if (origin == null) { responseHeaders.add("Access-Control-Allow-Origin", "*"); } else { responseHeaders.add("Access-Control-Allow-Origin", origin); } String allowHeaders = requestHeaders.getFirstValue( "Access-Control-Request-Headers", true); if (allowHeaders != null) { responseHeaders.add("Access-Control-Allow-Headers", allowHeaders); } responseHeaders.add("Access-Control-Allow-Credentials", "true"); responseHeaders.add("Access-Control-Max-Age", "60"); } /** * Erzeugt aus einer Annotation, das fuer den Annotator notwendige * JSON-Format * * @param annot * @return */ protected JSONObject annot2AnnotatorJSON(Convert.Annotation annot) { JSONObject jo = new JSONObject(); try { jo.put("text", annot.text); jo.put("uri", annot.url); JSONObject userObject = new JSONObject(); userObject.put("id", annot.creator); RestServer restServer = (RestServer) getApplication(); String userID = annot.creator; if (userID.startsWith(NS.MPIWG_PERSONS)) { userID = userID.replace(NS.MPIWG_PERSONS, ""); // entferne // NAMESPACE } String userName = restServer.getUserNameFromLdap(userID); userObject.put("name", userName); jo.put("user", userObject); List<String> xpointer = new ArrayList<String>(); if (annot.xpointers == null || annot.xpointers.size() == 0) xpointer.add(annot.xpointer); else { for (String xpointerString : annot.xpointers) { xpointer.add(xpointerString); } } jo.put("ranges", transformToRanges(xpointer)); jo.put("id", annot.annotationUri); return jo; } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } private JSONArray transformToRanges(List<String> xpointers) { JSONArray ja = new JSONArray(); Pattern rg = Pattern .compile("#xpointer\\(start-point\\(string-range\\(\"([^\"]*)\",([^,]*),1\\)\\)/range-to\\(end-point\\(string-range\\(\"([^\"]*)\",([^,]*),1\\)\\)\\)\\)"); Pattern rg1 = Pattern .compile("#xpointer\\(start-point\\(string-range\\(\"([^\"]*)\",([^,]*),1\\)\\)\\)"); try { for (String xpointer : xpointers) { String decoded = URLDecoder.decode(xpointer, "utf-8"); Matcher m = rg.matcher(decoded); if (m.find()) { { JSONObject jo = new JSONObject(); jo.put("start", m.group(1)); jo.put("startOffset", m.group(2)); jo.put("end", m.group(3)); jo.put("endOffset", m.group(4)); ja.put(jo); } } m = rg1.matcher(xpointer); if (m.find()) { JSONObject jo = new JSONObject(); jo.put("start", m.group(1)); jo.put("startOffset", m.group(2)); ja.put(jo); } } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return ja; } }