package jetbrains.mps.ide.platform.dependencyViewer;
/*Generated by MPS */
import jetbrains.mps.ide.ui.tree.MPSTree;
import jetbrains.mps.project.Project;
import jetbrains.mps.ide.ui.tree.MPSTreeNode;
import jetbrains.mps.ide.ui.tree.TextTreeNode;
import org.jetbrains.mps.openapi.module.SModule;
import jetbrains.mps.ide.ui.tree.module.ProjectModuleTreeNode;
import jetbrains.mps.ide.ui.tree.smodel.SModelTreeNode;
import org.jetbrains.mps.openapi.model.SModel;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.ide.ui.tree.smodel.SNodeTreeNode;
import com.intellij.openapi.actionSystem.ActionGroup;
import javax.swing.event.TreeSelectionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.tree.TreePath;
import jetbrains.mps.ide.ui.tree.module.NamespaceTextNode;
import jetbrains.mps.ide.ui.tree.smodel.PackageNode;
import jetbrains.mps.smodel.ModelReadRunnable;
public class DependencyTree extends MPSTree {
private DependencyViewerScope myScope;
private Project myProject;
private DependenciesPanel myParent;
public DependencyTree(DependenciesPanel parent) {
myParent = parent;
addTreeSelectionListener(new DependencyTree.MyTreeSelectionListener());
}
@Override
protected MPSTreeNode rebuild() {
TextTreeNode root = new TextTreeNode("root");
for (SModule module : myScope.getModules()) {
root.add(ProjectModuleTreeNode.createFor(myProject, module));
}
SModelTreeNode.LongModelNameText modelText = new SModelTreeNode.LongModelNameText();
for (SModel model : myScope.getModels()) {
root.add(new SModelTreeNode(model, modelText));
}
for (SNode node : myScope.getRoots()) {
root.add(new SNodeTreeNode(node, null));
}
setRootVisible(false);
setShowsRootHandles(true);
return root;
}
@Override
protected ActionGroup createPopupActionGroup(MPSTreeNode node) {
return null;
}
public void setContent(DependencyViewerScope scope, Project project) {
myScope = scope;
myProject = project;
rebuildLater();
}
private class MyTreeSelectionListener implements TreeSelectionListener {
public MyTreeSelectionListener() {
}
@Override
public void valueChanged(TreeSelectionEvent event) {
final TreePath[] paths = getSelectionPaths();
if (paths == null || paths.length == 0) {
return;
}
final DependencyViewerScope scope = new DependencyViewerScope(myProject.getRepository());
myProject.getModelAccess().runReadAction(new Runnable() {
public void run() {
for (TreePath path : paths) {
MPSTreeNode node = (MPSTreeNode) path.getLastPathComponent();
if (node instanceof SModelTreeNode) {
scope.add(((SModelTreeNode) node).getModel());
}
if (node instanceof ProjectModuleTreeNode) {
scope.add(((ProjectModuleTreeNode) node).getModule());
}
if (node instanceof SNodeTreeNode) {
scope.add(((SNodeTreeNode) node).getSNode());
}
if (node instanceof NamespaceTextNode) {
for (SModule module : ((NamespaceTextNode) node).getModulesUnder()) {
scope.add(module);
}
for (SModel model : ((NamespaceTextNode) node).getModelsUnder()) {
scope.add(model);
}
}
if (node instanceof PackageNode) {
for (SNode nodeUnder : ((PackageNode) node).getNodesUnderPackage()) {
scope.add(nodeUnder);
}
}
}
}
});
myParent.updateTargetsView(scope);
}
}
@Override
protected void doInit(MPSTreeNode node, Runnable runnable) {
super.doInit(node, new ModelReadRunnable(myProject.getRepository().getModelAccess(), runnable));
}
}