Mercurial > hg > AnnotationManagerN4J
view src/main/java/de/mpiwg/itgroup/annotations/restlet/RestServer.java @ 3:47b53ae385d1
merging old code
author | casties |
---|---|
date | Fri, 29 Jun 2012 20:38:27 +0200 |
parents | 6556943c4fb9 |
children | 3599b29c393f |
line wrap: on
line source
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.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.factory.GraphDatabaseFactory; import org.neo4j.kernel.AbstractGraphDatabase; import org.neo4j.server.WrappingNeoServerBootstrapper; 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 String CONSUMER_KEYS_PATH = "WEB-INF/consumerkeys.property"; private GraphDatabaseService graphDb; public static final String GRAPHDB_KEY = "annotationmanager.graphdb"; public String DB_PATH = "WEB-INF/neo4j-annotation-db"; /** * constructor * * @param parentContext */ public RestServer(Context parentContext) { super(parentContext); // TODO: is this the right place to run the log4j configurator? BasicConfigurator.configure(); ServletContext sc = (ServletContext) getContext().getServerDispatcher().getContext().getAttributes() .get("org.restlet.ext.servlet.ServletContext"); if (sc != null) { // look for database service in context graphDb = (GraphDatabaseService) sc.getAttribute(GRAPHDB_KEY); if (graphDb == null) { /* * open database */ String dbFn = getResourcePath(sc, DB_PATH); if (dbFn != null) { logger.debug("opening DB " + dbFn); graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(dbFn); // store in context sc.setAttribute(GRAPHDB_KEY, graphDb); WrappingNeoServerBootstrapper srv = new WrappingNeoServerBootstrapper((AbstractGraphDatabase) graphDb); logger.debug("Starting DB admin server..."); srv.start(); } else { logger.error("Unable to get resource " + DB_PATH); } } /* * read consumerKeys from webapp */ consumerKeys = new Properties(); InputStream ps = getResourceAsStream(sc, CONSUMER_KEYS_PATH); if (ps != null) { logger.debug("loading consumer keys from " + CONSUMER_KEYS_PATH); try { consumerKeys.load(ps); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } logger.debug("consumer keys: " + consumerKeys); } else { logger.error("Unable to get resource " + CONSUMER_KEYS_PATH); } } else { logger.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(); 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); // TODO: should go into config file String ldapUrl = "ldap://ldapreplik.mpiwg-berlin.mpg.de/dc=mpiwg-berlin,dc=mpg,dc=de"; 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; } /** * returns resource from path (in webapp) as InputStream. * * @param sc * @param path * @return */ protected InputStream getResourceAsStream(ServletContext sc, String path) { InputStream ps = sc.getResourceAsStream(path); if (ps == null) { // try as file File pf = new File(sc.getRealPath(path)); if (pf != null) { logger.debug("trying file for: " + pf); try { ps = new FileInputStream(pf); } catch (FileNotFoundException e) { logger.error(e); } } } return ps; } /** * get a real file name for a web app file pathname. * * If filename starts with "/" its treated as absolute else the path is * appended to the base directory of the web-app. * * @param filename * @param sc * @return */ public static String getResourcePath(ServletContext sc, String filename) { File f = new File(filename); // is the filename absolute? if (!f.isAbsolute()) { // relative path -> use getRealPath to resolve in webapp filename = sc.getRealPath(filename); } return filename; } }