package com.jasonclawson.dropwizardry.guice.support; import io.dropwizard.Bundle; import io.dropwizard.Configuration; import io.dropwizard.setup.Bootstrap; import io.dropwizard.setup.Environment; import java.util.LinkedList; import java.util.List; import com.google.inject.Injector; /** * * * @author jclawson * * @param <T> */ public class GuiceBootstrap<T extends Configuration> implements Bundle { private final Injector injector; private final List<Class<? extends Bundle>> runtimeBundleClasses = new LinkedList<>(); private boolean isInitialized = false; public GuiceBootstrap(Injector injector) { this.injector = injector; } @Override public void initialize(Bootstrap<?> bootstrap) { } @Override public void run(Environment environment) { for(Class<? extends Bundle> bundleClass : runtimeBundleClasses) { Bundle runtimeBundle = injector.getInstance(bundleClass); runtimeBundle.run(environment); } //free up memory runtimeBundleClasses.clear(); isInitialized = true; } public void addBundle(Class<? extends Bundle> bundleClass) { if(isInitialized) { throw new IllegalStateException("You cannot add bundles after GuiceBootstrap has been run"); } runtimeBundleClasses.add(bundleClass); } }