package org.qrone.r7.app; import java.io.File; import java.net.URI; import java.net.UnknownHostException; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletContext; import org.qrone.database.DatabaseService; import org.qrone.kvs.KeyValueStoreService; import org.qrone.kvs.LocalKeyValueStoreService; import org.qrone.login.CookieHandler; import org.qrone.memcached.LocalMemcachedService; import org.qrone.mongo.MongoDatabaseService; import org.qrone.mongo.MongoResolver; import org.qrone.r7.PortingService; import org.qrone.r7.fetcher.HTTPFetcher; import org.qrone.r7.fetcher.LocalHTTPFetcher; import org.qrone.r7.github.GitHubRepositoryService; import org.qrone.r7.github.GitHubResolver; import org.qrone.r7.handler.DefaultHandler; import org.qrone.r7.handler.ExtendableURIHandler; import org.qrone.r7.resolver.FileResolver; import org.qrone.r7.resolver.FilteredResolver; import org.qrone.r7.resolver.InternalResourceResolver; import org.qrone.r7.resolver.URIResolver; import com.mongodb.Mongo; import com.mongodb.MongoException; public class QrONEURIHandler extends ExtendableURIHandler { private GitHubResolver github; private GitHubRepositoryService repository; private MongoResolver cache; public QrONEURIHandler( ServletContext cx, String domain, String path){ PortingService service = new PortingService(); service.setURLFetcher(new LocalHTTPFetcher()); try { MongoDatabaseService mongo = new MongoDatabaseService(new Mongo().getDB("qrone"), domain); service.setDatabaseService(mongo); String[] memcachedServer = {"localhost:11211"}; service.setMemcachedService(new LocalMemcachedService(memcachedServer,domain)); service.setKeyValueStoreService( new LocalKeyValueStoreService(service.getDatabaseService(), service.getMemcachedService())); service.setFileSystemService(new MongoResolver(new Mongo().getDB("qrone"), domain + "/qrone.filesystem")); } catch (UnknownHostException e) { e.printStackTrace(); } catch (MongoException e) { e.printStackTrace(); } try { KeyValueStoreService kvs = service.getKeyValueStoreService(); HTTPFetcher fetcher = service.getURLFetcher(); cache = new MongoResolver(new Mongo().getDB("qrone"), "qrone.cache"); DatabaseService db = service.getDatabaseService(); service.setURIResolver(resolver); if(path != null){ // Local Files overrides at anytime. resolver.add(new FileResolver(new File(path), true)); } // Login/Crumb Service CookieHandler cookie = new CookieHandler(service); handler.add(cookie); // Github Admintool github = new GitHubResolver(fetcher, cache, "qronon","qrone-admintool","master"); repository = new GitHubRepositoryService(fetcher, cache, db); service.setRepositoryService(repository); resolver.add(github); resolver.add(repository.getResolver()); resolver.add(new FilteredResolver("/system/resource/", new InternalResourceResolver(cx))); resolver.add(service.getFileSystemService()); handler.add(github); handler.add(repository); // DefaultHandler DefaultHandler defaulthandler = new DefaultHandler(service); rawextend(defaulthandler); rawextend(this); handler.add(defaulthandler); } catch (UnknownHostException e) { e.printStackTrace(); } catch (MongoException e) { e.printStackTrace(); } } public void clean(){ cache.drop(); } }