package fr.opensagres.nosql.ide.ui.internal.actions.servers;
import org.eclipse.jface.viewers.ISelectionProvider;
import fr.opensagres.nosql.ide.core.extensions.IServerRunnerType;
import fr.opensagres.nosql.ide.core.model.IServer;
import fr.opensagres.nosql.ide.core.model.ServerState;
import fr.opensagres.nosql.ide.ui.internal.ImageResources;
import fr.opensagres.nosql.ide.ui.internal.actions.AbstractTreeNodeAction;
public class ServerRunnerAction extends AbstractTreeNodeAction {
private final IServerRunnerType serverRunnerType;
private final boolean start;
public ServerRunnerAction(IServerRunnerType serverRunnerType,
boolean start, ISelectionProvider selectionProvider) {
super(selectionProvider, start ? serverRunnerType.getStartName()
: serverRunnerType.getStopName());
this.start = start;
this.serverRunnerType = serverRunnerType;
if (start) {
setImageDescriptor(ImageResources
.getImageDescriptor(ImageResources.IMG_ELCL_START));
setHoverImageDescriptor(ImageResources
.getImageDescriptor(ImageResources.IMG_CLCL_START));
setDisabledImageDescriptor(ImageResources
.getImageDescriptor(ImageResources.IMG_DLCL_START));
} else {
setImageDescriptor(ImageResources
.getImageDescriptor(ImageResources.IMG_ELCL_STOP));
setHoverImageDescriptor(ImageResources
.getImageDescriptor(ImageResources.IMG_CLCL_STOP));
setDisabledImageDescriptor(ImageResources
.getImageDescriptor(ImageResources.IMG_DLCL_STOP));
}
}
@Override
public boolean accept(Object obj) {
if (!(obj instanceof IServer)) {
return false;
}
IServer server = (IServer) obj;
if (!serverRunnerType.getRunner().canSupport(server)) {
return false;
}
if (start) {
return canStartServer(server);
}
return canStopServer(server);
}
private boolean canStartServer(IServer server) {
if (server.getServerState() == ServerState.Connected) {
return false;
}
return true;
}
private boolean canStopServer(IServer server) {
ServerState state = server.getServerState();
if (state == ServerState.Stopped || state == ServerState.Stopping
|| state == ServerState.Disconnected) {
return false;
}
return true;
}
@Override
public void perform(Object obj) {
IServer server = (IServer) obj;
try {
if (start) {
serverRunnerType.getRunner().start(server);
} else {
serverRunnerType.getRunner().stop(server, false);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}