0
|
1 package de.mpiwg.itgroup.nimanager.persons;
|
|
2
|
|
3 import java.io.File;
|
|
4 import java.io.IOException;
|
|
5 import java.util.ArrayList;
|
|
6 import java.util.HashMap;
|
|
7 import java.util.List;
|
|
8 import java.util.Map;
|
|
9 import java.util.Properties;
|
|
10 import java.util.concurrent.ArrayBlockingQueue;
|
|
11
|
|
12 import org.apache.log4j.Logger;
|
|
13 import org.apache.lucene.analysis.standard.StandardAnalyzer;
|
|
14 import org.apache.lucene.document.Document;
|
|
15 import org.apache.lucene.index.CorruptIndexException;
|
|
16 import org.apache.lucene.queryParser.ParseException;
|
|
17 import org.apache.lucene.queryParser.QueryParser;
|
|
18 import org.apache.lucene.search.IndexSearcher;
|
|
19 import org.apache.lucene.search.Query;
|
|
20 import org.apache.lucene.search.ScoreDoc;
|
|
21 import org.apache.lucene.store.FSDirectory;
|
|
22 import org.apache.lucene.util.Version;
|
|
23 import org.json.JSONArray;
|
|
24 import org.json.JSONException;
|
|
25 import org.omg.CORBA.Request;
|
|
26 import org.openrdf.model.Statement;
|
|
27 import org.openrdf.repository.RepositoryException;
|
|
28 import org.openrdf.repository.RepositoryResult;
|
|
29 import org.restlet.Context;
|
|
30 import org.restlet.data.Form;
|
|
31 import org.restlet.data.MediaType;
|
|
32 import org.restlet.data.Status;
|
|
33 import org.restlet.engine.component.ChildContext;
|
|
34 import org.restlet.ext.json.JsonRepresentation;
|
|
35 import org.restlet.representation.Representation;
|
|
36 import org.restlet.representation.StringRepresentation;
|
|
37 import org.restlet.resource.Get;
|
|
38 import org.restlet.resource.Options;
|
|
39 import org.restlet.resource.Post;
|
|
40 import org.restlet.resource.ServerResource;
|
|
41
|
|
42 import de.mpiwg.itgroup.nimanager.exceptions.TripleStoreHandlerException;
|
|
43 import de.mpiwg.itgroup.nimanager.luceneIndices.Importer;
|
|
44 import de.mpiwg.itgroup.nimanager.owl.TripleStoreHandler;
|
|
45
|
|
46 import edu.stanford.smi.protegex.owl.swrl.bridge.exceptions.MapperException;
|
|
47
|
|
48 public class PersonListService extends ServerResource {
|
|
49
|
|
50 //private String tripleIndexPath="/Users/dwinter/Documents/Projekte/ECHO-eSciDoc-MPDL/escidocMPIWG/NamedIdentityManager/data/tripleIndex";
|
|
51 private String tripleIndexPath;
|
|
52 //private String tripleIndexPath="/usr/local/NamedIdentityManager/data/tripleIndex";
|
|
53 private Logger rl = Logger.getRootLogger();
|
|
54 private IndexSearcher searcher;
|
|
55 private StandardAnalyzer analyzer;
|
|
56 public PersonListService() throws CorruptIndexException, IOException{
|
|
57
|
|
58 ChildContext context = (ChildContext)Context.getCurrent();
|
|
59 tripleIndexPath = context.getParameters().getFirstValue("de.mpwig.itgroup.personSearch.index");
|
|
60 searcher = new IndexSearcher(FSDirectory.open(new File(tripleIndexPath)));
|
|
61 analyzer = new StandardAnalyzer(Version.LUCENE_31);
|
|
62
|
|
63
|
|
64 }
|
|
65 @Options
|
|
66 public void doOptions(Representation entity) {
|
|
67 Form responseHeaders = (Form) getResponse().getAttributes().get(
|
|
68 "org.restlet.http.headers");
|
|
69 if (responseHeaders == null) {
|
|
70 responseHeaders = new Form();
|
|
71 getResponse().getAttributes().put("org.restlet.http.headers",
|
|
72 responseHeaders);
|
|
73 }
|
|
74 responseHeaders.add("Access-Control-Allow-Origin", "*");
|
|
75 responseHeaders.add("Access-Control-Allow-Methods", "POST,OPTIONS,GET");
|
|
76 responseHeaders.add("Access-Control-Allow-Headers", "Content-Type");
|
|
77 responseHeaders.add("Access-Control-Allow-Credentials", "false");
|
|
78 responseHeaders.add("Access-Control-Max-Age", "60");
|
|
79 }
|
|
80
|
|
81 @Get("json")
|
|
82 public Representation getJson() {
|
|
83 Form responseHeaders = (Form) getResponse().getAttributes().get(
|
|
84 "org.restlet.http.headers");
|
|
85 if (responseHeaders == null) {
|
|
86 responseHeaders = new Form();
|
|
87 getResponse().getAttributes().put("org.restlet.http.headers",
|
|
88 responseHeaders);
|
|
89 }
|
|
90 responseHeaders.add("Access-Control-Allow-Origin", "*");
|
|
91 Form form = getRequest().getResourceRef().getQueryAsForm();
|
|
92 String term = form.getFirstValue("term");
|
|
93
|
|
94 String [] array = getPersonsAsArray(term);
|
|
95 try {
|
|
96 JSONArray jarray = new JSONArray(array);
|
|
97 JsonRepresentation rp = new JsonRepresentation(jarray);
|
|
98 //Map<String,String> persons = getPersonsAsMap(term);
|
|
99 //JsonRepresentation rp = new JsonRepresentation(new JSONObject(persons));
|
|
100 return rp;
|
|
101 } catch (Exception e) {
|
|
102 // TODO: handle exception
|
|
103 return null;
|
|
104 }
|
|
105 }
|
|
106
|
|
107 @Get("html")
|
|
108 public Representation getHTML() {
|
|
109 //check json
|
|
110 List<MediaType> supported=new ArrayList<MediaType>();
|
|
111 supported.add(MediaType.APPLICATION_JSON);
|
|
112
|
|
113 MediaType types = getRequest().getClientInfo().getPreferredMediaType(supported);
|
|
114
|
|
115 if ((types!=null) && types.equals(MediaType.APPLICATION_JSON))
|
|
116 return getJson();
|
|
117
|
|
118 Form responseHeaders = (Form) getResponse().getAttributes().get(
|
|
119 "org.restlet.http.headers");
|
|
120 if (responseHeaders == null) {
|
|
121 responseHeaders = new Form();
|
|
122 getResponse().getAttributes().put("org.restlet.http.headers",
|
|
123 responseHeaders);
|
|
124 }
|
|
125 responseHeaders.add("Access-Control-Allow-Origin", "*");
|
|
126 Form form = getRequest().getResourceRef().getQueryAsForm();
|
|
127 String term = form.getFirstValue("term");
|
|
128
|
|
129 String [] array = getPersonsAsArray(term);
|
|
130 String ret="";
|
|
131
|
|
132 for (int i=0;i<array.length;i++){
|
|
133 ret+=String.format("<div class=\"personName\"><a href=\"./person/name/%s\">%s</a></div>", array[i],array[i]);
|
|
134 }
|
|
135
|
|
136
|
|
137 return new StringRepresentation(ret,MediaType.TEXT_HTML);
|
|
138 }
|
|
139
|
|
140
|
|
141 private String[] getPersonsAsArray(String term) {
|
|
142 QueryParser parser = new QueryParser(Version.LUCENE_31,"http://xmlns.com/foaf/0.1/name", analyzer);
|
|
143 Query query;
|
|
144 ScoreDoc[] hits;
|
|
145 try {
|
|
146 query = parser.parse(term+"*");
|
|
147 } catch (ParseException e) {
|
|
148 // TODO Auto-generated catch block
|
|
149 e.printStackTrace();
|
|
150 return new String[]{};
|
|
151 }
|
|
152
|
|
153 try {
|
|
154 hits=searcher.search(query, null, 100).scoreDocs;
|
|
155 } catch (IOException e) {
|
|
156 // TODO Auto-generated catch block
|
|
157 e.printStackTrace();
|
|
158 return new String[]{};
|
|
159 }
|
|
160 String[] ret = new String[hits.length];
|
|
161 for (int i = 0; i < hits.length; i++) {
|
|
162 Document doc;
|
|
163 try {
|
|
164 doc = searcher.doc(hits[i].doc);
|
|
165 } catch (CorruptIndexException e) {
|
|
166 // TODO Auto-generated catch block
|
|
167 e.printStackTrace();
|
|
168 continue;
|
|
169 } catch (IOException e) {
|
|
170 // TODO Auto-generated catch block
|
|
171 e.printStackTrace();
|
|
172 continue;
|
|
173 }
|
|
174 ret[i]=doc.get("http://xmlns.com/foaf/0.1/name");
|
|
175 }
|
|
176 return ret;
|
|
177 }
|
|
178
|
|
179 private Map<String,String> getPersonsAsMap(String term) {
|
|
180 QueryParser parser = new QueryParser(Version.LUCENE_31,"http://xmlns.com/foaf/0.1/name", analyzer);
|
|
181 Query query;
|
|
182 ScoreDoc[] hits;
|
|
183 Map<String,String> ret = new HashMap<String,String>();
|
|
184 try {
|
|
185 query = parser.parse(term+"*");
|
|
186 } catch (ParseException e) {
|
|
187 // TODO Auto-generated catch block
|
|
188 e.printStackTrace();
|
|
189 return ret;
|
|
190 }
|
|
191
|
|
192 try {
|
|
193 hits=searcher.search(query, null, 100).scoreDocs;
|
|
194 } catch (IOException e) {
|
|
195 // TODO Auto-generated catch block
|
|
196 e.printStackTrace();
|
|
197 return ret;
|
|
198 }
|
|
199
|
|
200 for (int i = 0; i < hits.length; i++) {
|
|
201 Document doc;
|
|
202 try {
|
|
203 doc = searcher.doc(hits[i].doc);
|
|
204 } catch (CorruptIndexException e) {
|
|
205 // TODO Auto-generated catch block
|
|
206 e.printStackTrace();
|
|
207 continue;
|
|
208 } catch (IOException e) {
|
|
209 // TODO Auto-generated catch block
|
|
210 e.printStackTrace();
|
|
211 continue;
|
|
212 }
|
|
213 ret.put(doc.get("http://xmlns.com/foaf/0.1/name"),doc.get("identifier"));
|
|
214 }
|
|
215 return ret;
|
|
216 }
|
|
217
|
|
218
|
|
219 }
|