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;
+	}
+	
+
+}