package todowizard;
import io.dropwizard.Application;
import io.dropwizard.assets.AssetsBundle;
import io.dropwizard.db.DataSourceFactory;
import io.dropwizard.migrations.MigrationsBundle;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;
import todowizard.core.doma.DomaBundle;
import todowizard.core.doma.DomaConfig;
import todowizard.core.guice.CommonModule;
import todowizard.health.TodoHealthCheck;
import todowizard.resource.TodoResource;
import com.google.inject.Guice;
import com.google.inject.Injector;
/**
* アプリケーションのメインクラス
*
* @author t_endo
*/
public class Main extends Application<TodoConfiguration> {
private DomaBundle<TodoConfiguration> domaBundle;
/**
* main
*
* @param args
* "-h": show usage<br />
* "-v": show version<br />
* "server" to start server or "check" to check only
* @throws Exception
*/
public static void main(String... args) throws Exception {
Main app = new Main();
app.run(args);
// String configPath = "config/config.yml";
// app.run(new String[] { "db", "migrate", configPath });
// app.run(new String[] { "server", configPath });
}
/**
* {@inheritDoc}
*/
@Override
public void initialize(Bootstrap<TodoConfiguration> bootstrap) {
// Doma
this.domaBundle = new DomaBundle<TodoConfiguration>("doma") {
@Override
public DataSourceFactory getDataSourceFactory(
TodoConfiguration configuration) {
return configuration.getDataSourceFactory();
}
};
bootstrap.addBundle(domaBundle);
// Assets
bootstrap.addBundle(new AssetsBundle("/app", "/todo", "index.html",
"assets"));
bootstrap.addBundle(new AssetsBundle("/bower_components",
"/todo/bower_components", null, "bower_components"));
// Migrations
bootstrap.addBundle(new MigrationsBundle<TodoConfiguration>() {
@Override
public DataSourceFactory getDataSourceFactory(
TodoConfiguration configuration) {
return configuration.getDataSourceFactory();
}
});
}
/**
* {@inheritDoc}
*/
@Override
public void run(TodoConfiguration configuration, Environment environment)
throws Exception {
DomaConfig domaConfig = domaBundle.getDomaConfig();
Injector injector = Guice.createInjector(new CommonModule(domaConfig),
new TodoModule());
environment.jersey().register(injector.getInstance(TodoResource.class));
environment.healthChecks().register("todo",
injector.getInstance(TodoHealthCheck.class));
}
}