package http.startup; import freemarker.template.Configuration; import http.engine.EntityResouceEngine; import http.engine.LongTermStaticResourceEngine; import http.engine.StaticResourceEngine; import http.engine.SystemFunctionResouceEngine; import http.engine.TemplateResouceEngine; import http.engine.UserHomeResouceEngine; import http.io.ClassPathLoader; import http.io.FileSystemLoader; import http.io.Loader; import http.io.MultiLoader; import http.server.BasicResourceContainer; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.Locale; import javax.inject.Inject; import javax.inject.Singleton; import nebula.data.DataRepos; import nebula.data.db.DbConfiguration; import nebula.data.impl.DbDataRepos; import nebula.data.impl.TypeDatastore; import nebula.lang.EditableTypeLoader; import nebula.lang.SystemTypeLoader; import nebula.lang.TypeLoader; import nebula.server.ResourceEngine; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.jetty.server.Handler; import com.google.inject.AbstractModule; import com.google.inject.Scopes; import com.google.inject.TypeLiteral; @SuppressWarnings("deprecation") public class ConfigModule extends AbstractModule { private Log log = LogFactory.getLog(this.getClass()); static final String APP_DEFINE_PATH = "app_define_path"; static final String DB_DRIVERCLASS = "db_driverclass"; static final String DB_URL = "db_url"; static final String DB_USERNAME = "db_username"; static final String DB_PASSWORD = "db_password"; static final String PATH_OF_ROOT = "htdocs2"; @Override protected void configure() { String driverclass = "org.apache.derby.jdbc.EmbeddedDriver"; String dburl = "jdbc:derby:db/nebula;create=true"; String username = "user"; String password = "password"; try { // ROOT Folder File root = null; URL url = this.getClass().getResource("/" + PATH_OF_ROOT + "/WEB-INF/web.xml"); if (url != null) { root = new File(url.getPath()).getParentFile().getParentFile(); } if (root == null) { root = new File(PATH_OF_ROOT); } if (log.isTraceEnabled()) { log.trace("Config root path - " + root.getAbsolutePath()); } if (!root.exists()) { throw new RuntimeException("cannot find " + PATH_OF_ROOT); } // Type Define locator EditableTypeLoader typeLoader = new EditableTypeLoader(new SystemTypeLoader(), new File("apps/system")); typeLoader.registerPath(new File("apps/ids")); this.bind(TypeDatastore.class).toInstance(new TypeDatastore(typeLoader)); this.bind(EditableTypeLoader.class).toInstance(typeLoader); this.bind(TypeLoader.class).toInstance(typeLoader); // Resource scan loader Loader loader = new MultiLoader(new ClassPathLoader(this.getClass().getClassLoader(), PATH_OF_ROOT), new FileSystemLoader(root)); this.bind(Loader.class).toInstance(loader); // Database configuration this.bind(DbConfiguration.class).toInstance( DbConfiguration.getEngine(driverclass, dburl, username, password)); // Data Persister this.bind(DataRepos.class).to(DbDataRepos.class).in(Scopes.SINGLETON); // Freemarker Configuration freemarkerConfiguration = new Configuration(); freemarkerConfiguration.setDefaultEncoding("utf-8"); freemarkerConfiguration.setEncoding(Locale.getDefault(), "utf-8"); freemarkerConfiguration.setTemplateUpdateDelay(1); freemarkerConfiguration.setNumberFormat("0.####"); freemarkerConfiguration.setDirectoryForTemplateLoading(new File(root, "template")); this.bind(Configuration.class).toInstance(freemarkerConfiguration); this.bind(StaticResourceEngine.class).in(Singleton.class); this.bind(ResourceEngine.class).to(StaticResourceEngine.class).in(Singleton.class); this.bind(EntityResouceEngine.class); //Jetty Handler this.bind(Handler.class).to(BasicResourceContainer.class).in(Singleton.class); this.bind(new TypeLiteral<Configurable<BasicResourceContainer>>() { }).toInstance(new Configurable<BasicResourceContainer>() { StaticResourceEngine staticEngine; EntityResouceEngine dataResouceEngine; // EditableStaticResourceEngine editableStaticEngine; TemplateResouceEngine templateResouceEngine; SystemFunctionResouceEngine frameworkResouceEngine; private LongTermStaticResourceEngine longTermStaticEngine; private UserHomeResouceEngine userHomeResouceEngine; @SuppressWarnings("unused") @Inject public void setEngine(EntityResouceEngine engine) { this.dataResouceEngine = engine; } @SuppressWarnings("unused") @Inject public void setEngine(StaticResourceEngine engine) { this.staticEngine = engine; } @SuppressWarnings("unused") @Inject public void setEngine(LongTermStaticResourceEngine engine) { this.longTermStaticEngine = engine; } @SuppressWarnings("unused") @Inject public void setEngine(UserHomeResouceEngine engine) { this.userHomeResouceEngine = engine; } // // @SuppressWarnings("unused") // @Inject // public void setEngine(EditableStaticResourceEngine engine){ // this.editableStaticEngine=engine; // } @SuppressWarnings("unused") @Inject public void setEngine(TemplateResouceEngine engine) { this.templateResouceEngine = engine; } @SuppressWarnings("unused") @Inject public void setEngine(SystemFunctionResouceEngine engine) { this.frameworkResouceEngine = engine; } @Override public void configure(BasicResourceContainer site) { site.register("*", staticEngine); site.register("theme", templateResouceEngine); site.register("js lib img images css font", longTermStaticEngine); site.register("d", dataResouceEngine); site.register("f", frameworkResouceEngine); site.register("u", userHomeResouceEngine); } }); typeLoader.start(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } }