package fr.opensagres.nosql.ide.ui.viewers.server;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import fr.opensagres.nosql.ide.core.Platform;
import fr.opensagres.nosql.ide.core.extensions.IServerType;
import fr.opensagres.nosql.ide.core.model.IServer;
import fr.opensagres.nosql.ide.core.model.ITreeContainerNode;
import fr.opensagres.nosql.ide.core.model.ITreeSimpleNode;
import fr.opensagres.nosql.ide.core.model.NodeTypeConstants;
import fr.opensagres.nosql.ide.core.model.TreeContainerNode;
public class ServerTreeContentProvider extends ArrayContentProvider implements
ITreeContentProvider {
private static final Object[] EMPTY_ARRAY = new Object[0];
private static ServerTreeContentProvider instance;
public static ServerTreeContentProvider getInstance() {
synchronized (ServerTreeContentProvider.class) {
if (instance == null) {
instance = new ServerTreeContentProvider();
}
return instance;
}
}
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof IServerType) {
return Platform.getServerManager()
.getServers((IServerType) parentElement).toArray();
}
if (parentElement instanceof ITreeContainerNode) {
return ((ITreeContainerNode) parentElement).getChildren().toArray();
}
return EMPTY_ARRAY;
}
public Object getParent(Object element) {
if (element instanceof ITreeSimpleNode) {
return ((ITreeSimpleNode) element).getParent();
}
return null;
}
public boolean hasChildren(Object element) {
if (element instanceof IServerType) {
return true;
}
if (element instanceof ITreeSimpleNode) {
ITreeSimpleNode node = (ITreeSimpleNode) element;
switch (node.getType()) {
case NodeTypeConstants.Server:
return ((IServer) element).isConnected();
default:
return element instanceof TreeContainerNode;
}
}
return false;
}
}