Mercurial > hg > NamedIdentityManager
comparison src/de/mpiwg/itgroup/nimanager/persons/PersonListService.java @ 0:1384a0d382fa
first input
author | dwinter |
---|---|
date | Thu, 30 Jun 2011 11:44:24 +0200 |
parents | |
children | f986e74583eb |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:1384a0d382fa |
---|---|
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 } |