Author: pmouawad
Date: Tue Oct 11 17:32:43 2011
New Revision: 1181906
URL: http://svn.apache.org/viewvc?rev=1181906&view=rev
Log:
Bug 51876 - Functionnality to search in Samplers TreeView
Added:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/Searchable.java (with
props)
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/SearchTreeCommand.java
(with props)
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/ActionNames.java
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterCellRenderer.java
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterTreeNode.java
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/util/JMeterMenuBar.java
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
jakarta/jmeter/trunk/xdocs/changes.xml
jakarta/jmeter/trunk/xdocs/usermanual/hints_and_tips.xml
Added: jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/Searchable.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/Searchable.java?rev=1181906&view=auto
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/Searchable.java (added)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/Searchable.java Tue Oct
11 17:32:43 2011
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.jmeter.gui;
+
+/**
+ * Interface for nodes that are searchable
+ */
+public interface Searchable {
+
+ /**
+ *
+ * @param textToSearch
+ * @return true if search was successful
+ */
+ boolean searchContent(String textToSearch)
+ throws Exception ;
+
+}
Propchange: jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/Searchable.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/ActionNames.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/ActionNames.java?rev=1181906&r1=1181905&r2=1181906&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/ActionNames.java
(original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/ActionNames.java
Tue Oct 11 17:32:43 2011
@@ -83,6 +83,7 @@ public class ActionNames {
public static final String SUB_TREE_SAVED = "sub_tree_saved"; //
$NON-NLS-1$
public static final String TOGGLE = "toggle"; // $NON-NLS-1$
enable/disable
public static final String WHAT_CLASS = "what_class"; // $NON-NLS-1$
+ public static final String SEARCH_TREE = "search_tree"; // $NON-NLS-1$
// Prevent instantiation
private ActionNames(){
Added:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/SearchTreeCommand.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/SearchTreeCommand.java?rev=1181906&view=auto
==============================================================================
---
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/SearchTreeCommand.java
(added)
+++
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/SearchTreeCommand.java
Tue Oct 11 17:32:43 2011
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.jmeter.gui.action;
+
+import java.awt.event.ActionEvent;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.swing.JOptionPane;
+
+import org.apache.jmeter.gui.GuiPackage;
+import org.apache.jmeter.gui.Searchable;
+import org.apache.jmeter.gui.tree.JMeterTreeModel;
+import org.apache.jmeter.gui.tree.JMeterTreeNode;
+import org.apache.jmeter.util.JMeterUtils;
+import org.apache.jorphan.logging.LoggingManager;
+import org.apache.log.Logger;
+
+/**
+ * Search nodes for a text
+ * TODO Enhance search dialog to select kind of nodes ....
+ */
+public class SearchTreeCommand extends AbstractAction {
+ private Logger logger = LoggingManager.getLoggerForClass();
+ private static final Set<String> commands = new HashSet<String>();
+
+ static {
+ commands.add(ActionNames.SEARCH_TREE);
+ }
+
+ /**
+ * @see Command#doAction(ActionEvent)
+ */
+ @Override
+ public void doAction(ActionEvent e) {
+ String wordToSearch = JOptionPane.showInputDialog(
+ GuiPackage.getInstance().getMainFrame(),
+ JMeterUtils.getResString("search_word"), // $NON-NLS-1$
+ JMeterUtils.getResString("search_tree_title"), // $NON-NLS-1$
+ JOptionPane.QUESTION_MESSAGE);
+ GuiPackage guiPackage = GuiPackage.getInstance();
+ JMeterTreeModel jMeterTreeModel = guiPackage.getTreeModel();
+ Iterator<?> iter =
jMeterTreeModel.getNodesOfType(Searchable.class).iterator();
+ while (iter.hasNext()) {
+ try {
+ JMeterTreeNode jMeterTreeNode = (JMeterTreeNode) iter.next();
+ if (jMeterTreeNode.getUserObject() instanceof Searchable){
+ Searchable searchable = (Searchable)
jMeterTreeNode.getUserObject();
+
+ boolean result = searchable.searchContent(wordToSearch);
+ if(result) {
+ jMeterTreeNode.setMarkedBySearch(true);
+ }
+ else {
+ jMeterTreeNode.setMarkedBySearch(false);
+ }
+ }
+ } catch (Exception ex) {
+ logger.error("Error occured searching for word:"+
wordToSearch, ex);
+ }
+ }
+ GuiPackage.getInstance().getMainFrame().repaint();
+ }
+
+
+ /**
+ * @see Command#getActionNames()
+ */
+ @Override
+ public Set<String> getActionNames() {
+ return commands;
+ }
+}
Propchange:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/SearchTreeCommand.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterCellRenderer.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterCellRenderer.java?rev=1181906&r1=1181905&r2=1181906&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterCellRenderer.java
(original)
+++
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterCellRenderer.java
Tue Oct 11 17:32:43 2011
@@ -18,8 +18,10 @@
package org.apache.jmeter.gui.tree;
+import java.awt.Color;
import java.awt.Component;
+import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeCellRenderer;
@@ -36,10 +38,11 @@ public class JMeterCellRenderer extends
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean sel, boolean expanded,
boolean leaf, int row, boolean p_hasFocus) {
- super.getTreeCellRendererComponent(tree, ((JMeterTreeNode)
value).getName(), sel, expanded, leaf, row,
+ JMeterTreeNode node = (JMeterTreeNode) value;
+ super.getTreeCellRendererComponent(tree, node.getName(), sel,
expanded, leaf, row,
p_hasFocus);
- boolean enabled = ((JMeterTreeNode) value).isEnabled();
- ImageIcon ic = ((JMeterTreeNode) value).getIcon(enabled);
+ boolean enabled = node.isEnabled();
+ ImageIcon ic = node.getIcon(enabled);
if (ic != null) {
if (enabled) {
setIcon(ic);
@@ -51,13 +54,19 @@ public class JMeterCellRenderer extends
{
// Must therefore set the enabled icon so there is at least
some
// icon
- ic = ((JMeterTreeNode) value).getIcon();
+ ic = node.getIcon();
if (ic != null) {
setIcon(ic);
}
}
}
this.setEnabled(enabled);
+ if(node.isMarkedBySearch()) {
+ setBorder(BorderFactory.createLineBorder(Color.red));
+ }
+ else {
+ setBorder(null);
+ }
return this;
}
}
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterTreeNode.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterTreeNode.java?rev=1181906&r1=1181905&r2=1181906&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterTreeNode.java
(original)
+++
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterTreeNode.java
Tue Oct 11 17:32:43 2011
@@ -45,6 +45,8 @@ public class JMeterTreeNode extends Defa
private final JMeterTreeModel treeModel;
+ private boolean markedBySearch;
+
public JMeterTreeNode() {// Allow serializable test to work
// TODO: is the serializable test necessary now that JMeterTreeNode is
// no longer a GUI component?
@@ -64,6 +66,23 @@ public class JMeterTreeNode extends Defa
getTestElement().setProperty(new BooleanProperty(TestElement.ENABLED,
enabled));
treeModel.nodeChanged(this);
}
+
+ /**
+ * Tag Node as result of a search
+ * @return
+ */
+ public void setMarkedBySearch(boolean tagged) {
+ this.markedBySearch = tagged;
+ treeModel.nodeChanged(this);
+ }
+
+ /**
+ * Node is markedBySearch by a search
+ * @return
+ */
+ public boolean isMarkedBySearch() {
+ return this.markedBySearch;
+ }
public ImageIcon getIcon() {
return getIcon(true);
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/util/JMeterMenuBar.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/util/JMeterMenuBar.java?rev=1181906&r1=1181905&r2=1181906&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/util/JMeterMenuBar.java
(original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/util/JMeterMenuBar.java
Tue Oct 11 17:32:43 2011
@@ -127,6 +127,8 @@ public class JMeterMenuBar extends JMenu
private Collection<JMenuItem> remote_engine_exit;
+ private JMenu searchMenu;
+
public JMeterMenuBar() {
// List for recent files menu items
file_load_recent_files = new LinkedList<JComponent>();
@@ -253,8 +255,10 @@ public class JMeterMenuBar extends JMenu
makeRunMenu();
makeOptionsMenu();
makeHelpMenu();
+ makeSearchMenu();
this.add(fileMenu);
this.add(editMenu);
+ this.add(searchMenu);
this.add(runMenu);
this.add(optionsMenu);
this.add(helpMenu);
@@ -491,6 +495,15 @@ public class JMeterMenuBar extends JMenu
fileMenu.add(file_exit);
}
+ private void makeSearchMenu() {
+ // Search MENU
+ searchMenu = makeMenuRes("menu_search"); //$NON-NLS-1$
+
+ JMenuItem search = makeMenuItemRes("menu_search",
ActionNames.SEARCH_TREE); //$NON-NLS-1$
+ searchMenu.add(search);
+ searchMenu.setEnabled(true);
+ }
+
public void setRunning(boolean running, String host) {
log.info("setRunning(" + running + "," + host + ")");
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=1181906&r1=1181905&r2=1181906&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
(original)
+++
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
Tue Oct 11 17:32:43 2011
@@ -504,6 +504,7 @@ menu_open=Open
menu_post_processors=Post Processors
menu_pre_processors=Pre Processors
menu_response_based_modifiers=Response Based Modifiers
+menu_search=Search
menu_tables=Table
menu_timer=Timer
metadata=MetaData
@@ -758,6 +759,8 @@ search_text_chkbox_regexp=Regular exp.
search_text_field=Search:
search_text_msg_not_found=Text not found
search_text_title_not_found=Not found
+search_tree_title=Search Tree
+search_word=Search Word
searchbase=Search base
searchfilter=Search Filter
searchtest=Search test
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties?rev=1181906&r1=1181905&r2=1181906&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
(original)
+++
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
Tue Oct 11 17:32:43 2011
@@ -462,6 +462,7 @@ menu_open=Ouvrir...
menu_post_processors=Post-Processeurs
menu_pre_processors=Pr\u00E9-Processeurs
menu_response_based_modifiers=Modificateurs bas\u00E9s sur la r\u00E9ponse
+menu_search=Rechercher
menu_threads=Moteurs d'utilisateurs
menu_timer=Compteurs de temps
metadata=M\u00E9ta-donn\u00E9es
@@ -671,6 +672,8 @@ search_text_chkbox_regexp=Exp. reguli\u0
search_text_field=Rechercher \:
search_text_msg_not_found=Texte non trouv\u00E9
search_text_title_not_found=Pas trouv\u00E9
+search_tree_title=Rechercher dans l'arbre
+search_word=Rechercher le mot
searchbase=Base de recherche
searchfilter=Filtre de recherche
searchtest=Recherche
Modified:
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java?rev=1181906&r1=1181905&r2=1181906&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
(original)
+++
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
Tue Oct 11 17:32:43 2011
@@ -40,9 +40,11 @@ import java.util.concurrent.ThreadPoolEx
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
+import org.apache.commons.lang.StringUtils;
import org.apache.jmeter.config.Argument;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.engine.event.LoopIterationEvent;
+import org.apache.jmeter.gui.Searchable;
import org.apache.jmeter.protocol.http.control.AuthManager;
import org.apache.jmeter.protocol.http.control.CacheManager;
import org.apache.jmeter.protocol.http.control.CookieManager;
@@ -82,7 +84,7 @@ import org.apache.oro.text.regex.Perl5Ma
*
*/
public abstract class HTTPSamplerBase extends AbstractSampler
- implements TestListener, ThreadListener, HTTPConstantsInterface {
+ implements TestListener, ThreadListener, HTTPConstantsInterface,
Searchable {
private static final long serialVersionUID = 240L;
@@ -1692,5 +1694,46 @@ public abstract class HTTPSamplerBase ex
return sample(url, method, areFollowingRedirect, depth);
}
}
-}
+
+ /**
+ * We search in URL and arguments
+ * TODO Can be enhanced
+ * {@inheritDoc}
+ */
+ public boolean searchContent(String textToSearch) throws Exception {
+ String searchedTextLowerCase = textToSearch.toLowerCase();
+ if(testField(getUrl().toString(), searchedTextLowerCase)) {
+ return true;
+ }
+ Arguments arguments = getArguments();
+ if(arguments != null) {
+ for (int i = 0; i < arguments.getArgumentCount(); i++) {
+ Argument argument = arguments.getArgument(i);
+ if(testField(argument.getName(), searchedTextLowerCase)) {
+ return true;
+ }
+ if(testField(argument.getValue(), searchedTextLowerCase)) {
+ return true;
+ }
+ }
+ }
+ if(testField(getComment(), searchedTextLowerCase)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Returns true if searchedTextLowerCase is in value
+ * @param value
+ * @param searchedTextLowerCase
+ * @return
+ */
+ private boolean testField(String value, String searchedTextLowerCase) {
+ if(!StringUtils.isEmpty(value)) {
+ return value.toLowerCase().indexOf(searchedTextLowerCase)>=0;
+ }
+ return false;
+ }
+ }
Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=1181906&r1=1181905&r2=1181906&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Tue Oct 11 17:32:43 2011
@@ -164,6 +164,7 @@ Mirror server now uses default port 8081
<ul>
<li>Bug 51892 - Default mirror port should be different from default proxy
port</li>
<li>Bug 51817 - Moving variables up and down in User Defined Variables
control</li>
+<li>Bug 51876 - Functionnality to search in Samplers TreeView</li>
</ul>
<h2>Non-functional changes</h2>
Modified: jakarta/jmeter/trunk/xdocs/usermanual/hints_and_tips.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/hints_and_tips.xml?rev=1181906&r1=1181905&r2=1181906&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/usermanual/hints_and_tips.xml (original)
+++ jakarta/jmeter/trunk/xdocs/usermanual/hints_and_tips.xml Tue Oct 11
17:32:43 2011
@@ -64,6 +64,13 @@ You can use these to determine the corre
</p>
</subsection>
+<subsection name="§-num;.3 Searching" anchor="searching">
+<p>
+It is sometimes hard to find in a Test Plan tree and elements using a variable
or containing a certain URL or parameter.
+A new feature is now available since 2.5.2, you can access it in Menu Search.
+For now this feature only searches HTTP Samplers. If you find it useful log a
Bugzilla enhancement request.
+</p>
+</subsection>
</section>
</body>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]