diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/core/RenameResourcePage.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/core/RenameResourcePage.java | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/core/RenameResourcePage.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/core/RenameResourcePage.java new file mode 100644 index 000000000..6779fd322 --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/core/RenameResourcePage.java @@ -0,0 +1,177 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php + * + * 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.android.ide.eclipse.adt.internal.refactorings.core; + +import static com.android.SdkConstants.PREFIX_RESOURCE_REF; +import static com.android.SdkConstants.R_CLASS; + +import com.android.ide.eclipse.adt.internal.resources.ResourceNameValidator; +import com.android.resources.ResourceType; + +import org.eclipse.jdt.internal.ui.refactoring.TextInputWizardPage; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.ltk.core.refactoring.RefactoringStatus; +import org.eclipse.ltk.core.refactoring.participants.RenameRefactoring; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +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.swt.widgets.Text; + +import java.util.Set; + +@SuppressWarnings("restriction") // JDT refactoring UI +class RenameResourcePage extends TextInputWizardPage implements SelectionListener { + private Label mXmlLabel; + private Label mJavaLabel; + private Button mUpdateReferences; + private boolean mCanClear; + private ResourceType mType; + private ResourceNameValidator mValidator; + + /** + * Create the wizard. + * @param type the type of the resource to be renamed + * @param initial initial renamed value + * @param canClear whether the dialog should allow clearing the field + */ + public RenameResourcePage(ResourceType type, String initial, boolean canClear) { + super(type.getName(), true, initial); + mType = type; + mCanClear = canClear; + + mValidator = ResourceNameValidator.create(false /*allowXmlExtension*/, + (Set<String>) null, mType); + } + + @SuppressWarnings("unused") // SWT constructors aren't really unused, they have side effects + @Override + public void createControl(Composite parent) { + Composite container = new Composite(parent, SWT.NULL); + setControl(container); + initializeDialogUnits(container); + container.setLayout(new GridLayout(2, false)); + Label nameLabel = new Label(container, SWT.NONE); + nameLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); + nameLabel.setText("New Name:"); + Text text = super.createTextInputField(container); + text.selectAll(); + text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); + Label xmlLabel = new Label(container, SWT.NONE); + xmlLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); + xmlLabel.setText("XML:"); + mXmlLabel = new Label(container, SWT.NONE); + mXmlLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); + Label javaLabel = new Label(container, SWT.NONE); + javaLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); + javaLabel.setText("Java:"); + mJavaLabel = new Label(container, SWT.NONE); + mJavaLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); + new Label(container, SWT.NONE); + new Label(container, SWT.NONE); + mUpdateReferences = new Button(container, SWT.CHECK); + mUpdateReferences.setSelection(true); + mUpdateReferences.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); + mUpdateReferences.setText("Update References"); + mUpdateReferences.addSelectionListener(this); + + Dialog.applyDialogFont(container); + } + + @Override + public void setVisible(boolean visible) { + if (visible) { + RenameResourceProcessor processor = getProcessor(); + String newName = processor.getNewName(); + if (newName != null && newName.length() > 0 + && !newName.equals(getInitialValue())) { + Text textField = getTextField(); + textField.setText(newName); + textField.setSelection(0, newName.length()); + } + } + + super.setVisible(visible); + } + + @Override + protected RefactoringStatus validateTextField(String newName) { + if (newName.isEmpty() && isEmptyInputValid()) { + getProcessor().setNewName(""); + return RefactoringStatus.createWarningStatus( + "The resource definition will be deleted"); + } + + String error = mValidator.isValid(newName); + if (error != null) { + return RefactoringStatus.createErrorStatus(error); + } + + RenameResourceProcessor processor = getProcessor(); + processor.setNewName(newName); + return processor.checkNewName(newName); + } + + private RenameResourceProcessor getProcessor() { + RenameRefactoring refactoring = (RenameRefactoring) getRefactoring(); + return (RenameResourceProcessor) refactoring.getProcessor(); + } + + @Override + protected boolean isEmptyInputValid() { + return mCanClear; + } + + @Override + protected boolean isInitialInputValid() { + RenameResourceProcessor processor = getProcessor(); + return processor.getNewName() != null + && !processor.getNewName().equals(processor.getCurrentName()); + } + + @Override + protected void textModified(String text) { + super.textModified(text); + if (mXmlLabel != null && mJavaLabel != null) { + String xml = PREFIX_RESOURCE_REF + mType.getName() + '/' + text; + String java = R_CLASS + '.' + mType.getName() + '.' + text; + if (text.isEmpty()) { + xml = java = ""; + } + mXmlLabel.setText(xml); + mJavaLabel.setText(java); + } + } + + // ---- Implements SelectionListener ---- + + @Override + public void widgetSelected(SelectionEvent e) { + if (e.getSource() == mUpdateReferences) { + RenameResourceProcessor processor = getProcessor(); + boolean update = mUpdateReferences.getSelection(); + processor.setUpdateReferences(update); + } + } + + @Override + public void widgetDefaultSelected(SelectionEvent e) { + } +} |