Last active
August 15, 2016 16:23
-
-
Save jhaber/136d46c6c795117d5a5c56d035cac434 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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