summaryrefslogtreecommitdiff
path: root/plugins/properties/src/com/intellij/lang/properties/refactoring/rename/ResourceBundleRenameUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/properties/src/com/intellij/lang/properties/refactoring/rename/ResourceBundleRenameUtil.java')
-rw-r--r--plugins/properties/src/com/intellij/lang/properties/refactoring/rename/ResourceBundleRenameUtil.java152
1 files changed, 152 insertions, 0 deletions
diff --git a/plugins/properties/src/com/intellij/lang/properties/refactoring/rename/ResourceBundleRenameUtil.java b/plugins/properties/src/com/intellij/lang/properties/refactoring/rename/ResourceBundleRenameUtil.java
new file mode 100644
index 000000000000..79694f7ae35a
--- /dev/null
+++ b/plugins/properties/src/com/intellij/lang/properties/refactoring/rename/ResourceBundleRenameUtil.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright 2000-2014 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.intellij.lang.properties.refactoring.rename;
+
+import com.intellij.codeInsight.FileModificationService;
+import com.intellij.lang.properties.PropertiesBundle;
+import com.intellij.lang.properties.ResourceBundle;
+import com.intellij.lang.properties.psi.PropertiesFile;
+import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.ui.InputValidator;
+import com.intellij.openapi.ui.Messages;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiNamedElement;
+import com.intellij.refactoring.rename.PsiElementRenameHandler;
+import com.intellij.refactoring.rename.RenameProcessor;
+import org.jetbrains.annotations.NotNull;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * @author Dmitry Batkovich
+ */
+public class ResourceBundleRenameUtil {
+ private final static Logger LOG = Logger.getInstance(ResourceBundleRenameUtil.class);
+
+ public static void renameResourceBundleKey(final @NotNull PsiElement psiElement, final @NotNull Project project) {
+ PsiElementRenameHandler.invoke(psiElement, project, psiElement.getContainingFile(), null);
+ }
+
+ public static void renameResourceBundleBaseName(final @NotNull ResourceBundle resourceBundle, final @NotNull Project project) {
+ Messages.showInputDialog(project, PropertiesBundle.message("rename.bundle.enter.new.resource.bundle.base.name.prompt.text"),
+ PropertiesBundle.message("rename.resource.bundle.dialog.title"), Messages.getQuestionIcon(),
+ resourceBundle.getBaseName(), new ResourceBundleBaseNameInputValidator(project, resourceBundle));
+ }
+
+ public static void renameResourceBundleKeySection(final List<PsiElement> psiElements, final String section, final int sectionPosition) {
+ if (psiElements.isEmpty()) {
+ return;
+ }
+ final Project project = psiElements.get(0).getProject();
+ Messages.showInputDialog(project, PropertiesBundle.message("rename.bundle.enter.new.resource.bundle.section.name.prompt.text"),
+ PropertiesBundle.message("rename.resource.bundle.section.dialog.title"), Messages.getQuestionIcon(), section,
+ new ResourceBundleKeySectionInputValidator(psiElements, section, sectionPosition, project));
+ }
+
+ private static class ResourceBundleKeySectionInputValidator implements InputValidator {
+
+ private final List<PsiElement> myPsiElements;
+ private final String mySection;
+ private final int mySectionPosition;
+ private final Project myProject;
+
+ private ResourceBundleKeySectionInputValidator(final List<PsiElement> psiElements,
+ final String section,
+ final int sectionPosition,
+ final Project project) {
+ myPsiElements = psiElements;
+ mySection = section;
+ mySectionPosition = sectionPosition;
+ myProject = project;
+ }
+
+ @Override
+ public boolean checkInput(final String inputString) {
+ return inputString.indexOf('.') < 0;
+ }
+
+ @Override
+ public boolean canClose(final String inputString) {
+ RenameProcessor renameProcessor = null;
+ for (final PsiElement psiElement : myPsiElements) {
+ assert psiElement instanceof PsiNamedElement;
+ final String oldName = ((PsiNamedElement)psiElement).getName();
+ assert oldName != null;
+ final String newName =
+ oldName.substring(0, mySectionPosition) + inputString + oldName.substring(mySectionPosition + mySection.length());
+ if (renameProcessor == null) {
+ renameProcessor = new RenameProcessor(myProject, psiElement, newName, false, false);
+ }
+ else {
+ renameProcessor.addElement(psiElement, newName);
+ }
+ }
+ assert renameProcessor != null;
+ renameProcessor.setCommandName(PropertiesBundle.message("rename.resource.bundle.section.dialog.title"));
+ renameProcessor.doRun();
+ return true;
+ }
+ }
+
+ private static class ResourceBundleBaseNameInputValidator implements InputValidator {
+ private final Project myProject;
+ private final ResourceBundle myResourceBundle;
+
+ public ResourceBundleBaseNameInputValidator(final Project project, final ResourceBundle resourceBundle) {
+ myProject = project;
+ myResourceBundle = resourceBundle;
+ }
+
+ public boolean checkInput(String inputString) {
+ return inputString.indexOf(File.separatorChar) < 0 && inputString.indexOf('/') < 0;
+ }
+
+ public boolean canClose(final String inputString) {
+ final List<PropertiesFile> propertiesFiles = myResourceBundle.getPropertiesFiles();
+ for (PropertiesFile propertiesFile : propertiesFiles) {
+ if (!FileModificationService.getInstance().prepareFileForWrite(propertiesFile.getContainingFile())) return false;
+ }
+
+ RenameProcessor renameProcessor = null;
+ final String baseName = myResourceBundle.getBaseName();
+ for (PropertiesFile propertiesFile : propertiesFiles) {
+ final VirtualFile virtualFile = propertiesFile.getVirtualFile();
+ if (virtualFile == null) {
+ continue;
+ }
+ final String newName =
+ inputString + virtualFile.getNameWithoutExtension().substring(baseName.length()) + "." + virtualFile.getExtension();
+ if (renameProcessor == null) {
+ renameProcessor = new RenameProcessor(myProject, propertiesFile.getContainingFile(), newName, false, false);
+ continue;
+ }
+ renameProcessor.addElement(propertiesFile.getContainingFile(), newName);
+ }
+ if (renameProcessor == null) {
+ LOG.assertTrue(false);
+ return true;
+ }
+
+ renameProcessor.setCommandName(PropertiesBundle.message("rename.resource.bundle.dialog.title"));
+ renameProcessor.doRun();
+
+ return true;
+ }
+ }
+}