Skip to content

Instantly share code, notes, and snippets.

@jhaber
Last active August 15, 2016 16:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jhaber/136d46c6c795117d5a5c56d035cac434 to your computer and use it in GitHub Desktop.
Save jhaber/136d46c6c795117d5a5c56d035cac434 to your computer and use it in GitHub Desktop.
package com.hubspot.bootstrap.rest;
import java.util.Arrays;
import java.util.function.Consumer;
import com.google.inject.Module;
import com.hubspot.dropwizard.guicier.GuiceBundle;
import io.dropwizard.Application;
import io.dropwizard.Bundle;
import io.dropwizard.ConfiguredBundle;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;
public class RestApplication extends Application<DefaultConfiguration> {
private final Consumer<Bootstrap<DefaultConfiguration>> bootstrapModifier;
private RestApplication(Consumer<Bootstrap<DefaultConfiguration>> bootstrapModifier) {
this.bootstrapModifier = bootstrapModifier;
}
public static Builder newBuilder() {
return new Builder(GuiceBundle.defaultBuilder(DefaultConfiguration.class));
}
@Override
public void initialize(Bootstrap<DefaultConfiguration> bootstrap) {
bootstrapModifier.accept(bootstrap);
}
@Override
public void run(DefaultConfiguration configuration, Environment environment) {}
public static class Builder {
private final GuiceBundle.Builder<DefaultConfiguration> guiceBundle;
private Consumer<Bootstrap<DefaultConfiguration>> bootstrapModifier;
private Builder(GuiceBundle.Builder<DefaultConfiguration> guiceBundle) {
this.guiceBundle = guiceBundle;
this.bootstrapModifier = bootstrap -> bootstrap.addBundle(guiceBundle.build());
}
public final Builder modules(Module... modules) {
guiceBundle.modules(modules);
return this;
}
public final Builder bundles(Bundle... bundles) {
return bootstrapModifier(bootstrap -> Arrays.asList(bundles).forEach(bootstrap::addBundle));
}
@SafeVarargs
public final Builder bundles(ConfiguredBundle<DefaultConfiguration>... bundles) {
return bootstrapModifier(bootstrap -> Arrays.asList(bundles).forEach(bootstrap::addBundle));
}
public final Builder bootstrapModifier(Consumer<Bootstrap<DefaultConfiguration>> bootstrapModifier) {
this.bootstrapModifier = this.bootstrapModifier.andThen(bootstrapModifier);
return this;
}
public Application<DefaultConfiguration> build() {
return new RestApplication(bootstrapModifier);
}
}
}
package com.hubspot.bootstrap.rest;
import java.util.Arrays;
import java.util.function.Consumer;
import com.google.inject.Module;
import com.hubspot.dropwizard.guicier.GuiceBundle;
import io.dropwizard.Application;
import io.dropwizard.Bundle;
import io.dropwizard.ConfiguredBundle;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;
public class RestApplication2<T extends DefaultConfiguration> extends Application<T> {
private final Class<T> configurationClass;
private final Consumer<Bootstrap<T>> bootstrapModifier;
private RestApplication2(Class<T> configurationClass, Consumer<Bootstrap<T>> bootstrapModifier) {
this.configurationClass = configurationClass;
this.bootstrapModifier = bootstrapModifier;
}
public static Builder newBuilder() {
return newBuilder(DefaultConfiguration.class);
}
public static <T extends DefaultConfiguration> Builder newBuilder(Class<T> configurationClass) {
return new Builder<>(configurationClass, GuiceBundle.defaultBuilder(configurationClass));
}
@Override
public Class<T> getConfigurationClass() {
return configurationClass;
}
@Override
public void initialize(Bootstrap<T> bootstrap) {
bootstrapModifier.accept(bootstrap);
}
@Override
public void run(T configuration, Environment environment) {}
public static class Builder<T extends DefaultConfiguration> {
private final Class<T> configurationClass;
private final GuiceBundle.Builder<T> guiceBundle;
private Consumer<Bootstrap<T>> bootstrapModifier;
private Builder(Class<T> configurationClass, GuiceBundle.Builder<T> guiceBundle) {
this.configurationClass = configurationClass;
this.guiceBundle = guiceBundle;
this.bootstrapModifier = bootstrap -> bootstrap.addBundle(guiceBundle.build());
}
public final Builder modules(Module... modules) {
guiceBundle.modules(modules);
return this;
}
public final Builder bundles(Bundle... bundles) {
return bootstrapModifier(bootstrap -> Arrays.asList(bundles).forEach(bootstrap::addBundle));
}
@SafeVarargs
public final Builder bundles(ConfiguredBundle<? super T>... bundles) {
return bootstrapModifier(bootstrap -> Arrays.asList(bundles).forEach(bootstrap::addBundle));
}
public final Builder bootstrapModifier(Consumer<Bootstrap<T>> bootstrapModifier) {
this.bootstrapModifier = this.bootstrapModifier.andThen(bootstrapModifier);
return this;
}
public Application<T> build() {
return new RestApplication2<>(configurationClass, bootstrapModifier);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment