package jetbrains.mps.ide.platform.refactoring; /*Generated by MPS */ import org.jetbrains.mps.openapi.model.SModel; import org.jetbrains.annotations.NotNull; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.Nullable; import javax.swing.JComponent; import java.awt.Dimension; import org.jetbrains.annotations.NonNls; public class MoveNodesDialog extends ModelOrNodeChooserDialog { private SModel myModel; private MoveNodesDialog.ModelFilter myFilter; protected NodeLocation mySelectedObject; public MoveNodesDialog(@NotNull Project project, SModel model) { super(project); myModel = model; init(); setTitle(REFACTORING_NAME + " " + "nodes"); } @Override protected void doRefactoringAction() { NodeLocation selectedObject = myChooser.getSelectedObject(); if (myFilter == null || myFilter.checkForObject(selectedObject, myModel, myChooser.getComponent())) { mySelectedObject = selectedObject; super.doRefactoringAction(); } } @Nullable @Override protected JComponent createCenterPanel() { myChooser = RefactoringAccessEx.getInstance().createTargetChooser(myProject, myModel); JComponent centerPanel = myChooser.getComponent(); centerPanel.setPreferredSize(new Dimension(400, 900)); return centerPanel; } public void setFilter(MoveNodesDialog.ModelFilter filter) { myFilter = filter; } @Nullable @NonNls @Override protected String getDimensionServiceKey() { return getClass().getName(); } public static Object getSelectedObject(@NotNull Project project, SModel model) { MoveNodesDialog dialog = new MoveNodesDialog(project, model); dialog.show(); return dialog.mySelectedObject; } public static NodeLocation getSelectedObject(@NotNull Project project, SModel model, MoveNodesDialog.ModelFilter filter) { MoveNodesDialog dialog = new MoveNodesDialog(project, model); dialog.setFilter(filter); dialog.show(); return dialog.mySelectedObject; } public static abstract class ModelFilter extends ModelOrNodeChooserDialog.Filter { public abstract boolean check(NodeLocation selectedObject, SModel model); public abstract String getErrorMessage(NodeLocation selectedObject); private boolean checkForObject(NodeLocation selectedObject, SModel model, JComponent component) { if (!(check(selectedObject, model))) { showError("Nodes can't be moved", getErrorMessage(selectedObject), component); return false; } return true; } } }