package jetbrains.mps.ide.java.platform.refactorings;
/*Generated by MPS */
import jetbrains.mps.baseLanguage.util.plugin.refactorings.AbstractIntroduceFieldRefactoring;
import com.intellij.openapi.project.Project;
import jetbrains.mps.openapi.editor.EditorContext;
import jetbrains.mps.baseLanguage.util.plugin.refactorings.IntroduceVariableRefactoring;
import org.jetbrains.annotations.Nullable;
import javax.swing.JComponent;
import javax.swing.JPanel;
import java.awt.GridBagLayout;
import javax.swing.border.TitledBorder;
import javax.swing.ButtonGroup;
import javax.swing.JRadioButton;
import jetbrains.mps.baseLanguage.util.plugin.refactorings.FieldInitializationPlace;
import jetbrains.mps.smodel.ModelAccessHelper;
import jetbrains.mps.util.Computable;
import java.awt.GridBagConstraints;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import java.awt.Insets;
public class IntroduceFieldDialog extends IntroduceVariableDialog {
private AbstractIntroduceFieldRefactoring myRefactoring;
private final boolean isStatic;
public IntroduceFieldDialog(Project project, AbstractIntroduceFieldRefactoring refactoring, EditorContext editorContext, boolean isStatic) {
super(project, "Introduce Field", editorContext);
this.myRefactoring = refactoring;
this.isStatic = isStatic;
init();
}
@Override
public IntroduceVariableRefactoring getRefactoring() {
return this.myRefactoring;
}
@Nullable
@Override
protected String getHelpId() {
return "refactoring.introduceField";
}
private JComponent createInitDestinationPanel() {
JPanel result = new JPanel(new GridBagLayout());
result.setBorder(new TitledBorder("Initialize in"));
ButtonGroup group = new ButtonGroup();
JRadioButton method = this.createButton(0, FieldInitializationPlace.METHOD, result, group);
JRadioButton field = this.createButton(1, FieldInitializationPlace.FIELD, result, group);
JRadioButton initializer = this.createButton(2, (isStatic ? FieldInitializationPlace.STATICINIT : FieldInitializationPlace.CONSTRUCTOR), result, group);
boolean isInitializeInFieldAvailable = new ModelAccessHelper(myEditorContext.getRepository()).runReadAction(new Computable<Boolean>() {
public Boolean compute() {
return myRefactoring.isInitializeInFieldAvailable();
}
});
if (isInitializeInFieldAvailable) {
field.setSelected(true);
} else {
field.setEnabled(false);
initializer.setEnabled(false);
}
method.setSelected(true);
return result;
}
private JRadioButton createButton(int y, final FieldInitializationPlace place, JPanel result, ButtonGroup group) {
final JRadioButton button = new JRadioButton(place.getName());
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.LINE_START;
c.gridy = y;
c.weightx = 1.0;
result.add(button, c);
group.add(button);
button.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent p0) {
if (button.isSelected()) {
IntroduceFieldDialog.this.myRefactoring.setFieldInitializationPlace(place);
}
}
});
return button;
}
@Nullable
@Override
protected JComponent createCenterPanel() {
initPanel();
int gridy = 1;
GridBagConstraints c;
c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridy = 0;
addIsFinal(c);
c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.insets = new Insets(3, 3, 3, 3);
c.gridx = 0;
c.gridy = gridy;
c.weightx = 1;
c.weighty = 0;
myPanel.add(createInitDestinationPanel(), c);
c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.gridx = 1;
c.gridy = gridy++;
addVisibilityPanel(c);
if (getRefactoring().hasDuplicates()) {
addReplacingAll(gridy++);
}
c = new GridBagConstraints();
c.gridy = gridy;
c.weighty = 1;
myPanel.add(new JPanel(), c);
return myPanel;
}
}