package name.graf.emanuel.testfileeditor.ui.support.outline;
import org.eclipse.jface.text.DefaultPositionUpdater;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IPositionUpdater;
import org.eclipse.jface.viewers.TreeNodeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.texteditor.IDocumentProvider;
import name.graf.emanuel.testfileeditor.Activator;
import name.graf.emanuel.testfileeditor.model.TestFile;
import name.graf.emanuel.testfileeditor.model.node.Node;
import name.graf.emanuel.testfileeditor.model.node.Test;
public class TestFileTreeNodeContentProvider extends TreeNodeContentProvider {
protected IPositionUpdater fPositionUpdater;
private final IDocumentProvider provider;
private TestFile file;
private final IEditorInput input;
public TestFileTreeNodeContentProvider(final IDocumentProvider provider, final IEditorInput input) {
super();
this.fPositionUpdater = new DefaultPositionUpdater(Activator.TEST_FILE_PARTITIONING);
this.provider = provider;
this.input = input;
this.file = new TestFile((FileEditorInput) input, provider);
file.parse();
}
@Override
public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
if (oldInput != null) {
final IDocument document = this.provider.getDocument(oldInput);
if (document != null) {
document.removePositionUpdater(this.fPositionUpdater);
}
}
if (newInput != null) {
final IDocument document = this.provider.getDocument(newInput);
if (document != null) {
document.addPositionUpdater(this.fPositionUpdater);
file.setInput((FileEditorInput) input);
}
}
}
@Override
public void dispose() {
if (this.file != null) {
this.file = null;
}
}
public boolean isDeleted(final Object element) {
return false;
}
@Override
public Object[] getElements(final Object element) {
return new Object[] { this.file };
}
@Override
public boolean hasChildren(final Object element) {
if (element instanceof Node) {
final Node node = (Node) element;
return node.hasChildren();
}
final boolean ret = element == this.file || element == this.input;
return ret;
}
@Override
public Object getParent(final Object element) {
if (element instanceof Node) {
final Node node = (Node) element;
return node.getParent();
}
if (element == this.file) {
return this.input;
}
return null;
}
@Override
public Object[] getChildren(final Object element) {
if (element == this.file) {
final Test[] tests = this.file.getTests();
return tests;
}
if (element instanceof Node) {
final Node node = (Node) element;
return node.getChildren();
}
return new Object[0];
}
}