# HG changeset patch # User dwinter # Date 1322207005 -3600 # Node ID e5f0906c107cd7f887683e2e6928b1af13950a78 # Parent 6888ae3287b8b9edd5f672ae86b0b4cda3b33bfd Neue Startseite Header bei Post werden jetzt richtig gesetzt. diff -r 6888ae3287b8 -r e5f0906c107c src/de/mpiwg/itgroup/annotationManager/RDFHandling/Convert.java --- a/src/de/mpiwg/itgroup/annotationManager/RDFHandling/Convert.java Thu Nov 24 11:39:12 2011 +0100 +++ b/src/de/mpiwg/itgroup/annotationManager/RDFHandling/Convert.java Fri Nov 25 08:43:25 2011 +0100 @@ -216,7 +216,7 @@ } - public String storeAnnotation(Convert.Annotation annot) throws TripleStoreStoreError { + public Annotation storeAnnotation(Convert.Annotation annot) throws TripleStoreStoreError { //Convert convert = new Convert(""); @@ -252,8 +252,8 @@ } - - return getAnnotUrl(); + annot.annotationUri=getAnnotUrl(); + return annot; } diff -r 6888ae3287b8 -r e5f0906c107c src/de/mpiwg/itgroup/annotationManager/restlet/AddAndSearchAnnotations.java --- a/src/de/mpiwg/itgroup/annotationManager/restlet/AddAndSearchAnnotations.java Thu Nov 24 11:39:12 2011 +0100 +++ b/src/de/mpiwg/itgroup/annotationManager/restlet/AddAndSearchAnnotations.java Fri Nov 25 08:43:25 2011 +0100 @@ -40,14 +40,6 @@ private Logger logger = Logger.getRootLogger(); - /** - * - * json hash: username: name des users xpointer: xpointer auf den Ausschnitt - * (incl. der URL des Dokumentes) text: text der annotation annoturl: url - * auf eine Annotation falls extern - * - * @return - */ @Options @@ -82,7 +74,7 @@ RDFSearcher searcher = new RDFSearcher("file:///annotations"); //TODO should ge into config file String retString=""; - String lineFormat="" + + String lineFormat="" + ""; try { @@ -96,11 +88,10 @@ List xpointer = new ArrayList(); if (annot.xpointers==null || annot.xpointers.size()==0) - retString+=String.format(lineFormat, userName,annot.url,annot.url,annot.time,annot.text,annot.xpointer,annot.xpointer,annot.annotationUri,annot.annotationUri); + retString+=String.format(lineFormat, userName,userName,annot.url,annot.url,annot.time,annot.text,annot.xpointer,annot.xpointer,annot.annotationUri,annot.annotationUri); else { for(String xpointerString:annot.xpointers){ - retString+=String.format(lineFormat, userName,annot.url,annot.url,annot.time,annot.text,xpointerString,xpointerString,annot.annotationUri,annot.annotationUri); - + retString+=String.format(lineFormat, userName,userName,annot.url,annot.url,annot.time,annot.text,xpointerString,xpointerString,annot.annotationUri,annot.annotationUri); } } @@ -124,6 +115,49 @@ return new StringRepresentation(retString,MediaType.TEXT_HTML); } + /** + * Erzeugt aus einer Annotation, das fŸr den Annotator notwendige JSON-Format + * @param annot + * @return + */ + public 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 xpointer = new ArrayList(); + + 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; + } + } @Get("json") public Representation doGetJSON(Representation entity){ @@ -147,35 +181,41 @@ ja = new JSONArray(); for (Convert.Annotation annot:annots){ - JSONObject jo = new JSONObject(); - 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 +// JSONObject jo = new JSONObject(); +// 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 xpointer = new ArrayList(); +// +// 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)); + JSONObject jo = annot2AnnotatorJSON(annot); + if (jo!=null){ + ja.put(annot2AnnotatorJSON(annot)); + } else { + setStatus(Status.SERVER_ERROR_INTERNAL,"JSon Error"); + return null; } - String userName=restServer.getUserNameFromLdap(userID); - userObject.put("name",userName); - - jo.put("user",userObject); - - List xpointer = new ArrayList(); - - 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)); - ja.put(jo); } } catch (TripleStoreHandlerException e) { // TODO Auto-generated catch block @@ -187,12 +227,7 @@ e.printStackTrace(); setStatus(Status.SERVER_ERROR_INTERNAL,"TripleStoreSearch Error"); return null; - } catch (JSONException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - setStatus(Status.SERVER_ERROR_INTERNAL,"JSon Error"); - return null; - } + } JSONObject retObject = new JSONObject(); try { @@ -262,24 +297,41 @@ } + + /** + * + * json hash: username: name des users xpointer: xpointer auf den Ausschnitt + * (incl. der URL des Dokumentes) text: text der annotation annoturl: url + * auf eine Annotation falls extern + * + * @return + */ + @Post("json") public Representation doPostJson(Representation entity) { - String retVal = doPost(entity); - JSONObject jo; - try { - jo = new JSONObject("{\"annotUrl\":\"" + retVal + "\"}"); - } catch (JSONException e) { - setStatus(Status.SERVER_ERROR_INTERNAL); + Annotation retVal = doPost(entity); + + +// JSONObject jo; +// try { +// jo = new JSONObject("{\"annotUrl\":\"" + retVal + "\"}"); +// } catch (JSONException e) { +// setStatus(Status.SERVER_ERROR_INTERNAL); +// return null; +// } + + if (retVal==null) return null; - } + JSONObject jo = annot2AnnotatorJSON(retVal); JsonRepresentation retRep = new JsonRepresentation(jo); return retRep; } @Post("html") public Representation doPostHtml(Representation entity) { - String retVal = doPost(entity); + Annotation retValAnnot = doPost(entity); + String retVal=retValAnnot.annotationUri; if (retVal == null) { return null; } @@ -292,7 +344,9 @@ return retRep; } - public String doPost(Representation entity) { + public Convert.Annotation doPost(Representation entity) { + + doOptions(entity); Convert.Annotation annot; // versuche basic authentifizierung und hole den Benutzer von dort. @@ -490,7 +544,7 @@ /** * uses the specification from the annotator project. * - * @see{https://github.com/okfn/annotator/wiki/Annotation-format The user + * @see{https://github.com/okfn/annotator/wiki/Annotation-format} The user * object must * contain an * id and diff -r 6888ae3287b8 -r e5f0906c107c src/de/mpiwg/itgroup/annotationManager/restlet/AnnotatorInfo.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/de/mpiwg/itgroup/annotationManager/restlet/AnnotatorInfo.java Fri Nov 25 08:43:25 2011 +0100 @@ -0,0 +1,54 @@ +package de.mpiwg.itgroup.annotationManager.restlet; + +import java.io.InputStream; + +import org.apache.log4j.Logger; +import org.restlet.data.Form; +import org.restlet.data.MediaType; +import org.restlet.representation.InputRepresentation; +import org.restlet.representation.Representation; +import org.restlet.representation.StringRepresentation; +import org.restlet.resource.Get; +import org.restlet.resource.Options; +import org.restlet.resource.Post; +import org.restlet.resource.ServerResource; + + + + + +public class AnnotatorInfo extends ServerResource { + +private Logger logger = Logger.getRootLogger(); + + /** + * Erlaubt cross scripting bei Aufruf aus Javascript + * @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-Origin", "*"); + responseHeaders.add("Access-Control-Allow-Methods", "POST,OPTIONS,GET"); + responseHeaders.add("Access-Control-Allow-Headers", "Content-Type"); + responseHeaders.add("Access-Control-Allow-Credentials", "false"); + responseHeaders.add("Access-Control-Max-Age", "60"); + } + + + + @Get("html") + public Representation getHTML(){ + InputStream is = getClass().getResourceAsStream("/de/mpiwg/itgroup/annotationManager/staticPages/main.html"); + + Representation rep = new InputRepresentation(is,MediaType.TEXT_HTML); + return rep; + + } + +} + diff -r 6888ae3287b8 -r e5f0906c107c src/de/mpiwg/itgroup/annotationManager/restlet/RestServer.java --- a/src/de/mpiwg/itgroup/annotationManager/restlet/RestServer.java Thu Nov 24 11:39:12 2011 +0100 +++ b/src/de/mpiwg/itgroup/annotationManager/restlet/RestServer.java Fri Nov 25 08:43:25 2011 +0100 @@ -34,6 +34,7 @@ import org.restlet.data.ClientInfo; import org.restlet.engine.component.ChildContext; import org.restlet.ext.jaas.JaasVerifier; +import org.restlet.routing.Redirector; import org.restlet.routing.Router; import org.restlet.routing.Template; import org.restlet.routing.TemplateRoute; @@ -125,12 +126,19 @@ this.authenticator = createAuthenticator(); + //String target = "{rh}/{rf}/XX"; + //Redirector redirector = new Redirector(getContext().createChildContext(), target, + // Redirector.MODE_CLIENT_SEE_OTHER); + Router router = new Router(getContext()); + router.attach("/annotations",AddAndSearchAnnotations.class); router.attach("/search",AddAndSearchAnnotations.class); // annotator api askes for different uris for search and adding router.attach("/dummy",Dummy.class); + //router.attach("",redirector); + router.attach("/",AnnotatorInfo.class); authenticator.setNext(router); return authenticator; diff -r 6888ae3287b8 -r e5f0906c107c src/de/mpiwg/itgroup/annotationManager/staticPages/main.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/de/mpiwg/itgroup/annotationManager/staticPages/main.html Fri Nov 25 08:43:25 2011 +0100 @@ -0,0 +1,6 @@ + + +

Annotation manager

+

Annotations overview

+ + \ No newline at end of file
%s
%s%s%s%s%s%s