summaryrefslogtreecommitdiff
path: root/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ui/ReplaceDialog.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ui/ReplaceDialog.java')
-rw-r--r--platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ui/ReplaceDialog.java195
1 files changed, 195 insertions, 0 deletions
diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ui/ReplaceDialog.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ui/ReplaceDialog.java
new file mode 100644
index 000000000000..b02fadab8245
--- /dev/null
+++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ui/ReplaceDialog.java
@@ -0,0 +1,195 @@
+package com.intellij.structuralsearch.plugin.replace.ui;
+
+import com.intellij.codeInsight.CodeInsightBundle;
+import com.intellij.codeInsight.template.impl.Variable;
+import com.intellij.openapi.editor.Editor;
+import com.intellij.openapi.editor.EditorFactory;
+import com.intellij.openapi.ui.Splitter;
+import com.intellij.structuralsearch.MalformedPatternException;
+import com.intellij.structuralsearch.ReplacementVariableDefinition;
+import com.intellij.structuralsearch.SSRBundle;
+import com.intellij.structuralsearch.UnsupportedPatternException;
+import com.intellij.structuralsearch.plugin.replace.ReplaceOptions;
+import com.intellij.structuralsearch.plugin.replace.impl.Replacer;
+import com.intellij.structuralsearch.plugin.ui.*;
+import com.intellij.util.containers.hash.LinkedHashMap;
+
+import javax.swing.*;
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+// Class to show the user the request for search
+
+@SuppressWarnings({"RefusedBequest"})
+public class ReplaceDialog extends SearchDialog {
+ private Editor replaceCriteriaEdit;
+ private JCheckBox shortenFQN;
+ private JCheckBox formatAccordingToStyle;
+ private JCheckBox useStaticImport;
+
+ private String mySavedEditorText;
+
+ protected String getDefaultTitle() {
+ return SSRBundle.message("structural.replace.title");
+ }
+
+ protected JComponent createEditorContent() {
+ JPanel result = new JPanel(new BorderLayout());
+ Splitter p;
+
+ result.add(BorderLayout.CENTER, p = new Splitter(true, 0.5f));
+ p.setFirstComponent(super.createEditorContent());
+
+ replaceCriteriaEdit = createEditor(searchContext, mySavedEditorText != null ? mySavedEditorText : "");
+ JPanel replace = new JPanel(new BorderLayout());
+ replace.add(BorderLayout.NORTH, new JLabel(SSRBundle.message("replacement.template.label")));
+ replace.add(BorderLayout.CENTER, replaceCriteriaEdit.getComponent());
+ replaceCriteriaEdit.getComponent().setMinimumSize(new Dimension(150, 100));
+
+ p.setSecondComponent(replace);
+
+ return result;
+ }
+
+ protected int getRowsCount() {
+ return super.getRowsCount() + 1;
+ }
+
+ protected String getDimensionServiceKey() {
+ return "#com.intellij.structuralsearch.plugin.replace.ui.ReplaceDialog";
+ }
+
+ protected void buildOptions(JPanel searchOptions) {
+ super.buildOptions(searchOptions);
+ searchOptions.add(UIUtil.createOptionLine(shortenFQN = new JCheckBox(
+ SSRBundle.message("shorten.fully.qualified.names.checkbox"), true)));
+
+ searchOptions.add(UIUtil.createOptionLine(formatAccordingToStyle = new JCheckBox(
+ CodeInsightBundle.message("dialog.edit.template.checkbox.reformat.according.to.style"), true)));
+
+ searchOptions.add(UIUtil.createOptionLine(useStaticImport = new JCheckBox(
+ CodeInsightBundle.message("dialog.edit.template.checkbox.use.static.import"), true)));
+ }
+
+ protected UsageViewContext createUsageViewContext(Configuration configuration) {
+ return new ReplaceUsageViewContext(searchContext, configuration);
+ }
+
+ public ReplaceDialog(SearchContext searchContext) {
+ super(searchContext);
+ }
+
+ public ReplaceDialog(SearchContext searchContext, boolean showScope, boolean runFindActionOnClose) {
+ super(searchContext, showScope, runFindActionOnClose);
+ }
+
+
+ public Configuration createConfiguration() {
+ ReplaceConfiguration configuration = new ReplaceConfiguration();
+ configuration.setName(USER_DEFINED);
+ return configuration;
+ }
+
+ protected void disposeEditorContent() {
+ mySavedEditorText = replaceCriteriaEdit.getDocument().getText();
+ EditorFactory.getInstance().releaseEditor(replaceCriteriaEdit);
+ super.disposeEditorContent();
+ }
+
+ public void setValuesFromConfig(Configuration configuration) {
+ //replaceCriteriaEdit.putUserData(SubstitutionShortInfoHandler.CURRENT_CONFIGURATION_KEY, configuration);
+
+ if (configuration instanceof ReplaceConfiguration) {
+ final ReplaceConfiguration config = (ReplaceConfiguration)configuration;
+ final ReplaceOptions options = config.getOptions();
+ super.setValuesFromConfig(config);
+
+ UIUtil.setContent(replaceCriteriaEdit, config.getOptions().getReplacement(), 0, replaceCriteriaEdit.getDocument().getTextLength(),
+ searchContext.getProject());
+
+ shortenFQN.setSelected(options.isToShortenFQN());
+ formatAccordingToStyle.setSelected(options.isToReformatAccordingToStyle());
+ useStaticImport.setSelected(options.isToUseStaticImport());
+
+ ReplaceOptions newReplaceOptions = ((ReplaceConfiguration)model.getConfig()).getOptions();
+ newReplaceOptions.clearVariableDefinitions();
+
+ for (ReplacementVariableDefinition def : options.getReplacementVariableDefinitions()) {
+ newReplaceOptions.addVariableDefinition((ReplacementVariableDefinition)def.clone());
+ }
+ }
+ else {
+ super.setValuesFromConfig(configuration);
+
+ UIUtil.setContent(replaceCriteriaEdit, configuration.getMatchOptions().getSearchPattern(), 0,
+ replaceCriteriaEdit.getDocument().getTextLength(), searchContext.getProject());
+ }
+ }
+
+ protected void setValuesToConfig(Configuration config) {
+ super.setValuesToConfig(config);
+
+ final ReplaceConfiguration replaceConfiguration = (ReplaceConfiguration)config;
+ final ReplaceOptions options = replaceConfiguration.getOptions();
+
+ options.setMatchOptions(replaceConfiguration.getMatchOptions());
+ options.setReplacement(replaceCriteriaEdit.getDocument().getText());
+ options.setToShortenFQN(shortenFQN.isSelected());
+ options.setToReformatAccordingToStyle(formatAccordingToStyle.isSelected());
+ options.setToUseStaticImport(useStaticImport.isSelected());
+ }
+
+ protected boolean isRecursiveSearchEnabled() {
+ return false;
+ }
+
+ protected java.util.List<Variable> getVariablesFromListeners() {
+ ArrayList<Variable> vars = getVarsFrom(replaceCriteriaEdit);
+ List<Variable> searchVars = super.getVariablesFromListeners();
+ Map<String, Variable> varsMap = new LinkedHashMap<String, Variable>(searchVars.size());
+
+ for(Variable var:searchVars) varsMap.put(var.getName(), var);
+ for(Variable var:vars) {
+ if (!varsMap.containsKey(var.getName())) {
+ String newVarName = var.getName() + ReplaceConfiguration.REPLACEMENT_VARIABLE_SUFFIX;
+ varsMap.put(newVarName, new Variable(newVarName, null, null, false, false));
+ }
+ }
+ return new ArrayList<Variable>(varsMap.values());
+ }
+
+ protected boolean isValid() {
+ if (!super.isValid()) return false;
+
+ try {
+ Replacer.checkSupportedReplacementPattern(searchContext.getProject(), ((ReplaceConfiguration)model.getConfig()).getOptions());
+ }
+ catch (UnsupportedPatternException ex) {
+ reportMessage("unsupported.replacement.pattern.message", replaceCriteriaEdit, ex.getMessage());
+ return false;
+ }
+ catch (MalformedPatternException ex) {
+ reportMessage("malformed.replacement.pattern.message", replaceCriteriaEdit, ex.getMessage());
+ return false;
+ }
+
+ return true;
+ }
+
+ public void show() {
+ replaceCriteriaEdit.putUserData(SubstitutionShortInfoHandler.CURRENT_CONFIGURATION_KEY, model.getConfig());
+
+ super.show();
+ }
+
+ protected boolean isReplaceDialog() {
+ return true;
+ }
+
+ protected void addOrReplaceSelection(final String selection) {
+ super.addOrReplaceSelection(selection);
+ addOrReplaceSelectionForEditor(selection, replaceCriteriaEdit);
+ }
+}