| /* |
| * 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); |
| } |
| } |