annotate src/de/mpiwg/itgroup/nimanager/persons/PersonService.java @ 13:dacf1b7b3ad5 default tip

libs added
author dwinter
date Mon, 17 Sep 2012 10:46:36 +0200
parents f986e74583eb
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1384a0d382fa first input
dwinter
parents:
diff changeset
1 package de.mpiwg.itgroup.nimanager.persons;
1384a0d382fa first input
dwinter
parents:
diff changeset
2
1384a0d382fa first input
dwinter
parents:
diff changeset
3 import java.io.IOException;
1384a0d382fa first input
dwinter
parents:
diff changeset
4 import java.io.UnsupportedEncodingException;
1384a0d382fa first input
dwinter
parents:
diff changeset
5 import java.net.URLDecoder;
1384a0d382fa first input
dwinter
parents:
diff changeset
6 import java.util.Collection;
1384a0d382fa first input
dwinter
parents:
diff changeset
7 import java.util.Map;
1384a0d382fa first input
dwinter
parents:
diff changeset
8 import java.util.Set;
1384a0d382fa first input
dwinter
parents:
diff changeset
9
1384a0d382fa first input
dwinter
parents:
diff changeset
10 import org.apache.log4j.Logger;
1384a0d382fa first input
dwinter
parents:
diff changeset
11 import org.apache.lucene.index.CorruptIndexException;
1384a0d382fa first input
dwinter
parents:
diff changeset
12 import org.openrdf.repository.RepositoryException;
1384a0d382fa first input
dwinter
parents:
diff changeset
13 import org.restlet.Context;
1384a0d382fa first input
dwinter
parents:
diff changeset
14 import org.restlet.data.Form;
1384a0d382fa first input
dwinter
parents:
diff changeset
15 import org.restlet.data.MediaType;
1384a0d382fa first input
dwinter
parents:
diff changeset
16 import org.restlet.data.Status;
1384a0d382fa first input
dwinter
parents:
diff changeset
17 import org.restlet.engine.component.ChildContext;
1384a0d382fa first input
dwinter
parents:
diff changeset
18 import org.restlet.representation.Representation;
1384a0d382fa first input
dwinter
parents:
diff changeset
19 import org.restlet.representation.StringRepresentation;
1384a0d382fa first input
dwinter
parents:
diff changeset
20 import org.restlet.resource.Options;
1384a0d382fa first input
dwinter
parents:
diff changeset
21 import org.restlet.resource.Post;
1384a0d382fa first input
dwinter
parents:
diff changeset
22 import org.restlet.resource.Put;
1384a0d382fa first input
dwinter
parents:
diff changeset
23 import org.restlet.resource.ServerResource;
1384a0d382fa first input
dwinter
parents:
diff changeset
24 import org.restlet.resource.Get;
1384a0d382fa first input
dwinter
parents:
diff changeset
25
4
f986e74583eb removed triplestorehandler componentes
dwinter
parents: 2
diff changeset
26
0
1384a0d382fa first input
dwinter
parents:
diff changeset
27 import de.mpiwg.itgroup.nimanager.luceneIndices.Importer;
4
f986e74583eb removed triplestorehandler componentes
dwinter
parents: 2
diff changeset
28 import de.mpiwg.itgroup.triplestoremanager.exceptions.TripleStoreHandlerException;
f986e74583eb removed triplestorehandler componentes
dwinter
parents: 2
diff changeset
29 import de.mpiwg.itgroup.triplestoremanager.owl.MetaDataHandler;
f986e74583eb removed triplestorehandler componentes
dwinter
parents: 2
diff changeset
30 import de.mpiwg.itgroup.triplestoremanager.owl.TripleStoreHandler;
f986e74583eb removed triplestorehandler componentes
dwinter
parents: 2
diff changeset
31 import de.mpiwg.itgroup.triplestoremanager.owl.Util;
f986e74583eb removed triplestorehandler componentes
dwinter
parents: 2
diff changeset
32
f986e74583eb removed triplestorehandler componentes
dwinter
parents: 2
diff changeset
33
0
1384a0d382fa first input
dwinter
parents:
diff changeset
34
1384a0d382fa first input
dwinter
parents:
diff changeset
35 public class PersonService extends ServerResource {
2
e3ecb88314a5 minor bugs
dwinter
parents: 0
diff changeset
36 private String NAMED_ENTITIES_ONTOLOGIE_URL = "http://ontologies.mpiwg-berlin.mpg.de/authorities/namedIdentities";
0
1384a0d382fa first input
dwinter
parents:
diff changeset
37 private String VIRTUOSO_PW;
1384a0d382fa first input
dwinter
parents:
diff changeset
38 private String VIRTUOSO_USER;
1384a0d382fa first input
dwinter
parents:
diff changeset
39 private String virtuoso_server_url;
1384a0d382fa first input
dwinter
parents:
diff changeset
40 private String TRIPLE_INDEX_PATH;
1384a0d382fa first input
dwinter
parents:
diff changeset
41 private Logger rl = Logger.getRootLogger();
1384a0d382fa first input
dwinter
parents:
diff changeset
42 private MetaDataHandler mh;
1384a0d382fa first input
dwinter
parents:
diff changeset
43 private TripleStoreHandler th;
1384a0d382fa first input
dwinter
parents:
diff changeset
44
1384a0d382fa first input
dwinter
parents:
diff changeset
45
1384a0d382fa first input
dwinter
parents:
diff changeset
46
1384a0d382fa first input
dwinter
parents:
diff changeset
47 public PersonService(){
1384a0d382fa first input
dwinter
parents:
diff changeset
48 //mh = MetaDataHandler.getInstance();
1384a0d382fa first input
dwinter
parents:
diff changeset
49 ChildContext context = (ChildContext)Context.getCurrent();
1384a0d382fa first input
dwinter
parents:
diff changeset
50 TRIPLE_INDEX_PATH = context.getParameters().getFirstValue("de.mpwig.itgroup.personSearch.index");
1384a0d382fa first input
dwinter
parents:
diff changeset
51 virtuoso_server_url = context.getParameters().getFirstValue("de.mpwig.itgroup.personSearch.virtuoso.url");
1384a0d382fa first input
dwinter
parents:
diff changeset
52 VIRTUOSO_PW = context.getParameters().getFirstValue("de.mpwig.itgroup.personSearch.virtuoso.pw");
1384a0d382fa first input
dwinter
parents:
diff changeset
53 VIRTUOSO_USER = context.getParameters().getFirstValue("de.mpwig.itgroup.personSearch.virtuoso.user");
1384a0d382fa first input
dwinter
parents:
diff changeset
54
1384a0d382fa first input
dwinter
parents:
diff changeset
55 try {
1384a0d382fa first input
dwinter
parents:
diff changeset
56 th = new TripleStoreHandler(virtuoso_server_url, VIRTUOSO_USER, VIRTUOSO_PW);
1384a0d382fa first input
dwinter
parents:
diff changeset
57 } catch (TripleStoreHandlerException e) {
1384a0d382fa first input
dwinter
parents:
diff changeset
58 // TODO Auto-generated catch block
1384a0d382fa first input
dwinter
parents:
diff changeset
59 e.printStackTrace();
1384a0d382fa first input
dwinter
parents:
diff changeset
60 }
1384a0d382fa first input
dwinter
parents:
diff changeset
61
1384a0d382fa first input
dwinter
parents:
diff changeset
62 }
1384a0d382fa first input
dwinter
parents:
diff changeset
63 @Options
1384a0d382fa first input
dwinter
parents:
diff changeset
64 public void doOptions(Representation entity) {
1384a0d382fa first input
dwinter
parents:
diff changeset
65 Form responseHeaders = (Form) getResponse().getAttributes().get(
1384a0d382fa first input
dwinter
parents:
diff changeset
66 "org.restlet.http.headers");
1384a0d382fa first input
dwinter
parents:
diff changeset
67 if (responseHeaders == null) {
1384a0d382fa first input
dwinter
parents:
diff changeset
68 responseHeaders = new Form();
1384a0d382fa first input
dwinter
parents:
diff changeset
69 getResponse().getAttributes().put("org.restlet.http.headers",
1384a0d382fa first input
dwinter
parents:
diff changeset
70 responseHeaders);
1384a0d382fa first input
dwinter
parents:
diff changeset
71 }
1384a0d382fa first input
dwinter
parents:
diff changeset
72 responseHeaders.add("Access-Control-Allow-Origin", "*");
1384a0d382fa first input
dwinter
parents:
diff changeset
73 responseHeaders.add("Access-Control-Allow-Methods", "POST,OPTIONS,GET");
1384a0d382fa first input
dwinter
parents:
diff changeset
74 responseHeaders.add("Access-Control-Allow-Headers", "Content-Type");
1384a0d382fa first input
dwinter
parents:
diff changeset
75 responseHeaders.add("Access-Control-Allow-Credentials", "false");
1384a0d382fa first input
dwinter
parents:
diff changeset
76 responseHeaders.add("Access-Control-Max-Age", "60");
1384a0d382fa first input
dwinter
parents:
diff changeset
77 }
1384a0d382fa first input
dwinter
parents:
diff changeset
78
1384a0d382fa first input
dwinter
parents:
diff changeset
79 @Get("XML")
1384a0d382fa first input
dwinter
parents:
diff changeset
80 public Representation getXML() throws UnsupportedEncodingException{
1384a0d382fa first input
dwinter
parents:
diff changeset
81 String id = (String)getRequest().getAttributes().get("personId");
1384a0d382fa first input
dwinter
parents:
diff changeset
82 id = URLDecoder.decode(id,"utf-8");
1384a0d382fa first input
dwinter
parents:
diff changeset
83 if (id.startsWith("dbpedia:")){
1384a0d382fa first input
dwinter
parents:
diff changeset
84 String[] splitted=id.split(":");
1384a0d382fa first input
dwinter
parents:
diff changeset
85 return handleDBPedia(splitted[1]);
1384a0d382fa first input
dwinter
parents:
diff changeset
86 } else if (id.startsWith(NAMED_ENTITIES_ONTOLOGIE_URL)){
1384a0d382fa first input
dwinter
parents:
diff changeset
87 String[] splitted=id.split(":");
1384a0d382fa first input
dwinter
parents:
diff changeset
88 return handlePerson(id);
1384a0d382fa first input
dwinter
parents:
diff changeset
89 }
1384a0d382fa first input
dwinter
parents:
diff changeset
90 getResponse().setStatus(Status.CLIENT_ERROR_NOT_FOUND);
1384a0d382fa first input
dwinter
parents:
diff changeset
91 return new StringRepresentation("<error>not supported</error>",MediaType.TEXT_XML);
1384a0d382fa first input
dwinter
parents:
diff changeset
92
1384a0d382fa first input
dwinter
parents:
diff changeset
93 }
1384a0d382fa first input
dwinter
parents:
diff changeset
94
1384a0d382fa first input
dwinter
parents:
diff changeset
95 private Representation handlePerson(String id) {
1384a0d382fa first input
dwinter
parents:
diff changeset
96 String personString =getPerson(id);
1384a0d382fa first input
dwinter
parents:
diff changeset
97 return new StringRepresentation(personString, MediaType.TEXT_XML);
1384a0d382fa first input
dwinter
parents:
diff changeset
98
1384a0d382fa first input
dwinter
parents:
diff changeset
99 }
1384a0d382fa first input
dwinter
parents:
diff changeset
100
1384a0d382fa first input
dwinter
parents:
diff changeset
101
1384a0d382fa first input
dwinter
parents:
diff changeset
102
1384a0d382fa first input
dwinter
parents:
diff changeset
103 private Representation handleDBPedia(String id) {
1384a0d382fa first input
dwinter
parents:
diff changeset
104 String personString = getPerson("<http://dbpedia.org/resource/"+id+">");
1384a0d382fa first input
dwinter
parents:
diff changeset
105 return new StringRepresentation(personString, MediaType.TEXT_XML);
1384a0d382fa first input
dwinter
parents:
diff changeset
106
1384a0d382fa first input
dwinter
parents:
diff changeset
107
1384a0d382fa first input
dwinter
parents:
diff changeset
108 }
1384a0d382fa first input
dwinter
parents:
diff changeset
109
1384a0d382fa first input
dwinter
parents:
diff changeset
110
1384a0d382fa first input
dwinter
parents:
diff changeset
111 private String getPerson(String id) {
1384a0d382fa first input
dwinter
parents:
diff changeset
112 Map<String, Object> values=null;
1384a0d382fa first input
dwinter
parents:
diff changeset
113 try {
1384a0d382fa first input
dwinter
parents:
diff changeset
114 //Collection props = mh.getDirectPropsForClass("http://xmlns.com/foaf/0.1/Person");
1384a0d382fa first input
dwinter
parents:
diff changeset
115 Collection props = mh.getDirectPropsForClass("http://dbpedia.org/ontology/Person",true);
1384a0d382fa first input
dwinter
parents:
diff changeset
116 values = th.getJenaRDFValues(props, id, mh.getOwlModel());
1384a0d382fa first input
dwinter
parents:
diff changeset
117 } catch (RepositoryException e) {
1384a0d382fa first input
dwinter
parents:
diff changeset
118 e.printStackTrace();
1384a0d382fa first input
dwinter
parents:
diff changeset
119 return null;
1384a0d382fa first input
dwinter
parents:
diff changeset
120 }
1384a0d382fa first input
dwinter
parents:
diff changeset
121
1384a0d382fa first input
dwinter
parents:
diff changeset
122 String xmlVersion = Util.rdf2xml(values);
1384a0d382fa first input
dwinter
parents:
diff changeset
123
1384a0d382fa first input
dwinter
parents:
diff changeset
124
1384a0d382fa first input
dwinter
parents:
diff changeset
125 return xmlVersion;
1384a0d382fa first input
dwinter
parents:
diff changeset
126 }
1384a0d382fa first input
dwinter
parents:
diff changeset
127
1384a0d382fa first input
dwinter
parents:
diff changeset
128 /**
1384a0d382fa first input
dwinter
parents:
diff changeset
129 * different modes :
1384a0d382fa first input
dwinter
parents:
diff changeset
130 *
1384a0d382fa first input
dwinter
parents:
diff changeset
131 *Indizierte alle werte des triples mit "personId"
4
f986e74583eb removed triplestorehandler componentes
dwinter
parents: 2
diff changeset
132 *Im Body kann eine Liste von Predicate �begeben werden die indiziert werden sollen und sich im triplestore befinden m�ssen.
f986e74583eb removed triplestorehandler componentes
dwinter
parents: 2
diff changeset
133 * Wird kein body �bergeben ist das predicate="http://xmlns.com/foaf/0.1/name".
f986e74583eb removed triplestorehandler componentes
dwinter
parents: 2
diff changeset
134 * Wird graphId zus�tzlich �bergeben, wird der Eintrag aus diesem Graphen indiziert, default ist: "file://newpersonsFromProjects"
0
1384a0d382fa first input
dwinter
parents:
diff changeset
135 * @param entity
1384a0d382fa first input
dwinter
parents:
diff changeset
136 * @return
1384a0d382fa first input
dwinter
parents:
diff changeset
137 */
1384a0d382fa first input
dwinter
parents:
diff changeset
138 @Put
1384a0d382fa first input
dwinter
parents:
diff changeset
139 public Representation doPut(Representation entity){
1384a0d382fa first input
dwinter
parents:
diff changeset
140 String id = (String) getRequest().getAttributes().get("personId");
1384a0d382fa first input
dwinter
parents:
diff changeset
141 String graphId = (String) getRequest().getAttributes().get("graphId");
1384a0d382fa first input
dwinter
parents:
diff changeset
142
1384a0d382fa first input
dwinter
parents:
diff changeset
143 try {
1384a0d382fa first input
dwinter
parents:
diff changeset
144 id = URLDecoder.decode(id,"utf-8");
1384a0d382fa first input
dwinter
parents:
diff changeset
145
1384a0d382fa first input
dwinter
parents:
diff changeset
146 } catch (UnsupportedEncodingException e1) {
1384a0d382fa first input
dwinter
parents:
diff changeset
147 setStatus(Status.CLIENT_ERROR_NOT_ACCEPTABLE);
1384a0d382fa first input
dwinter
parents:
diff changeset
148 return new StringRepresentation("not a valid url:"+id);
1384a0d382fa first input
dwinter
parents:
diff changeset
149
1384a0d382fa first input
dwinter
parents:
diff changeset
150 }
1384a0d382fa first input
dwinter
parents:
diff changeset
151 if (graphId==null || graphId.equals("")){
1384a0d382fa first input
dwinter
parents:
diff changeset
152 graphId="file://newpersonsFromProjects";
1384a0d382fa first input
dwinter
parents:
diff changeset
153 } else {
1384a0d382fa first input
dwinter
parents:
diff changeset
154 try {
1384a0d382fa first input
dwinter
parents:
diff changeset
155 graphId = URLDecoder.decode(graphId,"utf-8");
1384a0d382fa first input
dwinter
parents:
diff changeset
156 } catch (UnsupportedEncodingException e) {
1384a0d382fa first input
dwinter
parents:
diff changeset
157 setStatus(Status.CLIENT_ERROR_NOT_ACCEPTABLE);
1384a0d382fa first input
dwinter
parents:
diff changeset
158 return new StringRepresentation("not a valid graph Id:"+graphId);
1384a0d382fa first input
dwinter
parents:
diff changeset
159
1384a0d382fa first input
dwinter
parents:
diff changeset
160 }
1384a0d382fa first input
dwinter
parents:
diff changeset
161 }
1384a0d382fa first input
dwinter
parents:
diff changeset
162 String cnt;
1384a0d382fa first input
dwinter
parents:
diff changeset
163 try {
1384a0d382fa first input
dwinter
parents:
diff changeset
164 cnt = entity.getText();
1384a0d382fa first input
dwinter
parents:
diff changeset
165 rl.info(cnt);
1384a0d382fa first input
dwinter
parents:
diff changeset
166 } catch (IOException e) {
1384a0d382fa first input
dwinter
parents:
diff changeset
167 // TODO Auto-generated catch block
1384a0d382fa first input
dwinter
parents:
diff changeset
168 e.printStackTrace();
1384a0d382fa first input
dwinter
parents:
diff changeset
169 cnt="";
1384a0d382fa first input
dwinter
parents:
diff changeset
170 }
1384a0d382fa first input
dwinter
parents:
diff changeset
171
1384a0d382fa first input
dwinter
parents:
diff changeset
172 if (cnt.equals("")){
1384a0d382fa first input
dwinter
parents:
diff changeset
173 cnt="http://xmlns.com/foaf/0.1/name";
1384a0d382fa first input
dwinter
parents:
diff changeset
174 }
1384a0d382fa first input
dwinter
parents:
diff changeset
175 String[] predicates = cnt.split("\n");
1384a0d382fa first input
dwinter
parents:
diff changeset
176
1384a0d382fa first input
dwinter
parents:
diff changeset
177 int indexedTriples =doIndexing(graphId,id,predicates);
1384a0d382fa first input
dwinter
parents:
diff changeset
178 if (indexedTriples<0){
1384a0d382fa first input
dwinter
parents:
diff changeset
179 setStatus(Status.SERVER_ERROR_INTERNAL);
1384a0d382fa first input
dwinter
parents:
diff changeset
180 return new StringRepresentation("Konnte nicht indizieren!");
1384a0d382fa first input
dwinter
parents:
diff changeset
181 }
1384a0d382fa first input
dwinter
parents:
diff changeset
182 return new StringRepresentation(String.valueOf(indexedTriples));
1384a0d382fa first input
dwinter
parents:
diff changeset
183
1384a0d382fa first input
dwinter
parents:
diff changeset
184 //setStatus(Status.CLIENT_ERROR_NOT_ACCEPTABLE);
1384a0d382fa first input
dwinter
parents:
diff changeset
185 //return new StringRepresentation("Mode not known!");
1384a0d382fa first input
dwinter
parents:
diff changeset
186 }
1384a0d382fa first input
dwinter
parents:
diff changeset
187
1384a0d382fa first input
dwinter
parents:
diff changeset
188
1384a0d382fa first input
dwinter
parents:
diff changeset
189 private int doIndexing(String graphId,String identifier, String[] predicates) {
1384a0d382fa first input
dwinter
parents:
diff changeset
190 TripleStoreHandler th;
1384a0d382fa first input
dwinter
parents:
diff changeset
191 try {
1384a0d382fa first input
dwinter
parents:
diff changeset
192 th = new TripleStoreHandler(virtuoso_server_url, VIRTUOSO_USER, VIRTUOSO_PW);
1384a0d382fa first input
dwinter
parents:
diff changeset
193 } catch (TripleStoreHandlerException e) {
1384a0d382fa first input
dwinter
parents:
diff changeset
194 rl.error("indexing",e);
1384a0d382fa first input
dwinter
parents:
diff changeset
195 return 0;
1384a0d382fa first input
dwinter
parents:
diff changeset
196 }
1384a0d382fa first input
dwinter
parents:
diff changeset
197 Importer im = new Importer(graphId, predicates, th, TRIPLE_INDEX_PATH); // open the indexer
1384a0d382fa first input
dwinter
parents:
diff changeset
198 try {
1384a0d382fa first input
dwinter
parents:
diff changeset
199 im.initializeIndexer(false); //initialize
1384a0d382fa first input
dwinter
parents:
diff changeset
200 } catch (IOException e1) {
1384a0d382fa first input
dwinter
parents:
diff changeset
201 rl.error("indexing",e1);
1384a0d382fa first input
dwinter
parents:
diff changeset
202 return 0;
1384a0d382fa first input
dwinter
parents:
diff changeset
203 }
1384a0d382fa first input
dwinter
parents:
diff changeset
204 int count=0;
1384a0d382fa first input
dwinter
parents:
diff changeset
205 try {
1384a0d382fa first input
dwinter
parents:
diff changeset
206 count = im.writeStatementsToIndex(identifier);
1384a0d382fa first input
dwinter
parents:
diff changeset
207 } catch (RepositoryException e) {
1384a0d382fa first input
dwinter
parents:
diff changeset
208 rl.error("do Import",e);
1384a0d382fa first input
dwinter
parents:
diff changeset
209 count=-1;
1384a0d382fa first input
dwinter
parents:
diff changeset
210 } catch (CorruptIndexException e) {
1384a0d382fa first input
dwinter
parents:
diff changeset
211 rl.error("do Import",e);
1384a0d382fa first input
dwinter
parents:
diff changeset
212 count=-1;
1384a0d382fa first input
dwinter
parents:
diff changeset
213 } catch (IOException e) {
1384a0d382fa first input
dwinter
parents:
diff changeset
214 rl.error("do Import",e);
1384a0d382fa first input
dwinter
parents:
diff changeset
215 count=-1;
1384a0d382fa first input
dwinter
parents:
diff changeset
216 }
1384a0d382fa first input
dwinter
parents:
diff changeset
217
1384a0d382fa first input
dwinter
parents:
diff changeset
218 try {
1384a0d382fa first input
dwinter
parents:
diff changeset
219 im.close();
1384a0d382fa first input
dwinter
parents:
diff changeset
220 } catch (CorruptIndexException e) {
1384a0d382fa first input
dwinter
parents:
diff changeset
221 rl.error("do Import",e);
1384a0d382fa first input
dwinter
parents:
diff changeset
222 count=-1;
1384a0d382fa first input
dwinter
parents:
diff changeset
223 } catch (IOException e) {
1384a0d382fa first input
dwinter
parents:
diff changeset
224 rl.error("do Import",e);
1384a0d382fa first input
dwinter
parents:
diff changeset
225 count=-1;
1384a0d382fa first input
dwinter
parents:
diff changeset
226 }
1384a0d382fa first input
dwinter
parents:
diff changeset
227
1384a0d382fa first input
dwinter
parents:
diff changeset
228 return count;
1384a0d382fa first input
dwinter
parents:
diff changeset
229
1384a0d382fa first input
dwinter
parents:
diff changeset
230 }
1384a0d382fa first input
dwinter
parents:
diff changeset
231 }