Mercurial > hg > AnnotationManager
diff src/de/mpiwg/itgroup/annotationManager/RDFHandling/Convert.java @ 0:77530be3c747
intial
author | dwinter |
---|---|
date | Tue, 22 Nov 2011 15:47:57 +0100 |
parents | |
children | 6888ae3287b8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/de/mpiwg/itgroup/annotationManager/RDFHandling/Convert.java Tue Nov 22 15:47:57 2011 +0100 @@ -0,0 +1,239 @@ +package de.mpiwg.itgroup.annotationManager.RDFHandling; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import org.apache.log4j.Logger; +import org.openrdf.repository.RepositoryException; +import org.restlet.Context; +import org.restlet.engine.component.ChildContext; + +import de.mpiwg.itgroup.annotationManager.Constants.NS; +import de.mpiwg.itgroup.annotationManager.Errors.TripleStoreStoreError; +import de.mpiwg.itgroup.annotationManager.Errors.XPointerError; +import de.mpiwg.itgroup.nimanager.exceptions.TripleStoreHandlerException; +import de.mpiwg.itgroup.nimanager.owl.TripleStoreHandler; +import de.mpiwg.itgroup.nimanager.owl.TripleStoreHandler.Quadruple; +import de.mpiwg.itgroup.nimanager.owl.TripleStoreHandler.LiteralQuadruple; + +/** + * @author dwinter + * + * Klasse zum Konvertieren von Annotationen zum mpiwg RDF-Format: + * http://ontologies.mpiwg-berlin.mpg.de/annotations/ + */ + +public class Convert { + private String ctx; + private Logger logger = Logger.getRootLogger(); + private String urlBase="http://ontologies.mpiwg-berlin.mpg.de/annotations/"; //TODO should go into config + public Convert(String c){ + ctx=c; + } + + /** + * Fasst alle Parameter zusammen, die eine Annotation bilden + * @author dwinter + * + */ + static public class Annotation { + public String xpointer=null; //if queried xpointer should contain the first xpointer in the xpointers list, if there is more than one. + public String creator=null; + public String time=null; + public String text=null; + public String type=null; + public String url; + public List<String> xpointers=null; // list of xpointers on the page url, can be empty or null if there is only one. + + /** + * @param xpointer Beschreibt die Annotation + * @param creator Username des Creators + * @param time Erstellungszeit, wenn null wird das aktuelle Datum verwenden beim Konvertieren + * @param text der Annotation + * @param type Annotationstype (Entsprechend den in http://www.w3.org/2000/10/annotationType# definierten.) + * @param url Url einer Annotation + */ + public Annotation(String xpointer, String creator, String time, String text, String type, String url){ + this.xpointer=xpointer; + this.creator=creator; + this.time=time; + this.text=text; + this.type=type; + this.url=url; + } + + /** + * @param xpointer Beschreibt die Annotation + * @param creator Username des Creators + * @param time Erstellungszeit, wenn null wird das aktuelle Datum verwenden beim Konvertieren + * @param text der Annotation + * @param type Annotationstype (Entsprechend den in http://www.w3.org/2000/10/annotationType# definierten.) + */ + public Annotation(String xpointer, String creator, String time, String annot, String type){ + this.xpointer=xpointer; + this.creator=creator; + this.time=time; + this.text=annot; + this.type=type; + this.url=null; + } + + + } + private String annotUrl=null; + + /** + * + * @param xpointer Beschreibt die Annotation + * @param creator Username des Creators + * @param time Erstellungszeit, wenn null wird das aktuelle Datum verwenden beim Konvertieren + * @param text der Annotation + * @param type Annotationstype (Entsprechend den in http://www.w3.org/2000/10/annotationType# definierten.) + * @return + */ + + private List<Quadruple> annot2quadruple(String xpointer, String creator, String time, String annot, String type){ + return annot2quadruple(new Annotation(xpointer, creator, time, annot, type)); + } + + + /** + * @param annot + * @return + */ + public List<Quadruple> annot2quadruple(Annotation annot){ + List<Quadruple> retQuad = new ArrayList<Quadruple>(); + + String annotation = createRessourceURL("annot:"); + + if (annot.time==null){ + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss'Z'"); + annot.time=format.format(Calendar.getInstance().getTime()); + + } + + //TODO: check type + retQuad.add(new Quadruple(annotation, NS.RDF+"type", NS.ANNOTATION_TYPE+annot.type, ctx)); + + //add author + retQuad.add(new LiteralQuadruple(annotation, NS.ANNOTATION_NS+"author", annot.creator, ctx)); + + // creation time + retQuad.add(new LiteralQuadruple(annotation, NS.ANNOTATION_NS+"created", annot.time, ctx)); + + String[] xpointerSplitted = annot.xpointer.split("#"); + + if (xpointerSplitted.length>2){ + annotUrl=null; + throw new XPointerError(); + } + + // now add the xpointers + retQuad.add(new Quadruple(annotation, NS.MPIWG_annot+"docuviewerText", xpointerSplitted[0], ctx)); + retQuad.add(new Quadruple(annotation, NS.MPIWG_annot+"textSelection", annot.xpointer, ctx)); + + String annotationtext =createRessourceURL("annotText:"); + + retQuad.add(new Quadruple(annotation, NS.ANNOTATION_NS+"body", annotationtext, ctx)); + + retQuad.add(new Quadruple(annotationtext, NS.RDF+"type", NS.MPIWG_annot+"StandardTextNote", ctx)); + + retQuad.add(new LiteralQuadruple(annotationtext, NS.MPIWG_annot+"containsText", annot.text, ctx)); + + for (Quadruple ret:retQuad){ + logger.debug(ret.toString()); + } + + annotUrl=annotation; + return retQuad; + } + + /** + * Erzeuge eine urn aus der aktullen Zeit in millis + * @return + */ + private String createRessourceURL(String prefix) { + + Calendar cal = Calendar.getInstance(); + + long time = cal.getTimeInMillis(); + + return String.format("%s%s%s", urlBase,prefix,time); + + + + } + + /** + * gibt nach die nach aufruf eines Converters erzeuge aktuelle url der annotation zurueck + * @return + */ + public String getAnnotUrl() { + + return annotUrl; + } + + /** + * @param args + */ + public static void main(String[] args) { + Convert myConvert = new Convert("http://annotations.rdf"); + List<Quadruple> rets = myConvert.annot2quadruple("http://mpdl-dev.mpiwg-berlin.mpg.de/ECHOdocuViewfullTest?url=/mpiwg/online/permanent/library/163127KK&viewMode=text&pn=7#xpointer(string-range(id("s1"), "", 66, 12))", "mbuchman", null, "myannot", "Example"); + for (Quadruple ret:rets){ + System.out.println(ret.toString()); + } + + } + + + public String storeAnnotation(Convert.Annotation annot) throws TripleStoreStoreError { + + //Convert convert = new Convert("<file:///annotations>"); + + + if ((annot.type==null) || annot.type.equals("")){ + annot.type="Comment"; + } + + List<Quadruple> annots = new ArrayList<Quadruple>(); + if (annot.text!=null && !annot.text.equals("")) + annots=annot2quadruple(annot); + if (annot.url!=null && !annot.url.equals("")) + annots.addAll(rel2quadruple(annot)); + + + + try { + ChildContext context = (ChildContext)Context.getCurrent(); + String user = context.getParameters().getFirstValue("de.mpiwg.itgroup.annotationManager.virtuoso.tripleStoreUser"); + String pw = context.getParameters().getFirstValue("de.mpiwg.itgroup.annotationManager.virtuoso.tripleStoreUserPassword"); + + TripleStoreHandler th = new TripleStoreHandler("jdbc:virtuoso://virtuoso.mpiwg-berlin.mpg.de:1111", user, pw); + + th.write(annots); + } catch (RepositoryException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + throw new TripleStoreStoreError(); + } catch (TripleStoreHandlerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + throw new TripleStoreStoreError(); + } + + + + return getAnnotUrl(); +} + + + private List<Quadruple> rel2quadruple(Annotation annot) { + // TODO Auto-generated method stub + return new ArrayList<TripleStoreHandler.Quadruple>(); + } + +}