001: /*******************************************************************************
002: * Copyright (c) 2000, 2006 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.jdt.internal.ui.refactoring.reorg;
011:
012: import org.eclipse.core.runtime.CoreException;
013:
014: import org.eclipse.jdt.core.IMethod;
015:
016: import org.eclipse.swt.SWT;
017: import org.eclipse.swt.custom.BusyIndicator;
018: import org.eclipse.swt.events.SelectionAdapter;
019: import org.eclipse.swt.events.SelectionEvent;
020: import org.eclipse.swt.layout.GridData;
021: import org.eclipse.swt.layout.GridLayout;
022: import org.eclipse.swt.widgets.Button;
023: import org.eclipse.swt.widgets.Composite;
024: import org.eclipse.swt.widgets.Label;
025:
026: import org.eclipse.jface.dialogs.Dialog;
027:
028: import org.eclipse.jdt.internal.corext.refactoring.rename.RenameFieldProcessor;
029: import org.eclipse.jdt.internal.corext.util.Messages;
030:
031: import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
032: import org.eclipse.jdt.internal.ui.JavaPlugin;
033: import org.eclipse.jdt.internal.ui.JavaPluginImages;
034: import org.eclipse.jdt.internal.ui.refactoring.RefactoringMessages;
035:
036: import org.eclipse.ltk.core.refactoring.Refactoring;
037: import org.eclipse.ltk.core.refactoring.RefactoringStatus;
038: import org.eclipse.ltk.core.refactoring.participants.RenameRefactoring;
039:
040: public class RenameFieldWizard extends RenameRefactoringWizard {
041:
042: public RenameFieldWizard(Refactoring refactoring) {
043: super (
044: refactoring,
045: RefactoringMessages.RenameFieldWizard_defaultPageTitle,
046: RefactoringMessages.RenameFieldWizard_inputPage_description,
047: JavaPluginImages.DESC_WIZBAN_REFACTOR_FIELD,
048: IJavaHelpContextIds.RENAME_FIELD_WIZARD_PAGE);
049: }
050:
051: protected RenameInputWizardPage createInputPage(String message,
052: String initialSetting) {
053: return new RenameFieldInputWizardPage(message,
054: IJavaHelpContextIds.RENAME_FIELD_WIZARD_PAGE,
055: initialSetting) {
056: protected RefactoringStatus validateTextField(String text) {
057: RefactoringStatus result = validateNewName(text);
058: updateGetterSetterLabels();
059: return result;
060: }
061: };
062: }
063:
064: private static class RenameFieldInputWizardPage extends
065: RenameInputWizardPage {
066:
067: private Button fRenameGetter;
068: private Button fRenameSetter;
069: private String fGetterRenamingErrorMessage;
070: private String fSetterRenamingErrorMessage;
071:
072: public RenameFieldInputWizardPage(String message,
073: String contextHelpId, String initialValue) {
074: super (message, contextHelpId, true, initialValue);
075: }
076:
077: public void createControl(Composite parent) {
078: super .createControl(parent);
079: Composite parentComposite = (Composite) getControl();
080:
081: Composite composite = new Composite(parentComposite,
082: SWT.NONE);
083: final GridLayout layout = new GridLayout();
084: layout.marginHeight = 0;
085: layout.marginWidth = 0;
086: composite.setLayout(layout);
087: composite.setLayoutData(new GridData(GridData.FILL_BOTH));
088:
089: Label separator = new Label(composite, SWT.SEPARATOR
090: | SWT.HORIZONTAL);
091: separator.setLayoutData(new GridData(
092: GridData.FILL_HORIZONTAL));
093:
094: getGetterSetterRenamingEnablement();
095:
096: fRenameGetter = new Button(composite, SWT.CHECK);
097: boolean getterEnablement = fGetterRenamingErrorMessage == null;
098: fRenameGetter.setEnabled(getterEnablement);
099: boolean getterSelection = getterEnablement
100: && getBooleanSetting(
101: RenameRefactoringWizard.FIELD_RENAME_GETTER,
102: getRenameFieldProcessor().getRenameGetter());
103: fRenameGetter.setSelection(getterSelection);
104: getRenameFieldProcessor().setRenameGetter(getterSelection);
105: fRenameGetter.setLayoutData(new GridData(
106: GridData.FILL_HORIZONTAL));
107: fRenameGetter.addSelectionListener(new SelectionAdapter() {
108: public void widgetSelected(SelectionEvent e) {
109: getRenameFieldProcessor().setRenameGetter(
110: fRenameGetter.getSelection());
111: updateLeaveDelegateCheckbox(getRenameFieldProcessor()
112: .getDelegateCount());
113: }
114: });
115:
116: fRenameSetter = new Button(composite, SWT.CHECK);
117: boolean setterEnablement = fSetterRenamingErrorMessage == null;
118: fRenameSetter.setEnabled(setterEnablement);
119: boolean setterSelection = setterEnablement
120: && getBooleanSetting(
121: RenameRefactoringWizard.FIELD_RENAME_SETTER,
122: getRenameFieldProcessor().getRenameSetter());
123: fRenameSetter.setSelection(setterSelection);
124: getRenameFieldProcessor().setRenameSetter(setterSelection);
125: fRenameSetter.setLayoutData(new GridData(
126: GridData.FILL_HORIZONTAL));
127: fRenameSetter.addSelectionListener(new SelectionAdapter() {
128: public void widgetSelected(SelectionEvent e) {
129: getRenameFieldProcessor().setRenameSetter(
130: fRenameSetter.getSelection());
131: updateLeaveDelegateCheckbox(getRenameFieldProcessor()
132: .getDelegateCount());
133: }
134: });
135:
136: updateGetterSetterLabels();
137: updateLeaveDelegateCheckbox(getRenameFieldProcessor()
138: .getDelegateCount());
139: Dialog.applyDialogFont(composite);
140: }
141:
142: public void dispose() {
143: if (saveSettings()) {
144: if (fRenameGetter.isEnabled())
145: saveBooleanSetting(
146: RenameRefactoringWizard.FIELD_RENAME_GETTER,
147: fRenameGetter);
148: if (fRenameSetter.isEnabled())
149: saveBooleanSetting(
150: RenameRefactoringWizard.FIELD_RENAME_SETTER,
151: fRenameSetter);
152: }
153: super .dispose();
154: }
155:
156: private void getGetterSetterRenamingEnablement() {
157: BusyIndicator.showWhile(getShell().getDisplay(),
158: new Runnable() {
159: public void run() {
160: checkGetterRenamingEnablement();
161: checkSetterRenamingEnablement();
162: }
163: });
164: }
165:
166: protected void updateGetterSetterLabels() {
167: fRenameGetter.setText(getRenameGetterLabel());
168: fRenameSetter.setText(getRenameSetterLabel());
169: }
170:
171: private String getRenameGetterLabel() {
172: String defaultLabel = RefactoringMessages.RenameFieldInputWizardPage_rename_getter;
173: if (fGetterRenamingErrorMessage != null)
174: return constructDisabledGetterRenamingLabel(defaultLabel);
175: try {
176: IMethod getter = getRenameFieldProcessor().getGetter();
177: if (getter == null || !getter.exists())
178: return defaultLabel;
179: String oldGetterName = getter.getElementName();
180: String newGetterName = createNewGetterName();
181: return Messages
182: .format(
183: RefactoringMessages.RenameFieldInputWizardPage_rename_getter_to,
184: new String[] { oldGetterName,
185: newGetterName });
186: } catch (CoreException e) {
187: JavaPlugin.log(e);
188: return defaultLabel;
189: }
190: }
191:
192: private String getRenameSetterLabel() {
193: String defaultLabel = RefactoringMessages.RenameFieldInputWizardPage_rename_setter;
194: if (fSetterRenamingErrorMessage != null)
195: return constructDisabledSetterRenamingLabel(defaultLabel);
196: try {
197: IMethod setter = getRenameFieldProcessor().getSetter();
198: if (setter == null || !setter.exists())
199: return defaultLabel;
200: String oldSetterName = setter.getElementName();
201: String newSetterName = createNewSetterName();
202: return Messages
203: .format(
204: RefactoringMessages.RenameFieldInputWizardPage_rename_setter_to,
205: new String[] { oldSetterName,
206: newSetterName });
207: } catch (CoreException e) {
208: JavaPlugin.log(e);
209: return defaultLabel;
210: }
211: }
212:
213: private String constructDisabledSetterRenamingLabel(
214: String defaultLabel) {
215: if (fSetterRenamingErrorMessage.equals("")) //$NON-NLS-1$
216: return defaultLabel;
217: String[] keys = { defaultLabel, fSetterRenamingErrorMessage };
218: return Messages
219: .format(
220: RefactoringMessages.RenameFieldInputWizardPage_setter_label,
221: keys);
222: }
223:
224: private String constructDisabledGetterRenamingLabel(
225: String defaultLabel) {
226: if (fGetterRenamingErrorMessage.equals("")) //$NON-NLS-1$
227: return defaultLabel;
228: String[] keys = { defaultLabel, fGetterRenamingErrorMessage };
229: return Messages
230: .format(
231: RefactoringMessages.RenameFieldInputWizardPage_getter_label,
232: keys);
233: }
234:
235: private String createNewGetterName() throws CoreException {
236: return getRenameFieldProcessor().getNewGetterName();
237: }
238:
239: private String createNewSetterName() throws CoreException {
240: return getRenameFieldProcessor().getNewSetterName();
241: }
242:
243: private String checkGetterRenamingEnablement() {
244: if (fGetterRenamingErrorMessage != null)
245: return fGetterRenamingErrorMessage;
246: try {
247: fGetterRenamingErrorMessage = getRenameFieldProcessor()
248: .canEnableGetterRenaming();
249: return fGetterRenamingErrorMessage;
250: } catch (CoreException e) {
251: JavaPlugin.log(e);
252: return ""; //$NON-NLS-1$
253: }
254: }
255:
256: private String checkSetterRenamingEnablement() {
257: if (fSetterRenamingErrorMessage != null)
258: return fSetterRenamingErrorMessage;
259: try {
260: fSetterRenamingErrorMessage = getRenameFieldProcessor()
261: .canEnableSetterRenaming();
262: return fSetterRenamingErrorMessage;
263: } catch (CoreException e) {
264: JavaPlugin.log(e);
265: return ""; //$NON-NLS-1$
266: }
267: }
268:
269: private RenameFieldProcessor getRenameFieldProcessor() {
270: return (RenameFieldProcessor) ((RenameRefactoring) getRefactoring())
271: .getProcessor();
272: }
273: }
274: }
|