summaryrefslogtreecommitdiff
path: root/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ReplaceOptions.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ReplaceOptions.java')
-rw-r--r--platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ReplaceOptions.java185
1 files changed, 185 insertions, 0 deletions
diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ReplaceOptions.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ReplaceOptions.java
new file mode 100644
index 000000000000..31642aa80e22
--- /dev/null
+++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ReplaceOptions.java
@@ -0,0 +1,185 @@
+package com.intellij.structuralsearch.plugin.replace;
+
+import com.intellij.openapi.util.JDOMExternalizable;
+import com.intellij.structuralsearch.MatchOptions;
+import com.intellij.structuralsearch.ReplacementVariableDefinition;
+import org.jdom.Attribute;
+import org.jdom.DataConversionException;
+import org.jdom.Element;
+import org.jetbrains.annotations.NonNls;
+
+import java.util.*;
+
+/**
+ * @author Maxim.Mossienko
+ * Date: Mar 5, 2004
+ * Time: 7:51:38 PM
+ */
+public class ReplaceOptions implements JDOMExternalizable, Cloneable {
+ private Map<String, ReplacementVariableDefinition> variableDefs;
+ private String replacement = "";
+ private boolean toShortenFQN;
+ private boolean myToReformatAccordingToStyle;
+ private boolean myToUseStaticImport = false;
+ private MatchOptions matchOptions = new MatchOptions();
+
+ @NonNls private static final String REFORMAT_ATTR_NAME = "reformatAccordingToStyle";
+ @NonNls private static final String REPLACEMENT_ATTR_NAME = "replacement";
+ @NonNls private static final String SHORTEN_FQN_ATTR_NAME = "shortenFQN";
+ @NonNls private static final String USE_STATIC_IMPORT_ATTR_NAME = "useStaticImport";
+
+ @NonNls private static final String VARIABLE_DEFINITION_TAG_NAME = "variableDefinition";
+
+ public String getReplacement() {
+ return replacement;
+ }
+
+ public void setReplacement(String replacement) {
+ this.replacement = replacement;
+ }
+
+ public boolean isToShortenFQN() {
+ return toShortenFQN;
+ }
+
+ public void setToShortenFQN(boolean shortedFQN) {
+ this.toShortenFQN = shortedFQN;
+ }
+
+ public boolean isToReformatAccordingToStyle() {
+ return myToReformatAccordingToStyle;
+ }
+
+ public MatchOptions getMatchOptions() {
+ return matchOptions;
+ }
+
+ public void setMatchOptions(MatchOptions matchOptions) {
+ this.matchOptions = matchOptions;
+ }
+
+ public void setToReformatAccordingToStyle(boolean reformatAccordingToStyle) {
+ myToReformatAccordingToStyle = reformatAccordingToStyle;
+ }
+
+ public boolean isToUseStaticImport() {
+ return myToUseStaticImport;
+ }
+
+ public void setToUseStaticImport(boolean useStaticImport) {
+ myToUseStaticImport = useStaticImport;
+ }
+
+ public void readExternal(Element element) {
+ matchOptions.readExternal(element);
+
+ Attribute attribute = element.getAttribute(REFORMAT_ATTR_NAME);
+ try {
+ myToReformatAccordingToStyle = attribute.getBooleanValue();
+ } catch(DataConversionException ex) {
+ }
+
+ attribute = element.getAttribute(SHORTEN_FQN_ATTR_NAME);
+ try {
+ toShortenFQN = attribute.getBooleanValue();
+ } catch(DataConversionException ex) {}
+
+ attribute = element.getAttribute(USE_STATIC_IMPORT_ATTR_NAME);
+ if (attribute != null) { // old saved configurations without this attribute present
+ try {
+ myToUseStaticImport = attribute.getBooleanValue();
+ }
+ catch (DataConversionException ignore) {}
+ }
+
+ replacement = element.getAttributeValue(REPLACEMENT_ATTR_NAME);
+
+ List<Element> elements = element.getChildren(VARIABLE_DEFINITION_TAG_NAME);
+
+ if (elements!=null && elements.size() > 0) {
+ for (final Element element1 : elements) {
+ final ReplacementVariableDefinition variableDefinition = new ReplacementVariableDefinition();
+ variableDefinition.readExternal(element1);
+ addVariableDefinition(variableDefinition);
+ }
+ }
+ }
+
+ public void writeExternal(Element element) {
+ matchOptions.writeExternal(element);
+
+ element.setAttribute(REFORMAT_ATTR_NAME,String.valueOf(myToReformatAccordingToStyle));
+ element.setAttribute(SHORTEN_FQN_ATTR_NAME,String.valueOf(toShortenFQN));
+ if (isToUseStaticImport()) {
+ element.setAttribute(USE_STATIC_IMPORT_ATTR_NAME, String.valueOf(isToUseStaticImport()));
+ }
+ element.setAttribute(REPLACEMENT_ATTR_NAME,replacement);
+
+ if (variableDefs!=null) {
+ for (final ReplacementVariableDefinition variableDefinition : variableDefs.values()) {
+ final Element infoElement = new Element(VARIABLE_DEFINITION_TAG_NAME);
+ element.addContent(infoElement);
+ variableDefinition.writeExternal(infoElement);
+ }
+ }
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof ReplaceOptions)) return false;
+
+ final ReplaceOptions replaceOptions = (ReplaceOptions)o;
+
+ if (myToReformatAccordingToStyle != replaceOptions.myToReformatAccordingToStyle) return false;
+ if (toShortenFQN != replaceOptions.toShortenFQN) return false;
+ if (myToUseStaticImport != replaceOptions.myToUseStaticImport) return false;
+ if (matchOptions != null ? !matchOptions.equals(replaceOptions.matchOptions) : replaceOptions.matchOptions != null) return false;
+ if (replacement != null ? !replacement.equals(replaceOptions.replacement) : replaceOptions.replacement != null) return false;
+ if (variableDefs != null ? !variableDefs.equals(replaceOptions.variableDefs) : replaceOptions.variableDefs != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = (replacement != null ? replacement.hashCode() : 0);
+ result = 29 * result + (toShortenFQN ? 1 : 0);
+ result = 29 * result + (myToReformatAccordingToStyle ? 1 : 0);
+ result = 29 * result + (myToUseStaticImport ? 1 : 0);
+ result = 29 * result + (matchOptions != null ? matchOptions.hashCode() : 0);
+ result = 29 * result + (variableDefs != null ? variableDefs.hashCode() : 0);
+ return result;
+ }
+
+ public ReplaceOptions clone() {
+ try {
+ ReplaceOptions replaceOptions = (ReplaceOptions) super.clone();
+ replaceOptions.matchOptions = matchOptions.clone();
+ return replaceOptions;
+ } catch (CloneNotSupportedException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ public ReplacementVariableDefinition getVariableDefinition(String name) {
+ return variableDefs != null ? variableDefs.get(name): null;
+ }
+
+ public void addVariableDefinition(ReplacementVariableDefinition definition) {
+ if (variableDefs==null) {
+ variableDefs = new LinkedHashMap<String, ReplacementVariableDefinition>();
+ }
+ variableDefs.put( definition.getName(), definition );
+ }
+
+ public Collection<ReplacementVariableDefinition> getReplacementVariableDefinitions() {
+ return variableDefs != null ? variableDefs.values() : Collections.<ReplacementVariableDefinition>emptyList();
+ }
+
+ public void clearVariableDefinitions() {
+ variableDefs = null;
+ }
+}