package jetbrains.mps.ide.refactoring; /*Generated by MPS */ import jetbrains.mps.ide.platform.refactoring.ModelElementTargetChooser; import jetbrains.mps.ide.projectPane.logicalview.ProjectTree; import com.intellij.ui.components.JBScrollPane; import com.intellij.openapi.project.Project; import jetbrains.mps.ide.project.ProjectHelper; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.ide.projectPane.logicalview.ProjectTreeFindHelper; import jetbrains.mps.ide.ui.tree.MPSTreeNode; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.ide.platform.refactoring.NodeLocation; import jetbrains.mps.ide.ui.tree.smodel.SNodeTreeNode; import jetbrains.mps.ide.ui.tree.smodel.SModelTreeNode; import javax.swing.JComponent; public class ModelOrNodeChooser implements ModelElementTargetChooser { private final ProjectTree myTree; private final JBScrollPane myComponent; /*package*/ ModelOrNodeChooser(Project project) { myComponent = new JBScrollPane(); myTree = new ProjectTree(ProjectHelper.toMPSProject(project)); myComponent.setViewportView(myTree); myTree.rebuildNow(); } /*package*/ void select(SModel model) { ProjectTreeFindHelper helper = new ProjectTreeFindHelper(myTree); MPSTreeNode treeNode = helper.findMostSuitableModelTreeNode(model); selectInTree(treeNode); } /*package*/ void select(SNode node) { ProjectTreeFindHelper helper = new ProjectTreeFindHelper(myTree); MPSTreeNode treeNode = helper.findMostSuitableSNodeTreeNode(node); selectInTree(treeNode); } private void selectInTree(final MPSTreeNode treeNode) { if (treeNode == null) { return; } myTree.runWithoutExpansion(new Runnable() { public void run() { myTree.selectNode(treeNode); } }); } @Override public NodeLocation getSelectedObject() { Object selection = myTree.getSelectionPath().getLastPathComponent(); NodeLocation result = null; if (selection instanceof SNodeTreeNode) { result = new NodeLocation.NodeLocationChild(((SNodeTreeNode) selection).getSNode()); } else if (selection instanceof SModelTreeNode) { result = new NodeLocation.NodeLocationRoot(((SModelTreeNode) selection).getModel()); } return result; } @Override public JComponent getComponent() { return myComponent; } }