package com.yoursway.genericmodel.ui;
import java.util.Collection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import com.yoursway.model.repository.BackgroundConsumer;
import com.yoursway.model.repository.IHandle;
import com.yoursway.model.repository.IRepository;
import com.yoursway.model.repository.IResolver;
public class ViewModelContentProvider implements ITreeContentProvider {
private BackgroundConsumer consumer;
private final IHandle<Collection<INodeElement>> rootElementsH;
private TreeViewer viewer;
public ViewModelContentProvider(IRepository repository, IHandle<Collection<INodeElement>> rootElements) {
this.rootElementsH = rootElements;
consumer = new BackgroundConsumer(repository) {
@Override
protected void somethingChanged(IResolver resolver) {
viewer.refresh();
}
};
}
protected IResolver resolver() {
return consumer.resolver();
}
public Object[] getChildren(Object element) {
return childrenOf(element).toArray();
}
public Object getParent(Object element) {
INodeElement parentNode = (INodeElement) element;
return parentNode.getParent();
}
public boolean hasChildren(Object element) {
return !childrenOf(element).isEmpty();
}
private Collection<INodeElement> childrenOf(Object element) {
final IResolver resolver = resolver();
INodeElement parentNode = (INodeElement) element;
Collection<INodeElement> children = resolver.get(parentNode.children());
return children;
}
public Object[] getElements(Object inputElement) {
IResolver resolver = resolver();
Collection<INodeElement> rootElements = resolver.get(rootElementsH);
return rootElements.toArray();
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
this.viewer = (TreeViewer) viewer;
}
}