package fr.devoxx.sentimental.infra; import fr.devoxx.sentimental.domain.Lexicon; import fr.devoxx.sentimental.domain.SentimentAnalysis; import fr.devoxx.sentimental.domain.Trend; import fr.devoxx.sentimental.infra.adapter.FileBasedLexicon; import fr.devoxx.sentimental.infra.adapter.SentimentalResource; import fr.devoxx.sentimental.infra.adapter.TrendRepository; import fr.devoxx.sentimental.infra.adapter.TwitterAdapter; import fr.devoxx.sentimental.infra.audio.SamplePlayer; import io.dropwizard.Application; import io.dropwizard.jdbi.DBIFactory; import io.dropwizard.setup.Bootstrap; import io.dropwizard.setup.Environment; import org.skife.jdbi.v2.DBI; public class SentimentalApplication extends Application<SentimentalConfiguration> { public static void main(String[] args) throws Exception { new SentimentalApplication().run(args); } @Override public String getName() { return "sentimental"; } @Override public void initialize(Bootstrap<SentimentalConfiguration> bootstrap) { // nothing to do yet } @Override public void run(SentimentalConfiguration configuration, Environment environment) { final TemplateHealthCheck healthCheck = new TemplateHealthCheck(configuration.getTemplate()); environment.healthChecks().register("template", healthCheck); // SPI Lexicon final Lexicon lexicon = new FileBasedLexicon(configuration.getLexiconFileName()); // SPI Trend final DBIFactory factory = new DBIFactory(); final DBI jdbi = factory.build(environment, configuration.getDataSourceFactory(), "postgresql"); final AuditDAO auditDao = jdbi.onDemand(AuditDAO.class); final Trend audit = new TrendRepository(auditDao); // Domain Model final SentimentAnalysis service = new SentimentAnalysis(lexicon, audit); // API RESTful final SentimentalResource resource = new SentimentalResource(service); environment.jersey().register(resource); // API Twitter final TwitterAdapter twitterAdapter = new TwitterAdapter(service, new SamplePlayer()); twitterAdapter.subscribe("devoxx, #memepasmal, @cyriux, @tpierrain, arolla"); // start } }