rwwarren/door-lock

View on GitHub
api/src/main/java/com/wrixton/doorlock/DoorlockApiApp.java

Summary

Maintainability
A
1 hr
Test Coverage
package com.wrixton.doorlock;

import com.bendb.dropwizard.redis.JedisBundle;
import com.bendb.dropwizard.redis.JedisFactory;
import com.wrixton.doorlock.DAO.QueryDAO;
import com.wrixton.doorlock.resources.DoorlockApiAppResource;
import io.dropwizard.Application;
import io.dropwizard.assets.AssetsBundle;
import io.dropwizard.java8.Java8Bundle;
import io.dropwizard.jdbi.DBIFactory;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;
import io.swagger.config.ScannerFactory;
import io.swagger.jaxrs.config.ReflectiveJaxrsScanner;
import io.swagger.jaxrs.listing.ApiListingResource;
import io.swagger.models.Info;
import io.swagger.models.Swagger;
import org.skife.jdbi.v2.DBI;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.logging.Logger;

public class DoorlockApiApp extends Application<DoorlockApiAppConfiguration> {

    private static final Logger LOG = Logger.getLogger(DoorlockApiApp.class.getName());
    private String VERSION = "0.08";

    public static void main(String[] args) {
        try {
            new DoorlockApiApp().run(args);
        } catch (Exception e) {
            System.out.println(e.toString());
        }
    }

    @Override
    public String getName() {
        return "doorlock-api-app";
    }

    @Override
    public void initialize(Bootstrap<DoorlockApiAppConfiguration> bootstrap) {
        bootstrap.addBundle(new Java8Bundle());
        bootstrap.addBundle(new JedisBundle<DoorlockApiAppConfiguration>() {
            @Override
            public JedisFactory getJedisFactory(DoorlockApiAppConfiguration configuration) {
                return configuration.getJedisFactory();
            }
        });
        bootstrap.addBundle(new AssetsBundle("/assets/css", "/css", "index.htm", "/css"));
        bootstrap.addBundle(new AssetsBundle("/assets/lib", "/lib", "index.htm", "/lib"));
        bootstrap.addBundle(new AssetsBundle("/assets/fonts", "/fonts", "index.htm", "/fonts"));
        bootstrap.addBundle(new AssetsBundle("/assets/images", "/images", "index.htm", "/images"));
    }

    @Override
    public void run(DoorlockApiAppConfiguration doorlockApiAppConfiguration, Environment environment) throws Exception {
        environment.jersey().register(new ApiListingResource());

        final DBIFactory factory = new DBIFactory();
        final DBI jdbi = factory.build(environment, doorlockApiAppConfiguration.getDataSourceFactory(), "postgres");
        final QueryDAO queryDAO = jdbi.onDemand(QueryDAO.class);
        final DoorlockApiAppResource resource = new DoorlockApiAppResource(queryDAO);
        environment.jersey().register(resource);

        final Healthcheck healthCheck =
                new Healthcheck(doorlockApiAppConfiguration.getAppName());
        environment.healthChecks().register("template", healthCheck);
//        environment.jersey().setUrlPattern("/css/*");
//        environment.jersey().setUrlPattern("/lib/*");

        final Swagger swagger = new Swagger();
        swagger.setBasePath("/");
        Info info = new Info();
        info.setTitle("Doorlock api");
        info.setVersion(VERSION);
        swagger.setInfo(info);

        ReflectiveJaxrsScanner reflectiveJaxrsScanner = new ReflectiveJaxrsScanner();
        reflectiveJaxrsScanner.setResourcePackage("com.wrixton.doorlock.resources");
        reflectiveJaxrsScanner.setPrettyPrint(true);
        ScannerFactory.setScanner(reflectiveJaxrsScanner);

        environment.servlets().addServletListeners(new ServletContextListener() {

            @Override
            public void contextInitialized(ServletContextEvent servletContextEvent) {
                servletContextEvent.getServletContext().setAttribute("swagger", swagger);
            }

            @Override
            public void contextDestroyed(ServletContextEvent servletContextEvent) {

            }
        });
        environment.jersey().register(io.swagger.jaxrs.listing.SwaggerSerializers.class);
        environment.jersey().register(io.swagger.jaxrs.listing.ApiListingResource.class);
        LOG.info("Started up!");
    }
}