package org.arquillian.cube.impl.client;
import org.arquillian.cube.spi.Cube;
import org.arquillian.cube.spi.CubeRegistry;
import org.arquillian.cube.spi.event.CreateCube;
import org.arquillian.cube.spi.event.DestroyCube;
import org.arquillian.cube.spi.event.PreRunningCube;
import org.arquillian.cube.spi.event.StartCube;
import org.arquillian.cube.spi.event.StopCube;
import org.jboss.arquillian.core.api.annotation.Observes;
public class CubeLifecycleController {
public void create(@Observes CreateCube event, CubeRegistry registry) {
validateAndGet(registry, event.getCubeId()).create();
}
public void start(@Observes StartCube event, CubeRegistry registry) {
validateAndGet(registry, event.getCubeId()).start();
}
public void stop(@Observes StopCube event, CubeRegistry registry) {
validateAndGet(registry, event.getCubeId()).stop();
}
public void destroy(@Observes DestroyCube event, CubeRegistry registry) {
validateAndGet(registry, event.getCubeId()).destroy();
}
public void changeToPreRunning(@Observes PreRunningCube event, CubeRegistry registry) {
validateAndGet(registry, event.getCubeId()).changeToPreRunning();
}
private Cube<?> validateAndGet(CubeRegistry registry, String cubeId) {
Cube<?> cube = registry.getCube(cubeId);
if (cube == null) {
throw new IllegalArgumentException("No cube with id " + cubeId + " found in registry");
}
return cube;
}
}