package org.eclipse.dltk.tcl.internal.ui.navigation; import java.util.Arrays; import java.util.List; import org.eclipse.dltk.core.DLTKCore; import org.eclipse.dltk.core.IBuildpathEntry; 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.internal.ui.scriptview.BuildPathContainer; import org.eclipse.dltk.launching.ScriptRuntime; import org.eclipse.dltk.tcl.internal.core.packages.TclPackageElement; import org.eclipse.dltk.tcl.internal.core.packages.TclPackageFragment; import org.eclipse.dltk.tcl.internal.core.sources.TclSourcesFragment; import org.eclipse.dltk.ui.IModelContentProvider; import org.eclipse.jface.viewers.ITreeContentProvider; @SuppressWarnings("restriction") public class TclModelContentProvider implements IModelContentProvider { public TclModelContentProvider() { } @Override public void provideModelChanges(Object parentElement, List children, ITreeContentProvider iTreeContentProvider) { // System.out.println("CONTAINER:" + parentElement); if (parentElement instanceof BuildPathContainer) { BuildPathContainer container = (BuildPathContainer) parentElement; IBuildpathEntry entry = container.getBuildpathEntry(); if (!entry.getPath().segment(0) .equals(ScriptRuntime.INTERPRETER_CONTAINER)) { return; } IScriptProject project = container.getScriptProject(); IProjectFragment[] fragments; try { fragments = project.getProjectFragments(); for (int i = 0; i < fragments.length; i++) { if (fragments[i] instanceof TclPackageFragment) { TclPackageFragment fragment = (TclPackageFragment) fragments[i]; children.addAll(Arrays.asList(fragment.getChildren())); } } } catch (ModelException e) { if (DLTKCore.DEBUG) { e.printStackTrace(); } } } if (parentElement instanceof IScriptProject) { // Add sources element IScriptProject prj = (IScriptProject) parentElement; try { IProjectFragment[] fragments = prj.getProjectFragments(); for (int i = 0; i < fragments.length; i++) { if (fragments[i] instanceof TclSourcesFragment) { TclSourcesFragment fragment = (TclSourcesFragment) fragments[i]; if (fragment.containChildrens()) { children.add(fragment); } } } } catch (ModelException e) { DLTKCore.error("Error resolving project fragments", e); } } } @Override public Object getParentElement(Object element, ITreeContentProvider iTreeContentProvider) { if (element instanceof TclPackageFragment || element instanceof TclPackageElement) { // We need to return buildpath container here. IScriptProject project = ((IModelElement) element) .getScriptProject(); Object[] children = iTreeContentProvider.getChildren(project); for (int i = 0; i < children.length; i++) { if (children[i] instanceof BuildPathContainer) { BuildPathContainer container = (BuildPathContainer) children[i]; IBuildpathEntry entry = container.getBuildpathEntry(); if (entry.getPath().segment(0) .equals(ScriptRuntime.INTERPRETER_CONTAINER)) { return container; } } } } return null; } }