package org.arquillian.cube.spi;
import org.arquillian.cube.spi.metadata.CubeMetadata;
import org.arquillian.cube.spi.metadata.HasPortBindings;
public interface Cube<T> {
State state();
String getId();
void create() throws CubeControlException;
void start() throws CubeControlException;
void stop() throws CubeControlException;
void destroy() throws CubeControlException;
/**
* Check the state of the Cube controller container on the remote server.
* This should check the remote state of the Cube regardless of the current Cube.State.
*/
boolean isRunningOnRemote();
void changeToPreRunning();
/**
* @return actual binding of running container
*
* @deprecated See {@link HasPortBindings}
*/
Binding bindings();
/**
* @return binding as configured by meta-data, e.g. EXPOSE or pod.json
*
* @deprecated See {@link HasPortBindings}
*/
Binding configuredBindings();
T configuration();
<X extends CubeMetadata> boolean hasMetadata(Class<X> type);
<X extends CubeMetadata> void addMetadata(Class<X> type, X impl);
<X extends CubeMetadata> X getMetadata(Class<X> type);
public enum State {
CREATED,
CREATE_FAILED,
STARTED,
START_FAILED,
STOPPED,
STOP_FAILED,
DESTROYED,
DESTORY_FAILED,
PRE_RUNNING
}
}