annotate src/de/mpiwg/itgroup/annotationManager/RDFHandling/RDFSearcher.java @ 4:c32080f364c6

minor bugs
author dwinter
date Fri, 02 Dec 2011 09:25:37 +0100
parents 6888ae3287b8
children 0be9d53a6967
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
dwinter
parents:
diff changeset
1 package de.mpiwg.itgroup.annotationManager.RDFHandling;
dwinter
parents:
diff changeset
2
dwinter
parents:
diff changeset
3 import java.util.ArrayList;
dwinter
parents:
diff changeset
4 import java.util.List;
dwinter
parents:
diff changeset
5
dwinter
parents:
diff changeset
6 import org.apache.log4j.Logger;
dwinter
parents:
diff changeset
7 import org.apache.tiles.context.ListAttribute;
dwinter
parents:
diff changeset
8 import org.openrdf.query.BindingSet;
dwinter
parents:
diff changeset
9 import org.openrdf.query.TupleQueryResult;
dwinter
parents:
diff changeset
10 import org.restlet.Context;
dwinter
parents:
diff changeset
11 import org.restlet.engine.component.ChildContext;
dwinter
parents:
diff changeset
12
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
13 import sun.security.action.GetBooleanAction;
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
14
0
dwinter
parents:
diff changeset
15 import de.mpiwg.itgroup.annotationManager.Errors.TripleStoreSearchError;
dwinter
parents:
diff changeset
16 import de.mpiwg.itgroup.annotationManager.RDFHandling.Convert.Annotation;
dwinter
parents:
diff changeset
17 import de.mpiwg.itgroup.nimanager.exceptions.TripleStoreHandlerException;
dwinter
parents:
diff changeset
18 import de.mpiwg.itgroup.nimanager.owl.TripleStoreHandler;
dwinter
parents:
diff changeset
19
dwinter
parents:
diff changeset
20 public class RDFSearcher {
dwinter
parents:
diff changeset
21
dwinter
parents:
diff changeset
22 private String urlBase="http://ontologies.mpiwg-berlin.mpg.de/annotations/"; //TODO should go into config
dwinter
parents:
diff changeset
23
dwinter
parents:
diff changeset
24 private TripleStoreHandler th;
dwinter
parents:
diff changeset
25
dwinter
parents:
diff changeset
26 private String context;
dwinter
parents:
diff changeset
27
dwinter
parents:
diff changeset
28 private Logger logger= Logger.getRootLogger();
dwinter
parents:
diff changeset
29
dwinter
parents:
diff changeset
30 public RDFSearcher(String context) {
dwinter
parents:
diff changeset
31 this.context=context;
dwinter
parents:
diff changeset
32 }
dwinter
parents:
diff changeset
33
dwinter
parents:
diff changeset
34
dwinter
parents:
diff changeset
35
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
36 /** Sucht im Triplestore nach Annotationen
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
37 * @param uri Adresse der Annotierten Ressource, in der Regel nicht mit dem xpointer, sonder die URI der kompletten Ressource oder NULL oder leer
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
38 * @param user Author der Annotationen, entweder als uri der Person oder ein Username, je nachdem wie die Annotatinen angelegt wurden.
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
39 * @param limit
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
40 * @param offset
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
41 * @return
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
42 * @throws TripleStoreHandlerException
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
43 * @throws TripleStoreSearchError
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
44 */
0
dwinter
parents:
diff changeset
45 public List<Annotation> search(String uri, String user, String limit,
dwinter
parents:
diff changeset
46 String offset) throws TripleStoreHandlerException, TripleStoreSearchError {
dwinter
parents:
diff changeset
47
dwinter
parents:
diff changeset
48 List<Annotation> retAnnots = new ArrayList<Convert.Annotation>();
dwinter
parents:
diff changeset
49 ChildContext context = (ChildContext)Context.getCurrent();
dwinter
parents:
diff changeset
50 String tripleStoreUser = context.getParameters().getFirstValue("de.mpiwg.itgroup.annotationManager.virtuoso.tripleStoreUser");
dwinter
parents:
diff changeset
51 String tripleStorePW = context.getParameters().getFirstValue("de.mpiwg.itgroup.annotationManager.virtuoso.tripleStoreUserPassword");
dwinter
parents:
diff changeset
52
dwinter
parents:
diff changeset
53 th = new TripleStoreHandler("jdbc:virtuoso://virtuoso.mpiwg-berlin.mpg.de:1111", tripleStoreUser, tripleStorePW);//TODO should go into config
dwinter
parents:
diff changeset
54 String queryString="";
dwinter
parents:
diff changeset
55
dwinter
parents:
diff changeset
56 String whereString = "?s ?p <http://www.w3.org/2000/10/annotationType#Comment>.";
dwinter
parents:
diff changeset
57 //whereString +="?s <http://ontologies.mpiwg-berlin.mpg.de/annotations/docuviewerText> ?link.";
dwinter
parents:
diff changeset
58
dwinter
parents:
diff changeset
59 if(uri!=null && !uri.equals("")){
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
60 whereString +=String.format("?s <http://ontologies.mpiwg-berlin.mpg.de/annotations/annotatesDocuviewerText> <%s>.",uri);}
0
dwinter
parents:
diff changeset
61 else {
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
62 whereString +=String.format("?s <http://ontologies.mpiwg-berlin.mpg.de/annotations/annotatesDocuviewerText> ?uri.");
0
dwinter
parents:
diff changeset
63 }
dwinter
parents:
diff changeset
64 whereString +=String.format("?s <http://ontologies.mpiwg-berlin.mpg.de/annotations/textSelection> ?xpointer.");
dwinter
parents:
diff changeset
65 whereString +=String.format("?s <http://www.w3.org/2000/10/annotation-ns#body> ?annotText.");
dwinter
parents:
diff changeset
66
dwinter
parents:
diff changeset
67 if(user!=null && !user.equals("")){
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
68 if (user.startsWith("http")){
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
69 whereString +=String.format("?s <http://www.w3.org/2000/10/annotation-ns#author> <%s>.",user);
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
70 } else {
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
71 whereString +=String.format("?s <http://www.w3.org/2000/10/annotation-ns#author> \"%s\".",user);
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
72 }
0
dwinter
parents:
diff changeset
73 } else {
dwinter
parents:
diff changeset
74 whereString +=String.format("?s <http://www.w3.org/2000/10/annotation-ns#author> ?author.");
dwinter
parents:
diff changeset
75 }
dwinter
parents:
diff changeset
76
dwinter
parents:
diff changeset
77 whereString +=String.format("?s <http://www.w3.org/2000/10/annotation-ns#created> ?created.");
dwinter
parents:
diff changeset
78
dwinter
parents:
diff changeset
79 whereString +=String.format("?annotText <http://ontologies.mpiwg-berlin.mpg.de/annotations/containsText> ?text.");
dwinter
parents:
diff changeset
80
dwinter
parents:
diff changeset
81 queryString=String.format("select distinct * where {%s}",whereString);
dwinter
parents:
diff changeset
82
dwinter
parents:
diff changeset
83
dwinter
parents:
diff changeset
84 logger.debug("RDFSearcher:"+queryString);
dwinter
parents:
diff changeset
85
dwinter
parents:
diff changeset
86 try {
dwinter
parents:
diff changeset
87 TupleQueryResult results = th.querySPARQL(queryString);
dwinter
parents:
diff changeset
88
dwinter
parents:
diff changeset
89 while (results.hasNext()) {
dwinter
parents:
diff changeset
90 BindingSet result = results.next();
dwinter
parents:
diff changeset
91 String annotUri;
dwinter
parents:
diff changeset
92 if(uri!=null && !uri.equals("")){
dwinter
parents:
diff changeset
93 annotUri=uri;
dwinter
parents:
diff changeset
94 } else {
dwinter
parents:
diff changeset
95 annotUri = result.getBinding("uri").getValue().stringValue();
dwinter
parents:
diff changeset
96 }
dwinter
parents:
diff changeset
97
dwinter
parents:
diff changeset
98 String annotUser;
dwinter
parents:
diff changeset
99 if(user!=null && !user.equals("")){
dwinter
parents:
diff changeset
100 annotUser=user;
dwinter
parents:
diff changeset
101 } else {
dwinter
parents:
diff changeset
102 annotUser = result.getBinding("author").getValue().stringValue();
dwinter
parents:
diff changeset
103 }
dwinter
parents:
diff changeset
104
dwinter
parents:
diff changeset
105
dwinter
parents:
diff changeset
106 Annotation annot = new Annotation(result.getBinding("xpointer").getValue().stringValue(),
dwinter
parents:
diff changeset
107 annotUser, result.getBinding("created").getValue().stringValue(),
dwinter
parents:
diff changeset
108 result.getBinding("text").getValue().stringValue(), null,
2
6888ae3287b8 changed to namespace handling for users
dwinter
parents: 0
diff changeset
109 annotUri,result.getBinding("s").getValue().stringValue());
0
dwinter
parents:
diff changeset
110 retAnnots.add(annot);
dwinter
parents:
diff changeset
111 }
dwinter
parents:
diff changeset
112 } catch (Exception e) {
dwinter
parents:
diff changeset
113 throw new TripleStoreSearchError();
dwinter
parents:
diff changeset
114 }
dwinter
parents:
diff changeset
115 // TODO Auto-generated method stub
dwinter
parents:
diff changeset
116 return retAnnots;
dwinter
parents:
diff changeset
117 }
dwinter
parents:
diff changeset
118
dwinter
parents:
diff changeset
119 }