diff src/main/java/de/mpiwg/itgroup/annotations/restlet/RestServer.java @ 1:6556943c4fb9

include neo4j and restlet
author casties
date Wed, 27 Jun 2012 17:52:02 +0200
parents
children 47b53ae385d1
line wrap: on
line diff
--- /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<String, String> env = new Hashtable<String, String>();
+        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<SearchResult> 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;
+    }
+
+}