diff options
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.java | 195 |
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); + } +} |