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;
}
}