diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/core/RenameResourceProcessor.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/core/RenameResourceProcessor.java | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/core/RenameResourceProcessor.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/core/RenameResourceProcessor.java new file mode 100644 index 000000000..5ea99411c --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/core/RenameResourceProcessor.java @@ -0,0 +1,211 @@ +/* + * 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 com.android.annotations.NonNull; +import com.android.annotations.Nullable; +import com.android.ide.eclipse.adt.AdtConstants; +import com.android.ide.eclipse.adt.internal.resources.ResourceNameValidator; +import com.android.resources.ResourceType; + +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.ltk.core.refactoring.Change; +import org.eclipse.ltk.core.refactoring.RefactoringStatus; +import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext; +import org.eclipse.ltk.core.refactoring.participants.ParticipantManager; +import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant; +import org.eclipse.ltk.core.refactoring.participants.RenameArguments; +import org.eclipse.ltk.core.refactoring.participants.RenameProcessor; +import org.eclipse.ltk.core.refactoring.participants.SharableParticipants; + +/** + * A rename processor for Android resources. + */ +public class RenameResourceProcessor extends RenameProcessor { + private IProject mProject; + private ResourceType mType; + private String mCurrentName; + private String mNewName; + private boolean mUpdateReferences = true; + private ResourceNameValidator mValidator; + private RenameArguments mRenameArguments; + + /** + * Creates a new rename resource processor. + * + * @param project the project containing the renamed resource + * @param type the type of the resource + * @param currentName the current name of the resource + * @param newName the new name of the resource, or null if not known + */ + public RenameResourceProcessor( + @NonNull IProject project, + @NonNull ResourceType type, + @NonNull String currentName, + @Nullable String newName) { + mProject = project; + mType = type; + mCurrentName = currentName; + mNewName = newName != null ? newName : currentName; + mUpdateReferences= true; + mValidator = ResourceNameValidator.create(false, mProject, mType); + } + + /** + * Returns the project containing the renamed resource + * + * @return the project containing the renamed resource + */ + @NonNull + public IProject getProject() { + return mProject; + } + + /** + * Returns the new resource name + * + * @return the new resource name + */ + @NonNull + public String getNewName() { + return mNewName; + } + + /** + * Returns the current name of the resource + * + * @return the current name of the resource + */ + public String getCurrentName() { + return mCurrentName; + } + + /** + * Returns the type of the resource + * + * @return the type of the resource + */ + @NonNull + public ResourceType getType() { + return mType; + } + + /** + * Sets the new name + * + * @param newName the new name + */ + public void setNewName(@NonNull String newName) { + mNewName = newName; + } + + /** + * Returns {@code true} if the refactoring processor also updates references + * + * @return {@code true} if the refactoring processor also updates references + */ + public boolean isUpdateReferences() { + return mUpdateReferences; + } + + /** + * Specifies if the refactoring processor also updates references. The + * default behavior is to update references. + * + * @param updateReferences {@code true} if the refactoring processor should + * also updates references + */ + public void setUpdateReferences(boolean updateReferences) { + mUpdateReferences = updateReferences; + } + + /** + * Checks the given new potential name and returns a {@link RefactoringStatus} indicating + * whether the potential new name is valid + * + * @param name the name to check + * @return a {@link RefactoringStatus} with the validation result + */ + public RefactoringStatus checkNewName(String name) { + String error = mValidator.isValid(name); + if (error != null) { + return RefactoringStatus.createFatalErrorStatus(error); + } + + return new RefactoringStatus(); + } + + @Override + public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException { + return new RefactoringStatus(); + } + + @Override + public RefactoringStatus checkFinalConditions(IProgressMonitor pm, + CheckConditionsContext context) throws CoreException { + pm.beginTask("", 1); + try { + mRenameArguments = new RenameArguments(getNewName(), isUpdateReferences()); + return new RefactoringStatus(); + } finally { + pm.done(); + } + } + + @Override + public Change createChange(IProgressMonitor pm) throws CoreException { + pm.beginTask("", 1); + try { + // Added by {@link RenameResourceParticipant} + return null; + } finally { + pm.done(); + } + } + + @Override + public Object[] getElements() { + return new Object[0]; + } + + @Override + public String getIdentifier() { + return "com.android.ide.renameResourceProcessor"; //$NON-NLS-1$ + } + + @Override + public String getProcessorName() { + return "Rename Android Resource"; + } + + @Override + public boolean isApplicable() { + return true; + } + + @Override + public RefactoringParticipant[] loadParticipants(RefactoringStatus status, + SharableParticipants shared) throws CoreException { + String[] affectedNatures = new String[] { AdtConstants.NATURE_DEFAULT }; + String url = PREFIX_RESOURCE_REF + mType.getName() + '/' + mCurrentName; + return ParticipantManager.loadRenameParticipants(status, this, url, mRenameArguments, + null, affectedNatures, shared); + } +}
\ No newline at end of file |