Mercurial > hg > NamedIdentityManager
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/de/mpiwg/itgroup/nimanager/persons/PersonListService.java Thu Jun 30 11:44:24 2011 +0200 @@ -0,0 +1,219 @@ +package de.mpiwg.itgroup.nimanager.persons; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.concurrent.ArrayBlockingQueue; + +import org.apache.log4j.Logger; +import org.apache.lucene.analysis.standard.StandardAnalyzer; +import org.apache.lucene.document.Document; +import org.apache.lucene.index.CorruptIndexException; +import org.apache.lucene.queryParser.ParseException; +import org.apache.lucene.queryParser.QueryParser; +import org.apache.lucene.search.IndexSearcher; +import org.apache.lucene.search.Query; +import org.apache.lucene.search.ScoreDoc; +import org.apache.lucene.store.FSDirectory; +import org.apache.lucene.util.Version; +import org.json.JSONArray; +import org.json.JSONException; +import org.omg.CORBA.Request; +import org.openrdf.model.Statement; +import org.openrdf.repository.RepositoryException; +import org.openrdf.repository.RepositoryResult; +import org.restlet.Context; +import org.restlet.data.Form; +import org.restlet.data.MediaType; +import org.restlet.data.Status; +import org.restlet.engine.component.ChildContext; +import org.restlet.ext.json.JsonRepresentation; +import org.restlet.representation.Representation; +import org.restlet.representation.StringRepresentation; +import org.restlet.resource.Get; +import org.restlet.resource.Options; +import org.restlet.resource.Post; +import org.restlet.resource.ServerResource; + +import de.mpiwg.itgroup.nimanager.exceptions.TripleStoreHandlerException; +import de.mpiwg.itgroup.nimanager.luceneIndices.Importer; +import de.mpiwg.itgroup.nimanager.owl.TripleStoreHandler; + +import edu.stanford.smi.protegex.owl.swrl.bridge.exceptions.MapperException; + +public class PersonListService extends ServerResource { + + //private String tripleIndexPath="/Users/dwinter/Documents/Projekte/ECHO-eSciDoc-MPDL/escidocMPIWG/NamedIdentityManager/data/tripleIndex"; + private String tripleIndexPath; + //private String tripleIndexPath="/usr/local/NamedIdentityManager/data/tripleIndex"; + private Logger rl = Logger.getRootLogger(); + private IndexSearcher searcher; + private StandardAnalyzer analyzer; + public PersonListService() throws CorruptIndexException, IOException{ + + ChildContext context = (ChildContext)Context.getCurrent(); + tripleIndexPath = context.getParameters().getFirstValue("de.mpwig.itgroup.personSearch.index"); + searcher = new IndexSearcher(FSDirectory.open(new File(tripleIndexPath))); + analyzer = new StandardAnalyzer(Version.LUCENE_31); + + + } + @Options + public void doOptions(Representation entity) { + Form responseHeaders = (Form) getResponse().getAttributes().get( + "org.restlet.http.headers"); + if (responseHeaders == null) { + responseHeaders = new Form(); + getResponse().getAttributes().put("org.restlet.http.headers", + responseHeaders); + } + responseHeaders.add("Access-Control-Allow-Origin", "*"); + responseHeaders.add("Access-Control-Allow-Methods", "POST,OPTIONS,GET"); + responseHeaders.add("Access-Control-Allow-Headers", "Content-Type"); + responseHeaders.add("Access-Control-Allow-Credentials", "false"); + responseHeaders.add("Access-Control-Max-Age", "60"); + } + + @Get("json") + public Representation getJson() { + Form responseHeaders = (Form) getResponse().getAttributes().get( + "org.restlet.http.headers"); + if (responseHeaders == null) { + responseHeaders = new Form(); + getResponse().getAttributes().put("org.restlet.http.headers", + responseHeaders); + } + responseHeaders.add("Access-Control-Allow-Origin", "*"); + Form form = getRequest().getResourceRef().getQueryAsForm(); + String term = form.getFirstValue("term"); + + String [] array = getPersonsAsArray(term); + try { + JSONArray jarray = new JSONArray(array); + JsonRepresentation rp = new JsonRepresentation(jarray); + //Map<String,String> persons = getPersonsAsMap(term); + //JsonRepresentation rp = new JsonRepresentation(new JSONObject(persons)); + return rp; + } catch (Exception e) { + // TODO: handle exception + return null; + } + } + + @Get("html") + public Representation getHTML() { + //check json + List<MediaType> supported=new ArrayList<MediaType>(); + supported.add(MediaType.APPLICATION_JSON); + + MediaType types = getRequest().getClientInfo().getPreferredMediaType(supported); + + if ((types!=null) && types.equals(MediaType.APPLICATION_JSON)) + return getJson(); + + Form responseHeaders = (Form) getResponse().getAttributes().get( + "org.restlet.http.headers"); + if (responseHeaders == null) { + responseHeaders = new Form(); + getResponse().getAttributes().put("org.restlet.http.headers", + responseHeaders); + } + responseHeaders.add("Access-Control-Allow-Origin", "*"); + Form form = getRequest().getResourceRef().getQueryAsForm(); + String term = form.getFirstValue("term"); + + String [] array = getPersonsAsArray(term); + String ret=""; + + for (int i=0;i<array.length;i++){ + ret+=String.format("<div class=\"personName\"><a href=\"./person/name/%s\">%s</a></div>", array[i],array[i]); + } + + + return new StringRepresentation(ret,MediaType.TEXT_HTML); + } + + + private String[] getPersonsAsArray(String term) { + QueryParser parser = new QueryParser(Version.LUCENE_31,"http://xmlns.com/foaf/0.1/name", analyzer); + Query query; + ScoreDoc[] hits; + try { + query = parser.parse(term+"*"); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return new String[]{}; + } + + try { + hits=searcher.search(query, null, 100).scoreDocs; + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return new String[]{}; + } + String[] ret = new String[hits.length]; + for (int i = 0; i < hits.length; i++) { + Document doc; + try { + doc = searcher.doc(hits[i].doc); + } catch (CorruptIndexException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + continue; + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + continue; + } + ret[i]=doc.get("http://xmlns.com/foaf/0.1/name"); + } + return ret; + } + + private Map<String,String> getPersonsAsMap(String term) { + QueryParser parser = new QueryParser(Version.LUCENE_31,"http://xmlns.com/foaf/0.1/name", analyzer); + Query query; + ScoreDoc[] hits; + Map<String,String> ret = new HashMap<String,String>(); + try { + query = parser.parse(term+"*"); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return ret; + } + + try { + hits=searcher.search(query, null, 100).scoreDocs; + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return ret; + } + + for (int i = 0; i < hits.length; i++) { + Document doc; + try { + doc = searcher.doc(hits[i].doc); + } catch (CorruptIndexException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + continue; + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + continue; + } + ret.put(doc.get("http://xmlns.com/foaf/0.1/name"),doc.get("identifier")); + } + return ret; + } + + +}