package jetbrains.mps.ide.hierarchy;
/*Generated by MPS */
import jetbrains.mps.ide.ui.tree.MPSTreeNode;
import org.jetbrains.mps.openapi.model.SNode;
import org.jetbrains.mps.openapi.model.SNodeReference;
import org.jetbrains.annotations.NotNull;
import jetbrains.mps.ide.icons.IconManager;
import org.jetbrains.mps.openapi.model.SModel;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
public class HierarchyTreeNode extends MPSTreeNode {
private SNode myNode;
private final SNodeReference myNodeRef;
protected AbstractHierarchyTree myHierarchyTree;
public HierarchyTreeNode(@NotNull SNode declaration, AbstractHierarchyTree tree) {
super(declaration);
// FIXME drop myNode in favor of myNodeRef
myNode = declaration;
myNodeRef = declaration.getReference();
myHierarchyTree = tree;
setNodeIdentifier(calculateNodeIdentifier());
setToggleClickCount(-1);
}
@Override
protected void doUpdatePresentation() {
SNode node = myNode;
if (node == null) {
return;
}
setIcon(IconManager.getIconFor(node));
String addText = calculateAdditionalText();
if (addText != null) {
setAdditionalText(addText);
}
setAutoExpandable(false);
}
protected String calculateAdditionalText() {
if (getNode() == null) {
return null;
}
SModel model = SNodeOperations.getModel(getNode());
if (model == null) {
return null;
}
return model.getReference().getModelName();
}
public SNode getNode() {
return myNode;
}
@NotNull
public SNodeReference getNodeReference() {
return myNodeRef;
}
@NotNull
public String calculateNodeIdentifier() {
if (getNode() == null) {
return "null";
}
String name;
if (myHierarchyTree.overridesNodeIdentifierCalculation()) {
name = myHierarchyTree.calculateNodeIdentifier(this);
} else {
name = getNode().getName();
}
return (name == null ? "no name" : name);
}
}