summaryrefslogtreecommitdiff
path: root/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/ConfigurationManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/ConfigurationManager.java')
-rw-r--r--platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/ConfigurationManager.java179
1 files changed, 179 insertions, 0 deletions
diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/ConfigurationManager.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/ConfigurationManager.java
new file mode 100644
index 000000000000..151e78d6863f
--- /dev/null
+++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/ConfigurationManager.java
@@ -0,0 +1,179 @@
+package com.intellij.structuralsearch.plugin.ui;
+
+import com.intellij.icons.AllIcons;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.ui.Messages;
+import com.intellij.openapi.ui.NonEmptyInputValidator;
+import com.intellij.structuralsearch.SSRBundle;
+import com.intellij.structuralsearch.plugin.replace.ui.ReplaceConfiguration;
+import org.jdom.Element;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.*;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: maxim
+ * Date: 10.02.2004
+ * Time: 14:29:45
+ * To change this template use File | Settings | File Templates.
+ */
+public class ConfigurationManager {
+ @NonNls static final String SEARCH_TAG_NAME = "searchConfiguration";
+ @NonNls static final String REPLACE_TAG_NAME = "replaceConfiguration";
+ @NonNls private static final String SAVE_HISTORY_ATTR_NAME = "history";
+
+ private List<Configuration> configurations;
+ private LinkedList<Configuration> historyConfigurations;
+
+ public void addHistoryConfigurationToFront(Configuration configuration) {
+ if (historyConfigurations == null) historyConfigurations = new LinkedList<Configuration>();
+
+ if (historyConfigurations.indexOf(configuration) == -1) {
+ historyConfigurations.addFirst(configuration);
+ }
+ }
+
+ public void removeHistoryConfiguration(Configuration configuration) {
+ if (historyConfigurations != null) {
+ historyConfigurations.remove(configuration);
+ }
+ }
+
+ public void addConfiguration(Configuration configuration) {
+ if (configurations == null) configurations = new ArrayList<Configuration>();
+
+ if (configurations.indexOf(configuration) == -1) {
+ configurations.add(configuration);
+ }
+ }
+
+ public void removeConfiguration(Configuration configuration) {
+ if (configurations != null) {
+ configurations.remove(configuration);
+ }
+ }
+
+ public void saveConfigurations(Element element) {
+ writeConfigurations(element, configurations, historyConfigurations);
+ }
+
+ public static void writeConfigurations(final Element element,
+ final Collection<Configuration> configurations,
+ final Collection<Configuration> historyConfigurations) {
+ if (configurations != null) {
+ for (final Configuration configuration : configurations) {
+ saveConfiguration(element, configuration);
+ }
+ }
+
+ if (historyConfigurations != null) {
+ for (final Configuration historyConfiguration : historyConfigurations) {
+ final Element infoElement = saveConfiguration(element, historyConfiguration);
+ infoElement.setAttribute(SAVE_HISTORY_ATTR_NAME, "1");
+ }
+ }
+ }
+
+ public static Element saveConfiguration(Element element, final Configuration config) {
+ Element infoElement = new Element(config instanceof SearchConfiguration ? SEARCH_TAG_NAME : REPLACE_TAG_NAME);
+ element.addContent(infoElement);
+ config.writeExternal(infoElement);
+
+ return infoElement;
+ }
+
+ public void loadConfigurations(Element element) {
+ if (configurations != null) return;
+ ArrayList<Configuration> configurations = new ArrayList<Configuration>();
+ ArrayList<Configuration> historyConfigurations = new ArrayList<Configuration>();
+ readConfigurations(element, configurations, historyConfigurations);
+ for (Configuration configuration : historyConfigurations) {
+ addHistoryConfigurationToFront(configuration);
+ }
+ for (Configuration configuration : configurations) {
+ addConfiguration(configuration);
+ }
+ if (this.historyConfigurations != null) {
+ Collections.reverse(this.historyConfigurations);
+ }
+ }
+
+ public static void readConfigurations(final Element element, @NotNull Collection<Configuration> configurations, @NotNull Collection<Configuration> historyConfigurations) {
+ final List<Element> patterns = element.getChildren();
+
+ if (patterns != null && patterns.size() > 0) {
+ for (final Element pattern : patterns) {
+ final Configuration config = readConfiguration(pattern);
+ if (config == null) continue;
+
+ if (pattern.getAttribute(SAVE_HISTORY_ATTR_NAME) != null) {
+ historyConfigurations.add(config);
+ }
+ else {
+ configurations.add(config);
+ }
+ }
+ }
+ }
+
+ public static Configuration readConfiguration(final Element childElement) {
+ String s = childElement.getName();
+ final Configuration config =
+ s.equals(SEARCH_TAG_NAME) ? new SearchConfiguration() : s.equals(REPLACE_TAG_NAME) ? new ReplaceConfiguration():null;
+ if (config != null) config.readExternal(childElement);
+ return config;
+ }
+
+ public Collection<Configuration> getConfigurations() {
+ return configurations;
+ }
+
+ public static Configuration findConfigurationByName(final Collection<Configuration> configurations, final String name) {
+ for(Configuration config:configurations) {
+ if (config.getName().equals(name)) return config;
+ }
+
+ return null;
+ }
+
+ public Collection<Configuration> getHistoryConfigurations() {
+ return historyConfigurations;
+ }
+
+ public static @Nullable String findAppropriateName(@NotNull final Collection<Configuration> configurations, @NotNull String _name,
+ @NotNull final Project project) {
+ Configuration config;
+ String name = _name;
+
+ while ((config = findConfigurationByName(configurations, name)) != null) {
+ int i = Messages.showYesNoDialog(
+ project,
+ SSRBundle.message("overwrite.message"),
+ SSRBundle.message("overwrite.title"),
+ AllIcons.General.QuestionDialog
+ );
+
+ if (i == Messages.YES) {
+ configurations.remove(config);
+ break;
+ }
+ name = showSaveTemplateAsDialog(name, project);
+ if (name == null) break;
+ }
+ return name;
+ }
+
+ public static @Nullable String showSaveTemplateAsDialog(@NotNull String initial, @NotNull Project project) {
+ return Messages.showInputDialog(
+ project,
+ SSRBundle.message("template.name.button"),
+ SSRBundle.message("save.template.description.button"),
+ AllIcons.General.QuestionDialog,
+ initial,
+ new NonEmptyInputValidator()
+ );
+ }
+}