package org.eclipse.dltk.tcl.activestatedebugger.preferences;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.dltk.core.DLTKCore;
import org.eclipse.dltk.core.IModelElement;
import org.eclipse.dltk.core.IProjectFragment;
import org.eclipse.dltk.core.IScriptProject;
import org.eclipse.dltk.core.ModelException;
import org.eclipse.dltk.tcl.internal.core.packages.TclPackageElement;
import org.eclipse.dltk.tcl.internal.core.packages.TclPackageFragment;
import org.eclipse.dltk.ui.DLTKPluginImages;
import org.eclipse.jface.resource.ImageDescriptor;
/**
* @since 2.0
*/
public class PackageContainerElement extends WorkbenchAdaptable {
public PackageContainerElement(SelectionDialogInput input) {
super(input);
}
@Override
public ContainerType getContainerType() {
return ContainerType.PACKAGES;
}
@Override
public Object[] getChildren() {
final Set<IScriptProject> projects = input.collectProjects();
final Set<PackageElement> packages = new HashSet<PackageElement>();
for (TclPackageElement element : collectPackages(projects)) {
packages.add(new PackageElement(element.getPackageName()));
}
return packages.toArray();
}
public ImageDescriptor getImageDescriptor(Object object) {
return DLTKPluginImages.DESC_OBJS_LIBRARY;
}
public String getLabel(Object o) {
return PreferenceMessages.InstrumentationLabelProvider_Packages;
}
private static Set<TclPackageElement> collectPackages(
Set<IScriptProject> projects) {
final Set<TclPackageElement> packages = new HashSet<TclPackageElement>();
for (IScriptProject project : projects) {
try {
for (IProjectFragment fragment : project.getProjectFragments()) {
if (!(fragment instanceof TclPackageFragment)) {
continue;
}
for (IModelElement element : fragment.getChildren()) {
if (element instanceof TclPackageElement) {
packages.add((TclPackageElement) element);
}
}
}
} catch (ModelException e) {
if (DLTKCore.DEBUG) {
e.printStackTrace();
}
}
}
return packages;
}
}