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