package org.objectstyle.wolips.baseforuiplugins.plist;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.objectstyle.woenvironment.plist.ParserDataStructureFactory;
public class PropertyListContentProvider implements ITreeContentProvider {
private ParserDataStructureFactory _factory;
private boolean _rootVisible;
private Set<String> _filteredKeyPaths;
public PropertyListContentProvider(ParserDataStructureFactory factory, boolean rootVisible, Set<String> filteredKeyPaths) {
_factory = factory;
_rootVisible = rootVisible;
_filteredKeyPaths = filteredKeyPaths;
}
public void setFactory(ParserDataStructureFactory factory) {
_factory = factory;
}
public ParserDataStructureFactory getFactory() {
return _factory;
}
public Object[] getChildren(Object parentElement) {
return getElements(parentElement);
}
public Object getParent(Object element) {
Object parent;
if (element instanceof PropertyListPath) {
PropertyListPath path = (PropertyListPath) element;
parent = path.getParent();
if (parent == null) {
parent = path.getRawObject();
}
} else {
parent = null;
}
return parent;
}
public boolean hasChildren(Object element) {
boolean hasChildren = false;
if (element instanceof PropertyListPath) {
PropertyListPath path = (PropertyListPath) element;
hasChildren = path.isCollectionValue();
} else {
hasChildren = true;
}
return hasChildren;
}
public Object[] getElements(Object inputElement) {
List<PropertyListPath> children;
boolean filter = false;
if (inputElement instanceof PropertyListPath) {
PropertyListPath path = (PropertyListPath) inputElement;
children = path.getChildren();
if (path.getParent() == null) {
filter = true;
}
} else if (_rootVisible) {
children = new LinkedList<PropertyListPath>();
children.add(new PropertyListPath(inputElement, _factory));
} else {
children = new PropertyListPath(inputElement, _factory).getChildren();
}
if (_filteredKeyPaths != null && !_filteredKeyPaths.isEmpty() && filter) {
Iterator<PropertyListPath> childrenIter = children.iterator();
while (childrenIter.hasNext()) {
PropertyListPath child = childrenIter.next();
if (_filteredKeyPaths.contains(child.getKeyPath())) {
childrenIter.remove();
}
}
}
return children.toArray();
}
public void dispose() {
// DO NOTHING
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// DO NOTHING
}
}