# HG changeset patch
# User casties
# Date 1340812322 -7200
# Node ID 6556943c4fb93e69a0bbbfa707aebc64cb56cf57
# Parent ed191672977368463be146b2dee0b1c04af73793
include neo4j and restlet
diff -r ed1916729773 -r 6556943c4fb9 pom.xml
--- a/pom.xml Tue Jun 26 17:21:42 2012 +0200
+++ b/pom.xml Wed Jun 27 17:52:02 2012 +0200
@@ -7,6 +7,7 @@
UTF-8
1.7.1
+ 2.0.14
@@ -20,6 +21,11 @@
false
+
+ maven-restlet
+ Public online Restlet repository
+ http://maven.restlet.org
+
@@ -38,5 +44,39 @@
static-web
${neo4j-version}
+
+ org.restlet.jee
+ org.restlet
+ ${restlet-version}
+
+
+ org.restlet.jee
+ org.restlet.ext.servlet
+ ${restlet-version}
+
+
+ org.restlet.jee
+ org.restlet.ext.json
+ ${restlet-version}
+
+
+ log4j
+ log4j
+ 1.2.14
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.6
+ 1.6
+
+
+
+
+
\ No newline at end of file
diff -r ed1916729773 -r 6556943c4fb9 src/main/java/de/mpiwg/itgroup/annotations/AnnotationServerDb.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/mpiwg/itgroup/annotations/AnnotationServerDb.java Wed Jun 27 17:52:02 2012 +0200
@@ -0,0 +1,67 @@
+package de.mpiwg.itgroup.annotations;
+
+import org.neo4j.graphdb.GraphDatabaseService;
+import org.neo4j.graphdb.factory.GraphDatabaseFactory;
+import org.neo4j.kernel.AbstractGraphDatabase;
+import org.neo4j.server.WrappingNeoServerBootstrapper;
+
+public class AnnotationServerDb {
+
+ private static String DB_PATH = "target/neo4j-annotation-db";
+ private static GraphDatabaseService graphDb;
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+ AnnotationServerDb db = new AnnotationServerDb();
+ db.createDb();
+ // do something
+ AbstractGraphDatabase graphdb = (AbstractGraphDatabase) graphDb;
+ WrappingNeoServerBootstrapper srv;
+ srv = new WrappingNeoServerBootstrapper( graphdb );
+ System.out.println("Starting server...");
+ srv.start();
+ // The server is now running
+ try {
+ Thread.sleep(300*1000);
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ // until we stop it:
+ System.out.println("Stopping server...");
+ srv.stop();
+ db.shutDown();
+ }
+
+ /**
+ *
+ */
+ public void createDb() {
+ System.out.println();
+ System.out.println("Starting database "+DB_PATH+" ...");
+ graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);
+ registerShutdownHook(graphDb);
+ }
+
+ public void shutDown() {
+ System.out.println();
+ System.out.println("Shutting down database ...");
+ // START SNIPPET: shutdownServer
+ graphDb.shutdown();
+ // END SNIPPET: shutdownServer
+ }
+
+ private static void registerShutdownHook(final GraphDatabaseService graphDb) {
+ // Registers a shutdown hook for the Neo4j instance so that it
+ // shuts down nicely when the VM exits (even if you "Ctrl-C" the
+ // running example before it's completed)
+ Runtime.getRuntime().addShutdownHook(new Thread() {
+ @Override
+ public void run() {
+ graphDb.shutdown();
+ }
+ });
+ }
+}
diff -r ed1916729773 -r 6556943c4fb9 src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorInfo.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorInfo.java Wed Jun 27 17:52:02 2012 +0200
@@ -0,0 +1,52 @@
+package de.mpiwg.itgroup.annotations.restlet;
+
+import java.io.InputStream;
+
+import org.apache.log4j.Logger;
+import org.restlet.data.Form;
+import org.restlet.data.MediaType;
+import org.restlet.representation.InputRepresentation;
+import org.restlet.representation.Representation;
+import org.restlet.resource.Get;
+import org.restlet.resource.Options;
+import org.restlet.resource.ServerResource;
+
+
+
+
+
+public class AnnotatorInfo extends ServerResource {
+
+private Logger logger = Logger.getRootLogger();
+
+ /**
+ * Erlaubt cross scripting bei Aufruf aus Javascript
+ * @param entity
+ */
+ @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("html")
+ public Representation getHTML(){
+ InputStream is = getClass().getResourceAsStream("/de/mpiwg/itgroup/annotationManager/staticPages/main.html");
+
+ Representation rep = new InputRepresentation(is,MediaType.TEXT_HTML);
+ return rep;
+
+ }
+
+}
+
diff -r ed1916729773 -r 6556943c4fb9 src/main/java/de/mpiwg/itgroup/annotations/restlet/RestServer.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/RestServer.java Wed Jun 27 17:52:02 2012 +0200
@@ -0,0 +1,189 @@
+package de.mpiwg.itgroup.annotations.restlet;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Hashtable;
+import java.util.Properties;
+
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
+import javax.servlet.ServletContext;
+
+import org.apache.log4j.BasicConfigurator;
+import org.apache.log4j.Logger;
+import org.restlet.Application;
+import org.restlet.Context;
+import org.restlet.Restlet;
+import org.restlet.routing.Router;
+import org.restlet.security.ChallengeAuthenticator;
+
+import scala.sys.process.ProcessBuilderImpl.Dummy;
+
+public class RestServer extends Application {
+
+ public static Logger logger = Logger.getRootLogger();
+
+ private ChallengeAuthenticator authenticator;
+
+ /**
+ * Properties holding consumer keys and secrets
+ */
+ private Properties consumerKeys;
+ public final String CONSUMER_KEYS_PATH = "WEB-INF/consumerkeys.property";
+
+ /**
+ * constructor
+ *
+ * @param parentContext
+ */
+ public RestServer(Context parentContext) {
+ super(parentContext);
+
+ Logger rl = Logger.getRootLogger();
+ BasicConfigurator.configure();
+ // read consumerKeys from webapp
+ consumerKeys = new Properties();
+ ServletContext sc = (ServletContext) getContext().getServerDispatcher()
+ .getContext().getAttributes()
+ .get("org.restlet.ext.servlet.ServletContext");
+ if (sc != null) {
+ InputStream ps = sc.getResourceAsStream(CONSUMER_KEYS_PATH);
+ if (ps == null) {
+ // try as file
+ File pf = new File(sc.getRealPath(CONSUMER_KEYS_PATH));
+ if (pf != null) {
+ rl.debug("trying file for consumer keys: "+pf);
+ try {
+ ps = new FileInputStream(pf);
+ } catch (FileNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+ if (ps != null) {
+ rl.debug("loading consumer keys from "+CONSUMER_KEYS_PATH);
+ try {
+ consumerKeys.load(ps);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ rl.debug("consumer keys: "+consumerKeys);
+ } else {
+ rl.error("Unable to get resource "+CONSUMER_KEYS_PATH);
+ }
+ } else {
+ rl.error("Unable to get ServletContext!");
+ }
+
+ }
+
+ /**
+ * returns consumer secret for consumer key.
+ * returns null if consumer key doesn't exist.
+ * @param consumerKey
+ * @return
+ */
+ public String getConsumerSecret(String consumerKey) {
+ return consumerKeys.getProperty(consumerKey);
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.restlet.Application#createInboundRoot()
+ */
+ @Override
+ public Restlet createInboundRoot() {
+ //this.authenticator = createAuthenticator();
+
+ // String target = "{rh}/{rf}/XX";
+ // Redirector redirector = new
+ // Redirector(getContext().createChildContext(), target,
+ // Redirector.MODE_CLIENT_SEE_OTHER);
+
+ Router router = new Router(getContext());
+ /*
+ router.attach("/annotator/annotations", AnnotatorAnnotations.class);
+ router.attach("/annotator/annotations/{id}", AnnotatorAnnotations.class);
+ router.attach("/annotator/search", AnnotatorSearch.class);
+
+ // router.attach("",redirector);
+ router.attach("/annotator", ExtendedAnnotationInput.class);
+ */
+ router.attach("/", AnnotatorInfo.class);
+ //authenticator.setNext(router);
+ //return authenticator;
+
+ return router;
+ }
+
+ /**
+ * Hole den vollen Benutzernamen aus dem LDAP
+ *
+ * @param creator
+ * @return
+ */
+ public String getUserNameFromLdap(String creator) {
+ String retString = creator; // falls nichts gefunden wird einfach den
+ // creator zurueckgeben
+ Hashtable env = new Hashtable();
+ String sp = "com.sun.jndi.ldap.LdapCtxFactory";
+ env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, sp);
+
+ String ldapUrl = "ldap://ldapreplik.mpiwg-berlin.mpg.de/dc=mpiwg-berlin,dc=mpg,dc=de"; // TODO should go into config file
+ env.put(javax.naming.Context.PROVIDER_URL, ldapUrl);
+
+ DirContext dctx;
+ try {
+ dctx = new InitialDirContext(env);
+ } catch (NamingException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ return retString;
+ }
+
+ String base = "ou=People";
+
+ SearchControls sc = new SearchControls();
+ String[] attributeFilter = { "cn", "mail" };
+ sc.setReturningAttributes(attributeFilter);
+ sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
+
+ String filter = "(uid=" + creator + ")";
+
+ try {
+ NamingEnumeration results = dctx.search(base, filter,
+ sc);
+ while (results.hasMore()) {
+ SearchResult sr = (SearchResult) results.next();
+ javax.naming.directory.Attributes attrs = sr.getAttributes();
+
+ Attribute attr = attrs.get("cn");
+ retString = (String) attr.get();
+ }
+ } catch (NamingException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ try {
+ dctx.close();
+ } catch (NamingException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return retString;
+ }
+
+}
diff -r ed1916729773 -r 6556943c4fb9 src/main/resources/annotator-info.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/resources/annotator-info.html Wed Jun 27 17:52:02 2012 +0200
@@ -0,0 +1,6 @@
+
+
+Annotation manager
+Annotations overview
+
+
\ No newline at end of file
diff -r ed1916729773 -r 6556943c4fb9 src/main/webapp/META-INF/MANIFEST.MF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/webapp/META-INF/MANIFEST.MF Wed Jun 27 17:52:02 2012 +0200
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
diff -r ed1916729773 -r 6556943c4fb9 src/main/webapp/WEB-INF/consumerkeys.property.template
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/webapp/WEB-INF/consumerkeys.property.template Wed Jun 27 17:52:02 2012 +0200
@@ -0,0 +1,2 @@
+# consumer keys and secrets for annotation server clients
+# format: consumerKey = consumerSecret
diff -r ed1916729773 -r 6556943c4fb9 src/main/webapp/WEB-INF/etc.jaasAuth.conf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/webapp/WEB-INF/etc.jaasAuth.conf Wed Jun 27 17:52:02 2012 +0200
@@ -0,0 +1,10 @@
+BasicJaasAuthenticationApplication {
+ com.sun.security.auth.module.LdapLoginModule REQUIRED
+ userProvider="ldap://ldap.mpiwg-berlin.mpg.de/ou=people,dc=mpiwg-berlin,dc=mpg,dc=de"
+ userFilter="(&(uid={USERNAME})(objectClass=inetOrgPerson))"
+ debug=true
+ useSSL=false
+;
+};
+
+
diff -r ed1916729773 -r 6556943c4fb9 src/main/webapp/WEB-INF/web.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/webapp/WEB-INF/web.xml Wed Jun 27 17:52:02 2012 +0200
@@ -0,0 +1,24 @@
+
+
+ RESTfulJavaWebServices-Restlet
+
+
+ org.restlet.application
+ de.mpiwg.itgroup.annotations.restlet.RestServer
+
+
+
+ RestletServlet
+ org.restlet.ext.servlet.ServerServlet
+
+
+
+ RestletServlet
+
+ /*
+
+
\ No newline at end of file
diff -r ed1916729773 -r 6556943c4fb9 src/main/webapp/WEB-INF/web.xml.template
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/webapp/WEB-INF/web.xml.template Wed Jun 27 17:52:02 2012 +0200
@@ -0,0 +1,39 @@
+
+
+ RESTfulJavaWebServices-Restlet
+
+
+ org.restlet.application
+ de.mpiwg.itgroup.annotationManager.restlet.RestServer
+
+
+ de.mpiwg.itgroup.annotationManager.jaas.configFilePath
+ file:///etc/jaasAuth.conf
+
+
+ de.mpiwg.itgroup.annotationManager.virtuoso.tripleStoreUser
+ USERNAME
+
+
+ de.mpiwg.itgroup.annotationManager.virtuoso.tripleStoreUserPassword
+ PASSWORD
+
+
+ de.mpiwg.itgroup.annotationManager.virtuoso.tripleStoreConnectionURL
+ jdbc:virtuoso://virtuoso.mpiwg-berlin.mpg.de:1111
+
+
+
+ RestletServlet
+ org.restlet.ext.servlet.ServerServlet
+
+
+
+ RestletServlet
+ /annotator/*
+
+
\ No newline at end of file