package ru.vyarus.dropwizard.guice.test; import io.dropwizard.Application; import io.dropwizard.Configuration; import io.dropwizard.cli.EnvironmentCommand; import io.dropwizard.setup.Environment; import net.sourceforge.argparse4j.inf.Namespace; import org.eclipse.jetty.util.component.ContainerLifeCycle; /** * Lightweight variation of server command for testing purposes. * Handles managed objects lifecycle. * * @param <C> configuration type * @author Vyacheslav Rusakov * @since 23.10.2014 */ public class TestCommand<C extends Configuration> extends EnvironmentCommand<C> { private final Class<C> configurationClass; private ContainerLifeCycle container; public TestCommand(final Application<C> application) { super(application, "guicey-test", "Specific command to run guice context without jetty server"); cleanupAsynchronously(); configurationClass = application.getConfigurationClass(); } @Override protected void run(final Environment environment, final Namespace namespace, final C configuration) throws Exception { // simulating managed objects lifecycle support container = new ContainerLifeCycle(); environment.lifecycle().attach(container); container.start(); } public void stop() { try { container.stop(); } catch (Exception e) { throw new IllegalStateException("Failed to stop managed objects container", e); } container.destroy(); cleanup(); } @Override protected Class<C> getConfigurationClass() { return configurationClass; } }