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