package com.google.dart.tools.ui.internal.projects;
import com.google.common.collect.Lists;
import com.google.dart.tools.core.DartCore;
import com.google.dart.tools.core.pub.PubCacheManager_NEW;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import java.util.List;
/**
* Provides content for a tree viewer that shows only containers.
*/
public class ContainerContentProvider implements ITreeContentProvider {
@Override
public void dispose() {
}
@Override
public Object[] getChildren(Object element) {
if (element instanceof IWorkspace) {
List<IProject> accessibleProjects = Lists.newArrayList();
IProject[] allProjects = ((IWorkspace) element).getRoot().getProjects();
for (IProject project : allProjects) {
if (!project.isOpen()) {
continue;
}
if (PubCacheManager_NEW.isPubCacheProject(project)) {
continue;
}
accessibleProjects.add(project);
}
return accessibleProjects.toArray();
} else if (element instanceof IContainer) {
IContainer container = (IContainer) element;
if (container.isAccessible()) {
try {
List<IResource> children = Lists.newArrayList();
IResource[] members = container.members();
for (IResource member : members) {
if (member.getType() == IResource.FILE) {
continue;
}
if (DartCore.PACKAGES_DIRECTORY_NAME.equals(member.getName())) {
continue;
}
children.add(member);
}
return children.toArray();
} catch (CoreException e) {
// this should never happen because we call #isAccessible before invoking #members
}
}
}
return new Object[0];
}
@Override
public Object[] getElements(Object element) {
return getChildren(element);
}
@Override
public Object getParent(Object element) {
if (element instanceof IResource) {
return ((IResource) element).getParent();
}
return null;
}
@Override
public boolean hasChildren(Object element) {
return getChildren(element).length > 0;
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
}