package jetbrains.mps.ide.platform.modeltree; /*Generated by MPS */ import javax.swing.event.TreeExpansionListener; import javax.swing.JTree; import javax.swing.event.TreeExpansionEvent; import javax.swing.tree.DefaultTreeModel; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.ide.icons.IconManager; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.smodel.SNodePointer; import jetbrains.mps.ide.icons.IdeIcons; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.internal.collections.runtime.ISelector; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.smodel.behaviour.BHReflection; import jetbrains.mps.core.aspects.behaviour.SMethodTrimmedId; import java.util.Enumeration; public abstract class ModelTreeBuilder implements TreeExpansionListener { private JTree myTree; public ModelTreeBuilder(JTree tree) { myTree = tree; myTree.addTreeExpansionListener(this); } @Override public void treeExpanded(TreeExpansionEvent event) { Object lastNode = event.getPath().getLastPathComponent(); if (lastNode instanceof ModelTreeNode) { ModelTreeNode expandedNode = ((ModelTreeNode) lastNode); if (!(expandedNode.isInitialized())) { initTreeNode(expandedNode); expandedNode.setInitialized(true); } } } @Override public void treeCollapsed(TreeExpansionEvent event) { } protected abstract void initTreeNode(ModelTreeNode node); protected void notifyNodeStructureChanged(ModelTreeNode modelTreeNode) { ((DefaultTreeModel) myTree.getModel()).nodeStructureChanged(modelTreeNode); } public static ModelTreeNode createSModelTreeNode(SModel descriptor) { String label = descriptor.getName().getValue(); ModelTreeNode node = new ModelTreeNode(label, IconManager.getIconFor(descriptor), descriptor); node.setInitialized(false); return node; } public static ModelTreeNode createSNodeTreeNode(SNode node) { return new ModelTreeNode(node.getPresentation(), IconManager.getIconFor(node), new SNodePointer(node)); } public static ModelTreeNode createFolderTreeNode(String folderName) { return new ModelTreeNode(folderName, IdeIcons.CLOSED_FOLDER, IdeIcons.OPENED_FOLDER); } public static Iterable<SNode> sortChildNodes(Iterable<SNode> nodes) { return Sequence.fromIterable(nodes).sort(new ISelector<SNode, String>() { public String select(SNode node) { return SPropertyOperations.getString(node, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x10802efe25aL, 0x115eca8579fL, "virtualPackage")) + "|" + ((String) BHReflection.invoke(node, SMethodTrimmedId.create("getPresentation", null, "hEwIMiw"))); } }, true); } public static void insertChildSNodeTreeNode(ModelTreeNode sModelTreeNode, ModelTreeNode sNodeTreeNode, String virtualPackage) { ModelTreeNode parentTreeNode = sModelTreeNode; if ((virtualPackage != null && virtualPackage.length() > 0)) { for (String sub : virtualPackage.split("\\.")) { ModelTreeNode packageTreeNode = findChildNodeByText(parentTreeNode, sub); if (packageTreeNode == null) { packageTreeNode = createFolderTreeNode(sub); parentTreeNode.add(packageTreeNode); } parentTreeNode = packageTreeNode; } } parentTreeNode.add(sNodeTreeNode); } public static ModelTreeNode findChildNodeByText(ModelTreeNode parentTreeNode, String childName) { for (Enumeration children = parentTreeNode.children(); children.hasMoreElements();) { Object nextChild = children.nextElement(); if (nextChild instanceof ModelTreeNode) { ModelTreeNode treeNode = ((ModelTreeNode) nextChild); if (childName.equals(treeNode.getText())) { return treeNode; } } } return null; } }