]> git.uio.no Git - ifi-stolz-refaktor.git/blobdiff - case-study/jdt-before/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameFieldWizard.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-before / ui refactoring / org / eclipse / jdt / internal / ui / refactoring / reorg / RenameFieldWizard.java
diff --git a/case-study/jdt-before/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameFieldWizard.java b/case-study/jdt-before/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameFieldWizard.java
new file mode 100644 (file)
index 0000000..360ea1f
--- /dev/null
@@ -0,0 +1,234 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.refactoring.reorg;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.jface.dialogs.Dialog;
+
+import org.eclipse.ltk.core.refactoring.Refactoring;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.RenameRefactoring;
+
+import org.eclipse.jdt.core.IMethod;
+
+import org.eclipse.jdt.internal.corext.refactoring.rename.RenameFieldProcessor;
+import org.eclipse.jdt.internal.corext.util.Messages;
+
+import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.JavaPluginImages;
+import org.eclipse.jdt.internal.ui.refactoring.RefactoringMessages;
+import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
+
+public class RenameFieldWizard extends RenameRefactoringWizard {
+
+       public RenameFieldWizard(Refactoring refactoring) {
+               super(refactoring, RefactoringMessages.RenameFieldWizard_defaultPageTitle,
+                       RefactoringMessages.RenameFieldWizard_inputPage_description,
+                       JavaPluginImages.DESC_WIZBAN_REFACTOR_FIELD,
+                       IJavaHelpContextIds.RENAME_FIELD_WIZARD_PAGE);
+       }
+
+       @Override
+       protected RenameInputWizardPage createInputPage(String message, String initialSetting) {
+               return new RenameFieldInputWizardPage(message, IJavaHelpContextIds.RENAME_FIELD_WIZARD_PAGE, initialSetting) {
+                       @Override
+                       protected RefactoringStatus validateTextField(String text) {
+                               RefactoringStatus result= validateNewName(text);
+                               updateGetterSetterLabels();
+                               return result;
+                       }
+               };
+       }
+
+       private static class RenameFieldInputWizardPage extends RenameInputWizardPage {
+
+               private Button fRenameGetter;
+               private Button fRenameSetter;
+               private String fGetterRenamingErrorMessage;
+               private String fSetterRenamingErrorMessage;
+
+               public RenameFieldInputWizardPage(String message, String contextHelpId, String initialValue) {
+                       super(message, contextHelpId, true, initialValue);
+               }
+
+               @Override
+               public void createControl(Composite parent) {
+                       super.createControl(parent);
+                       Composite parentComposite= (Composite)getControl();
+
+                       Composite composite= new Composite(parentComposite, SWT.NONE);
+                       final GridLayout layout= new GridLayout();
+                       layout.marginHeight= 0;
+                       layout.marginWidth= 0;
+                       composite.setLayout(layout);
+                       composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+                       Label separator= new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL);
+                       separator.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+                       getGetterSetterRenamingEnablement();
+
+                       fRenameGetter= new Button(composite, SWT.CHECK);
+                       boolean getterEnablement= fGetterRenamingErrorMessage == null;
+                       fRenameGetter.setEnabled(getterEnablement);
+                       boolean getterSelection= getterEnablement && getBooleanSetting(RenameRefactoringWizard.FIELD_RENAME_GETTER, getRenameFieldProcessor().getRenameGetter());
+                       fRenameGetter.setSelection(getterSelection);
+                       getRenameFieldProcessor().setRenameGetter(getterSelection);
+                       fRenameGetter.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+                       fRenameGetter.addSelectionListener(new SelectionAdapter(){
+                               @Override
+                               public void widgetSelected(SelectionEvent e) {
+                                       getRenameFieldProcessor().setRenameGetter(fRenameGetter.getSelection());
+                                       updateLeaveDelegateCheckbox(getRenameFieldProcessor().getDelegateCount());
+                               }
+                       });
+
+                       fRenameSetter= new Button(composite, SWT.CHECK);
+                       boolean setterEnablement= fSetterRenamingErrorMessage == null;
+                       fRenameSetter.setEnabled(setterEnablement);
+                       boolean setterSelection= setterEnablement && getBooleanSetting(RenameRefactoringWizard.FIELD_RENAME_SETTER, getRenameFieldProcessor().getRenameSetter());
+                       fRenameSetter.setSelection(setterSelection);
+                       getRenameFieldProcessor().setRenameSetter(setterSelection);
+                       fRenameSetter.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+                       fRenameSetter.addSelectionListener(new SelectionAdapter(){
+                               @Override
+                               public void widgetSelected(SelectionEvent e) {
+                                       getRenameFieldProcessor().setRenameSetter(fRenameSetter.getSelection());
+                                       updateLeaveDelegateCheckbox(getRenameFieldProcessor().getDelegateCount());
+                               }
+                       });
+
+                       updateGetterSetterLabels();
+                       updateLeaveDelegateCheckbox(getRenameFieldProcessor().getDelegateCount());
+                       Dialog.applyDialogFont(composite);
+               }
+
+               @Override
+               public void dispose() {
+                       if (saveSettings()) {
+                               if (fRenameGetter.isEnabled())
+                                       saveBooleanSetting(RenameRefactoringWizard.FIELD_RENAME_GETTER, fRenameGetter);
+                               if (fRenameSetter.isEnabled())
+                                       saveBooleanSetting(RenameRefactoringWizard.FIELD_RENAME_SETTER, fRenameSetter);
+                       }
+                       super.dispose();
+               }
+
+               private void getGetterSetterRenamingEnablement() {
+                       BusyIndicator.showWhile(getShell().getDisplay(), new Runnable(){
+                               public void run() {
+                                       checkGetterRenamingEnablement();
+                                       checkSetterRenamingEnablement();
+                               }
+                       });
+               }
+
+               protected void updateGetterSetterLabels(){
+                       fRenameGetter.setText(getRenameGetterLabel());
+                       fRenameSetter.setText(getRenameSetterLabel());
+               }
+
+               private String getRenameGetterLabel(){
+                       String defaultLabel= RefactoringMessages.RenameFieldInputWizardPage_rename_getter;
+                       if (fGetterRenamingErrorMessage != null)
+                               return constructDisabledGetterRenamingLabel(defaultLabel);
+                       try {
+                               IMethod getter= getRenameFieldProcessor().getGetter();
+                               if (getter == null || ! getter.exists())
+                                       return defaultLabel;
+                               String oldGetterName= BasicElementLabels.getJavaElementName(getter.getElementName());
+                               String newGetterName= BasicElementLabels.getJavaElementName(createNewGetterName());
+                               return Messages.format(RefactoringMessages.RenameFieldInputWizardPage_rename_getter_to, new String[]{oldGetterName, newGetterName});
+                       } catch(CoreException e) {
+                               JavaPlugin.log(e)       ;
+                               return defaultLabel;
+                       }
+               }
+
+               private String getRenameSetterLabel(){
+                       String defaultLabel= RefactoringMessages.RenameFieldInputWizardPage_rename_setter;
+                       if (fSetterRenamingErrorMessage != null)
+                               return constructDisabledSetterRenamingLabel(defaultLabel);
+                       try {
+                               IMethod setter= getRenameFieldProcessor().getSetter();
+                               if (setter == null || ! setter.exists())
+                                       return defaultLabel;
+                               String oldSetterName= BasicElementLabels.getJavaElementName(setter.getElementName());
+                               String newSetterName= BasicElementLabels.getJavaElementName(createNewSetterName());
+                               return Messages.format(RefactoringMessages.RenameFieldInputWizardPage_rename_setter_to, new String[]{oldSetterName, newSetterName});
+                       } catch(CoreException e) {
+                               JavaPlugin.log(e);
+                               return defaultLabel;
+                       }
+               }
+               private String constructDisabledSetterRenamingLabel(String defaultLabel) {
+                       if (fSetterRenamingErrorMessage.equals("")) //$NON-NLS-1$
+                               return defaultLabel;
+                       String[] keys= {defaultLabel, fSetterRenamingErrorMessage};
+                       return Messages.format(RefactoringMessages.RenameFieldInputWizardPage_setter_label, keys);
+               }
+
+               private String constructDisabledGetterRenamingLabel(String defaultLabel) {
+                       if (fGetterRenamingErrorMessage.equals("")) //$NON-NLS-1$
+                               return defaultLabel;
+                       String[] keys= {defaultLabel, fGetterRenamingErrorMessage};
+                       return Messages.format(RefactoringMessages.RenameFieldInputWizardPage_getter_label, keys);
+               }
+
+               private String createNewGetterName() throws CoreException {
+                       return getRenameFieldProcessor().getNewGetterName();
+               }
+
+               private String createNewSetterName() throws CoreException {
+                       return getRenameFieldProcessor().getNewSetterName();
+               }
+
+               private String checkGetterRenamingEnablement() {
+                       if (fGetterRenamingErrorMessage != null)
+                               return  fGetterRenamingErrorMessage;
+                       try {
+                               fGetterRenamingErrorMessage= getRenameFieldProcessor().canEnableGetterRenaming();
+                               return fGetterRenamingErrorMessage;
+                       } catch (CoreException e) {
+                               JavaPlugin.log(e);
+                               return ""; //$NON-NLS-1$
+                       }
+               }
+
+               private String checkSetterRenamingEnablement() {
+                       if (fSetterRenamingErrorMessage != null)
+                               return  fSetterRenamingErrorMessage;
+                       try {
+                               fSetterRenamingErrorMessage= getRenameFieldProcessor().canEnableSetterRenaming();
+                               return fSetterRenamingErrorMessage;
+                       } catch (CoreException e) {
+                               JavaPlugin.log(e);
+                               return ""; //$NON-NLS-1$
+                       }
+               }
+
+               private RenameFieldProcessor getRenameFieldProcessor() {
+                       return (RenameFieldProcessor)((RenameRefactoring)getRefactoring()).getProcessor();
+               }
+       }
+}