package fr.opensagres.mongodb.ide.ui.actions.server;
import org.eclipse.jface.viewers.ISelectionProvider;
import fr.opensagres.mongodb.ide.core.extensions.IServerRunnerType;
import fr.opensagres.mongodb.ide.core.model.Server;
import fr.opensagres.mongodb.ide.core.model.ServerState;
import fr.opensagres.mongodb.ide.ui.internal.ImageResources;
public class ServerRunnerAction extends TreeNodeActionAdapter {
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(Server server) {
if (!serverRunnerType.getRunner().canSupport(server)) {
return false;
}
if (start) {
return canStartServer(server);
}
return canStopServer(server);
}
private boolean canStartServer(Server server) {
if (server.getServerState() == ServerState.Connected) {
return false;
}
return true;
}
private boolean canStopServer(Server server) {
ServerState state = server.getServerState();
if (state == ServerState.Stopped || state == ServerState.Stopping
|| state == ServerState.Disconnected) {
return false;
}
return true;
}
@Override
public void perform(Server server) {
try {
if (start) {
serverRunnerType.getRunner().start(server);
} else {
serverRunnerType.getRunner().stop(server, false);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}