package org.arquillian.cube.impl.client;
import java.io.OutputStream;
import java.util.List;
import org.arquillian.cube.ChangeLog;
import org.arquillian.cube.CubeController;
import org.arquillian.cube.CubeID;
import org.arquillian.cube.TopContainer;
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.CubeControlEvent;
import org.arquillian.cube.spi.event.DestroyCube;
import org.arquillian.cube.spi.event.StartCube;
import org.arquillian.cube.spi.event.StopCube;
import org.arquillian.cube.spi.metadata.CanCopyFromContainer;
import org.arquillian.cube.spi.metadata.CanSeeChangesOnFilesystem;
import org.arquillian.cube.spi.metadata.CanSeeTop;
import org.jboss.arquillian.core.api.Event;
import org.jboss.arquillian.core.api.Instance;
import org.jboss.arquillian.core.api.annotation.Inject;
import org.jboss.arquillian.core.spi.Validate;
/**
* @author <a href="mailto:smikloso@redhat.com">Stefan Miklosovic</a>
*/
public class ClientCubeController implements CubeController {
@Inject
private Instance<CubeRegistry> cubeRegistry;
@Inject
private Event<CubeControlEvent> controlEvent;
@Override
public void create(CubeID cubeId) {
create(cubeId.get());
}
@Override
public void start(CubeID cubeId) {
start(cubeId.get());
}
@Override
public void stop(CubeID cubeId) {
stop(cubeId.get());
}
@Override
public void destroy(CubeID cubeId) {
destroy(cubeId.get());
}
@Override
public void create(String cubeId) {
Cube<?> cube = cubeRegistry.get().getCube(cubeId);
Validate.notNull(cube, "Cube with id '" + cubeId + "' to create does not exist.");
controlEvent.fire(new CreateCube(cubeId));
}
@Override
public void start(String cubeId) {
Cube<?> cube = cubeRegistry.get().getCube(cubeId);
Validate.notNull(cube, "Cube with id '" + cubeId + "' to start does not exist.");
controlEvent.fire(new StartCube(cubeId));
}
@Override
public void stop(String cubeId) {
Cube<?> cube = cubeRegistry.get().getCube(cubeId);
Validate.notNull(cube, "Cube with id '" + cubeId + "' to stop does not exist.");
controlEvent.fire(new StopCube(cubeId));
}
@Override
public void destroy(String cubeId) {
Cube<?> cube = cubeRegistry.get().getCube(cubeId);
Validate.notNull(cube, "Cube with id '" + cubeId + "' to destroy does not exist.");
controlEvent.fire(new DestroyCube(cubeId));
}
@Override
public void copyFileDirectoryFromContainer(String cubeId, String from,
String to) {
Cube<?> cube = cubeRegistry.get().getCube(cubeId);
Validate.notNull(cube, "Cube with id '" + cubeId + "' to execute copy file command does not exist.");
if (cube.hasMetadata(CanCopyFromContainer.class)) {
cube.getMetadata(CanCopyFromContainer.class).copyDirectory(from, to);
} else {
throw new IllegalArgumentException(
"Cube " + cubeId + " does not provide the " + CanCopyFromContainer.class.getSimpleName() + " metadata");
}
}
@Override
public void copyFileDirectoryFromContainer(CubeID cubeId, String from, String to) {
copyFileDirectoryFromContainer(cubeId.get(), from, to);
}
@Override
public List<ChangeLog> changesOnFilesystem(String cubeId) {
Cube<?> cube = cubeRegistry.get().getCube(cubeId);
Validate.notNull(cube, "Cube with id '" + cubeId + "' to get changes command does not exist.");
if (cube.hasMetadata(CanSeeChangesOnFilesystem.class)) {
return cube.getMetadata(CanSeeChangesOnFilesystem.class).changes();
} else {
throw new IllegalArgumentException("Cube "
+ cubeId
+ " does not provide the "
+ CanSeeChangesOnFilesystem.class.getSimpleName()
+ " metadata");
}
}
@Override
public List<ChangeLog> changesOnFilesystem(CubeID cubeId) {
return changesOnFilesystem(cubeId.get());
}
@Override
public void copyLog(String cubeId, boolean follow, boolean stdout, boolean stderr, boolean timestamps, int tail,
OutputStream outputStream) {
Cube<?> cube = cubeRegistry.get().getCube(cubeId);
Validate.notNull(cube, "Cube with id '" + cubeId + "' to get logs command does not exist.");
if (cube.hasMetadata(CanCopyFromContainer.class)) {
cube.getMetadata(CanCopyFromContainer.class).copyLog(follow, stdout, stderr, timestamps, tail, outputStream);
} else {
throw new IllegalArgumentException(
"Cube " + cubeId + " does not provide the " + CanCopyFromContainer.class.getSimpleName() + " metadata");
}
}
@Override
public void copyLog(CubeID containerId, boolean follow, boolean stdout, boolean stderr, boolean timestamps, int tail,
OutputStream outputStream) {
copyLog(containerId.get(), follow, stdout, stderr, timestamps, tail, outputStream);
}
@Override
public TopContainer top(String cubeId) {
Cube<?> cube = cubeRegistry.get().getCube(cubeId);
Validate.notNull(cube, "Cube with id '" + cubeId + "' to get top command does not exist.");
if (cube.hasMetadata(CanSeeTop.class)) {
return cube.getMetadata(CanSeeTop.class).top();
} else {
throw new IllegalArgumentException(
"Cube " + cubeId + " does not provide the " + CanSeeTop.class.getSimpleName() + " metadata");
}
}
@Override
public TopContainer top(CubeID cubeId) {
return top(cubeId.get());
}
}