package com.redhat.ceylon.eclipse.code.navigator;
import org.eclipse.jdt.internal.ui.packageview.PackageFragmentRootContainer;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
public class EmptyLibraryContainerFilter extends ViewerFilter {
public EmptyLibraryContainerFilter() {
}
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (element instanceof PackageFragmentRootContainer && viewer instanceof StructuredViewer) {
return hasFilteredChildren((StructuredViewer)viewer, (PackageFragmentRootContainer)element);
}
return true;
}
private boolean hasFilteredChildren(StructuredViewer viewer, PackageFragmentRootContainer fragment) {
Object[] children= getRawChildren(viewer, fragment);
ViewerFilter[] filters= viewer.getFilters();
for (int i= 0; i < filters.length; i++) {
children= filters[i].filter(viewer, fragment, children);
if (children.length == 0)
return false;
}
return true;
}
private Object[] getRawChildren(StructuredViewer viewer, PackageFragmentRootContainer fragment) {
IStructuredContentProvider provider = (IStructuredContentProvider) viewer.getContentProvider();
if (provider instanceof ITreeContentProvider) {
return ((ITreeContentProvider)provider).getChildren(fragment);
}
return provider.getElements(fragment);
}
}