From 3c281f8ab0df4869bb4b2f797f4ec7bec309b9c8 Mon Sep 17 00:00:00 2001 From: DanilGolikov <80261859+DanilGolikov@users.noreply.github.com> Date: Tue, 11 Jun 2024 21:02:57 +0300 Subject: [PATCH 1/3] Added the ability to change element names in Search Tree --- .../jmeter/gui/action/SearchTreeDialog.java | 25 ++++++++++++++++--- .../jmeter/resources/messages.properties | 1 + 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/core/src/main/java/org/apache/jmeter/gui/action/SearchTreeDialog.java b/src/core/src/main/java/org/apache/jmeter/gui/action/SearchTreeDialog.java index 51f0f7c63ac..b99ac6d832c 100644 --- a/src/core/src/main/java/org/apache/jmeter/gui/action/SearchTreeDialog.java +++ b/src/core/src/main/java/org/apache/jmeter/gui/action/SearchTreeDialog.java @@ -104,6 +104,8 @@ public class SearchTreeDialog extends JDialog implements ActionListener { // NOS private JCheckBox isCaseSensitiveCB; + private JCheckBox isNamesReplaceable; + private transient Triple lastSearchConditions = null; @@ -171,14 +173,17 @@ private void init() { // WARNING: called from ctor so must not be overridden (i. statusLabel.setMinimumSize(new Dimension(100, 20)); isRegexpCB = new JCheckBox(JMeterUtils.getResString("search_text_chkbox_regexp"), false); //$NON-NLS-1$ isCaseSensitiveCB = new JCheckBox(JMeterUtils.getResString("search_text_chkbox_case"), true); //$NON-NLS-1$ + isNamesReplaceable = new JCheckBox(JMeterUtils.getResString("replace_in_name"), false); //$NON-NLS-1$ JFactory.small(isRegexpCB); JFactory.small(isCaseSensitiveCB); + JFactory.small(isNamesReplaceable); JPanel searchCriterionPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); searchCriterionPanel.setBorder(BorderFactory.createTitledBorder(JMeterUtils.getResString("search_matching"))); //$NON-NLS-1$ searchCriterionPanel.add(isCaseSensitiveCB); searchCriterionPanel.add(isRegexpCB); + searchCriterionPanel.add(isNamesReplaceable); JPanel searchPanel = new JPanel(); searchPanel.setLayout(new MigLayout("fillx, wrap 2", "[][fill,grow]")); @@ -288,7 +293,8 @@ private void doReplace() { String wordToReplace = replaceTF.getText(); String regex = isRegexpCB.isSelected() ? wordToSearch : Pattern.quote(wordToSearch); boolean caseSensitiveReplacement = isCaseSensitiveCB.isSelected(); - Pair pair = doReplacementInCurrentNode(currentNode, regex, wordToReplace, caseSensitiveReplacement); + boolean namesReplacement = isNamesReplaceable.isSelected(); + Pair pair = doReplacementInCurrentNode(currentNode, regex, wordToReplace, caseSensitiveReplacement, namesReplacement); if(pair != null) { nbReplacements = pair.getLeft(); GuiPackage.getInstance().updateCurrentGui(); @@ -437,12 +443,17 @@ private void doReplaceAll(ActionEvent e) { String regex = isRegexpCB.isSelected() ? wordToSearch : Pattern.quote(wordToSearch); GuiPackage guiPackage = GuiPackage.getInstance(); boolean caseSensitiveReplacement = isCaseSensitiveCB.isSelected(); + boolean namesReplacement = isNamesReplaceable.isSelected(); int totalReplaced = 0; Pair> result = searchInTree(guiPackage, searcher, wordToSearch); Set matchingNodes = result.getRight(); Set replacedNodes = new HashSet<>(); for (JMeterTreeNode jMeterTreeNode : matchingNodes) { - Pair pair = doReplacementInCurrentNode(jMeterTreeNode, regex, wordToReplace, caseSensitiveReplacement); +// if (isNamesReplaceable.isSelected()) { +// String nodeName = jMeterTreeNode.getName(); +// jMeterTreeNode.setName(nodeName.replaceAll(wordToSearch, wordToReplace)); +// } + Pair pair = doReplacementInCurrentNode(jMeterTreeNode, regex, wordToReplace, caseSensitiveReplacement, namesReplacement); if(pair != null) { totalReplaced += pair.getLeft(); replacedNodes.add(pair.getRight()); @@ -468,11 +479,15 @@ private void doReplaceAll(ActionEvent e) { * @return null if no replacement occurred or Pair of (number of replacement, current tree node) */ private static Pair doReplacementInCurrentNode(JMeterTreeNode jMeterTreeNode, - String regex, String replaceBy, boolean caseSensitiveReplacement) { + String regex, String replaceBy, boolean caseSensitiveReplacement, boolean namesReplacement) { try { if (jMeterTreeNode.getUserObject() instanceof Replaceable) { Replaceable replaceable = (Replaceable) jMeterTreeNode.getUserObject(); int numberOfReplacements = replaceable.replace(regex, replaceBy, caseSensitiveReplacement); + if (namesReplacement) { + jMeterTreeNode.setName(jMeterTreeNode.getName().replaceAll(regex, replaceBy)); + numberOfReplacements++; + } if (numberOfReplacements > 0) { if (logger.isInfoEnabled()) { logger.info("Replaced {} in element:{}", numberOfReplacements, @@ -480,7 +495,11 @@ private static Pair doReplacementInCurrentNode(JMeterTr } return Pair.of(numberOfReplacements, jMeterTreeNode); } + } else if (namesReplacement) { + jMeterTreeNode.setName(jMeterTreeNode.getName().replaceAll(regex, replaceBy)); + return Pair.of(1, jMeterTreeNode); } + } catch (Exception ex) { logger.error("Error occurred replacing data in node:{}", jMeterTreeNode.getName(), ex); } diff --git a/src/core/src/main/resources/org/apache/jmeter/resources/messages.properties b/src/core/src/main/resources/org/apache/jmeter/resources/messages.properties index 23721c4b4c9..b91b9d66d5b 100644 --- a/src/core/src/main/resources/org/apache/jmeter/resources/messages.properties +++ b/src/core/src/main/resources/org/apache/jmeter/resources/messages.properties @@ -1125,6 +1125,7 @@ search_text_button_close=Close search_text_button_find=Find search_text_chkbox_case=Case sensitive search_text_chkbox_regexp=Regular exp. +replace_in_name=Names replace search_text_field=Search\: search_tree_matches={0} node(s) match the search search_text_replace=Replace by\: From 76a1ca087a96f8f3f25a5965b3652156b0cd2dcd Mon Sep 17 00:00:00 2001 From: DanilGolikov <80261859+DanilGolikov@users.noreply.github.com> Date: Tue, 11 Jun 2024 21:05:47 +0300 Subject: [PATCH 2/3] clear comments --- .../java/org/apache/jmeter/gui/action/SearchTreeDialog.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/core/src/main/java/org/apache/jmeter/gui/action/SearchTreeDialog.java b/src/core/src/main/java/org/apache/jmeter/gui/action/SearchTreeDialog.java index b99ac6d832c..36c0b755ed1 100644 --- a/src/core/src/main/java/org/apache/jmeter/gui/action/SearchTreeDialog.java +++ b/src/core/src/main/java/org/apache/jmeter/gui/action/SearchTreeDialog.java @@ -449,10 +449,6 @@ private void doReplaceAll(ActionEvent e) { Set matchingNodes = result.getRight(); Set replacedNodes = new HashSet<>(); for (JMeterTreeNode jMeterTreeNode : matchingNodes) { -// if (isNamesReplaceable.isSelected()) { -// String nodeName = jMeterTreeNode.getName(); -// jMeterTreeNode.setName(nodeName.replaceAll(wordToSearch, wordToReplace)); -// } Pair pair = doReplacementInCurrentNode(jMeterTreeNode, regex, wordToReplace, caseSensitiveReplacement, namesReplacement); if(pair != null) { totalReplaced += pair.getLeft(); From 601f313813c2ba6c34ffbc3374377f15b60d927b Mon Sep 17 00:00:00 2001 From: DanilGolikov <80261859+DanilGolikov@users.noreply.github.com> Date: Thu, 13 Jun 2024 08:57:48 +0300 Subject: [PATCH 3/3] renaming variables to a common format --- .../apache/jmeter/gui/action/SearchTreeDialog.java | 12 ++++++------ .../org/apache/jmeter/resources/messages.properties | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/core/src/main/java/org/apache/jmeter/gui/action/SearchTreeDialog.java b/src/core/src/main/java/org/apache/jmeter/gui/action/SearchTreeDialog.java index 36c0b755ed1..ef746abe0e2 100644 --- a/src/core/src/main/java/org/apache/jmeter/gui/action/SearchTreeDialog.java +++ b/src/core/src/main/java/org/apache/jmeter/gui/action/SearchTreeDialog.java @@ -104,7 +104,7 @@ public class SearchTreeDialog extends JDialog implements ActionListener { // NOS private JCheckBox isCaseSensitiveCB; - private JCheckBox isNamesReplaceable; + private JCheckBox isNamesReplaceableCB; private transient Triple lastSearchConditions = null; @@ -173,17 +173,17 @@ private void init() { // WARNING: called from ctor so must not be overridden (i. statusLabel.setMinimumSize(new Dimension(100, 20)); isRegexpCB = new JCheckBox(JMeterUtils.getResString("search_text_chkbox_regexp"), false); //$NON-NLS-1$ isCaseSensitiveCB = new JCheckBox(JMeterUtils.getResString("search_text_chkbox_case"), true); //$NON-NLS-1$ - isNamesReplaceable = new JCheckBox(JMeterUtils.getResString("replace_in_name"), false); //$NON-NLS-1$ + isNamesReplaceableCB = new JCheckBox(JMeterUtils.getResString("search_text_chkbox_names_replaceable"), false); //$NON-NLS-1$ JFactory.small(isRegexpCB); JFactory.small(isCaseSensitiveCB); - JFactory.small(isNamesReplaceable); + JFactory.small(isNamesReplaceableCB); JPanel searchCriterionPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); searchCriterionPanel.setBorder(BorderFactory.createTitledBorder(JMeterUtils.getResString("search_matching"))); //$NON-NLS-1$ searchCriterionPanel.add(isCaseSensitiveCB); searchCriterionPanel.add(isRegexpCB); - searchCriterionPanel.add(isNamesReplaceable); + searchCriterionPanel.add(isNamesReplaceableCB); JPanel searchPanel = new JPanel(); searchPanel.setLayout(new MigLayout("fillx, wrap 2", "[][fill,grow]")); @@ -293,7 +293,7 @@ private void doReplace() { String wordToReplace = replaceTF.getText(); String regex = isRegexpCB.isSelected() ? wordToSearch : Pattern.quote(wordToSearch); boolean caseSensitiveReplacement = isCaseSensitiveCB.isSelected(); - boolean namesReplacement = isNamesReplaceable.isSelected(); + boolean namesReplacement = isNamesReplaceableCB.isSelected(); Pair pair = doReplacementInCurrentNode(currentNode, regex, wordToReplace, caseSensitiveReplacement, namesReplacement); if(pair != null) { nbReplacements = pair.getLeft(); @@ -443,7 +443,7 @@ private void doReplaceAll(ActionEvent e) { String regex = isRegexpCB.isSelected() ? wordToSearch : Pattern.quote(wordToSearch); GuiPackage guiPackage = GuiPackage.getInstance(); boolean caseSensitiveReplacement = isCaseSensitiveCB.isSelected(); - boolean namesReplacement = isNamesReplaceable.isSelected(); + boolean namesReplacement = isNamesReplaceableCB.isSelected(); int totalReplaced = 0; Pair> result = searchInTree(guiPackage, searcher, wordToSearch); Set matchingNodes = result.getRight(); diff --git a/src/core/src/main/resources/org/apache/jmeter/resources/messages.properties b/src/core/src/main/resources/org/apache/jmeter/resources/messages.properties index b91b9d66d5b..283c559ea08 100644 --- a/src/core/src/main/resources/org/apache/jmeter/resources/messages.properties +++ b/src/core/src/main/resources/org/apache/jmeter/resources/messages.properties @@ -1125,7 +1125,7 @@ search_text_button_close=Close search_text_button_find=Find search_text_chkbox_case=Case sensitive search_text_chkbox_regexp=Regular exp. -replace_in_name=Names replace +search_text_chkbox_names_replaceable=Names replace search_text_field=Search\: search_tree_matches={0} node(s) match the search search_text_replace=Replace by\: