blob: 6834a09693a89201d5b86b90594eb4787154a500 [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.refactoring.migration;
import com.intellij.lang.Language;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.event.DocumentAdapter;
import com.intellij.openapi.editor.event.DocumentEvent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.psi.*;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.ui.EditorTextField;
import com.intellij.ui.LanguageTextField;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
public class EditMigrationEntryDialog extends DialogWrapper{
private JRadioButton myRbPackage;
private JRadioButton myRbClass;
private EditorTextField myOldNameField;
private EditorTextField myNewNameField;
private final Project myProject;
public EditMigrationEntryDialog(Project project) {
super(project, true);
myProject = project;
setTitle(RefactoringBundle.message("edit.migration.entry.title"));
setHorizontalStretch(1.2f);
init();
}
public JComponent getPreferredFocusedComponent() {
return myOldNameField;
}
protected JComponent createCenterPanel() {
return null;
}
protected JComponent createNorthPanel() {
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints gbConstraints = new GridBagConstraints();
gbConstraints.insets = new Insets(4, 4, 4, 4);
gbConstraints.weighty = 0;
gbConstraints.gridwidth = GridBagConstraints.RELATIVE;
gbConstraints.fill = GridBagConstraints.BOTH;
gbConstraints.weightx = 0;
myRbPackage = new JRadioButton(RefactoringBundle.message("migration.entry.package"));
panel.add(myRbPackage, gbConstraints);
gbConstraints.gridwidth = GridBagConstraints.RELATIVE;
gbConstraints.fill = GridBagConstraints.BOTH;
gbConstraints.weightx = 0;
myRbClass = new JRadioButton(RefactoringBundle.message("migration.entry.class"));
panel.add(myRbClass, gbConstraints);
gbConstraints.gridwidth = GridBagConstraints.REMAINDER;
gbConstraints.fill = GridBagConstraints.BOTH;
gbConstraints.weightx = 1;
panel.add(new JPanel(), gbConstraints);
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.add(myRbPackage);
buttonGroup.add(myRbClass);
gbConstraints.weightx = 0;
gbConstraints.gridwidth = GridBagConstraints.RELATIVE;
gbConstraints.fill = GridBagConstraints.NONE;
JLabel oldNamePrompt = new JLabel(RefactoringBundle.message("migration.entry.old.name"));
panel.add(oldNamePrompt, gbConstraints);
gbConstraints.gridwidth = GridBagConstraints.REMAINDER;
gbConstraints.fill = GridBagConstraints.HORIZONTAL;
gbConstraints.weightx = 1;
final LanguageTextField.DocumentCreator documentCreator = new LanguageTextField.DocumentCreator() {
@Override
public Document createDocument(String value, @Nullable Language language, Project project) {
PsiPackage defaultPackage = JavaPsiFacade.getInstance(project).findPackage("");
final JavaCodeFragment fragment =
JavaCodeFragmentFactory.getInstance(project).createReferenceCodeFragment("", defaultPackage, true, true);
return PsiDocumentManager.getInstance(project).getDocument(fragment);
}
};
myOldNameField = new LanguageTextField(JavaLanguage.INSTANCE, myProject, "", documentCreator);
panel.add(myOldNameField, gbConstraints);
gbConstraints.weightx = 0;
gbConstraints.gridwidth = GridBagConstraints.RELATIVE;
gbConstraints.fill = GridBagConstraints.NONE;
JLabel newNamePrompt = new JLabel(RefactoringBundle.message("migration.entry.new.name"));
panel.add(newNamePrompt, gbConstraints);
gbConstraints.gridwidth = GridBagConstraints.REMAINDER;
gbConstraints.fill = GridBagConstraints.HORIZONTAL;
gbConstraints.weightx = 1;
myNewNameField = new LanguageTextField(JavaLanguage.INSTANCE, myProject, "", documentCreator);
panel.setPreferredSize(new Dimension(300, panel.getPreferredSize().height));
panel.add(myNewNameField, gbConstraints);
final DocumentAdapter documentAdapter = new DocumentAdapter() {
@Override
public void documentChanged(DocumentEvent e) {
validateOKButton();
}
};
myOldNameField.getDocument().addDocumentListener(documentAdapter);
myNewNameField.getDocument().addDocumentListener(documentAdapter);
return panel;
}
private void validateOKButton() {
boolean isEnabled = true;
String text = myOldNameField.getText();
text = text.trim();
PsiManager manager = PsiManager.getInstance(myProject);
if (!PsiNameHelper.getInstance(manager.getProject()).isQualifiedName(text)){
isEnabled = false;
}
text = myNewNameField.getText();
text = text.trim();
if (!PsiNameHelper.getInstance(manager.getProject()).isQualifiedName(text)){
isEnabled = false;
}
setOKActionEnabled(isEnabled);
}
public void setEntry(MigrationMapEntry entry) {
myOldNameField.setText(entry.getOldName());
myNewNameField.setText(entry.getNewName());
myRbPackage.setSelected(entry.getType() == MigrationMapEntry.PACKAGE);
myRbClass.setSelected(entry.getType() == MigrationMapEntry.CLASS);
validateOKButton();
}
public void updateEntry(MigrationMapEntry entry) {
entry.setOldName(myOldNameField.getText().trim());
entry.setNewName(myNewNameField.getText().trim());
if (myRbPackage.isSelected()){
entry.setType(MigrationMapEntry.PACKAGE);
entry.setRecursive(true);
}
else{
entry.setType(MigrationMapEntry.CLASS);
}
}
}