package jetbrains.mps.vcs.changesmanager.tree; /*Generated by MPS */ import org.jetbrains.annotations.Nullable; import jetbrains.mps.vcs.changesmanager.tree.features.Feature; import org.jetbrains.annotations.NotNull; import jetbrains.mps.ide.ui.tree.MPSTreeNode; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.ide.ui.tree.MPSTreeNodeEx; import org.jetbrains.mps.openapi.model.SNodeReference; import jetbrains.mps.ide.ui.tree.smodel.SNodeTreeNode; import jetbrains.mps.ide.ui.smodel.ConceptTreeNode; import jetbrains.mps.vcs.changesmanager.tree.features.NodeFeature; import jetbrains.mps.ide.ui.smodel.PropertyTreeNode; import jetbrains.mps.vcs.changesmanager.tree.features.PropertyFeature; import jetbrains.mps.ide.ui.smodel.ReferenceTreeNode; import org.jetbrains.mps.openapi.model.SReference; import jetbrains.mps.smodel.SNodePointer; import jetbrains.mps.ide.ui.smodel.PropertiesTreeNode; import jetbrains.mps.vcs.changesmanager.tree.features.PropertiesFeature; import jetbrains.mps.ide.ui.smodel.ReferencesTreeNode; import jetbrains.mps.vcs.changesmanager.tree.features.ReferencesFeature; import jetbrains.mps.ide.ui.tree.smodel.PackageNode; import jetbrains.mps.vcs.changesmanager.tree.features.VirtualPackageFeature; import jetbrains.mps.ide.ui.tree.smodel.SModelTreeNode; import jetbrains.mps.vcs.changesmanager.tree.features.ModelFeature; public class ProjectTreeFeatureExtractor implements TreeNodeFeatureExtractor { public ProjectTreeFeatureExtractor() { } @Nullable @Override public Feature getFeature(@NotNull MPSTreeNode treeNode) { SNode node = null; if (treeNode instanceof MPSTreeNodeEx) { node = ((MPSTreeNodeEx) treeNode).getSNode(); } else if (treeNode.getParent() instanceof MPSTreeNodeEx) { node = ((MPSTreeNodeEx) treeNode.getParent()).getSNode(); } SNodeReference nodePointer = (node == null ? null : node.getReference()); if (nodePointer == null || nodePointer.getModelReference() == null) { return null; } if (treeNode instanceof SNodeTreeNode || treeNode instanceof ConceptTreeNode) { return new NodeFeature(nodePointer); } else if (treeNode instanceof PropertyTreeNode && treeNode.getParent() instanceof MPSTreeNodeEx) { return new PropertyFeature(nodePointer, ((PropertyTreeNode) treeNode).getProperty()); } else if (treeNode instanceof ReferenceTreeNode) { SReference ref = ((ReferenceTreeNode) treeNode).getRef(); return new PropertyFeature(new SNodePointer(ref.getSourceNode()), ref.getRole()); } else if (treeNode instanceof PropertiesTreeNode) { return new PropertiesFeature(nodePointer); } else if (treeNode instanceof ReferencesTreeNode) { return new ReferencesFeature(nodePointer); } else if (treeNode instanceof PackageNode) { PackageNode pn = ((PackageNode) treeNode); return new VirtualPackageFeature(pn.getModelReference(), pn.getPackage()); } else if (treeNode instanceof SModelTreeNode) { return new ModelFeature(((SModelTreeNode) treeNode).getModel().getReference()); } return null; } }