You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2011/11/04 09:34:08 UTC

svn commit: r1197425 - in /jmeter/trunk/src: components/org/apache/jmeter/config/ components/org/apache/jmeter/extractor/ core/org/apache/jmeter/gui/ core/org/apache/jmeter/gui/action/ core/org/apache/jmeter/resources/ core/org/apache/jmeter/testelemen...

Author: pmouawad
Date: Fri Nov  4 08:34:07 2011
New Revision: 1197425

URL: http://svn.apache.org/viewvc?rev=1197425&view=rev
Log:
Bug 51876 - Functionnality to search in Samplers TreeView
Changed implementation to:
- Add ability to search with regexp 
- Add ability to search in case sensitive and insentive modes
- Plug additional search implementations

Added:
    jmeter/trunk/src/core/org/apache/jmeter/gui/action/RawTextSearcher.java   (with props)
    jmeter/trunk/src/core/org/apache/jmeter/gui/action/RegexpSearcher.java   (with props)
    jmeter/trunk/src/core/org/apache/jmeter/gui/action/SearchTreeDialog.java   (with props)
    jmeter/trunk/src/core/org/apache/jmeter/gui/action/Searcher.java   (with props)
Modified:
    jmeter/trunk/src/components/org/apache/jmeter/config/CSVDataSet.java
    jmeter/trunk/src/components/org/apache/jmeter/extractor/RegexExtractor.java
    jmeter/trunk/src/components/org/apache/jmeter/extractor/XPathExtractor.java
    jmeter/trunk/src/core/org/apache/jmeter/gui/Searchable.java
    jmeter/trunk/src/core/org/apache/jmeter/gui/action/SearchTreeCommand.java
    jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
    jmeter/trunk/src/core/org/apache/jmeter/testelement/AbstractScopedTestElement.java
    jmeter/trunk/src/core/org/apache/jmeter/testelement/AbstractTestElement.java
    jmeter/trunk/src/core/org/apache/jmeter/util/BeanShellTestElement.java
    jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java

Modified: jmeter/trunk/src/components/org/apache/jmeter/config/CSVDataSet.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/config/CSVDataSet.java?rev=1197425&r1=1197424&r2=1197425&view=diff
==============================================================================
--- jmeter/trunk/src/components/org/apache/jmeter/config/CSVDataSet.java (original)
+++ jmeter/trunk/src/components/org/apache/jmeter/config/CSVDataSet.java Fri Nov  4 08:34:07 2011
@@ -19,8 +19,8 @@
 package org.apache.jmeter.config;
 
 import java.io.IOException;
+import java.util.List;
 
-import org.apache.jmeter.config.ConfigTestElement;
 import org.apache.jmeter.engine.event.LoopIterationEvent;
 import org.apache.jmeter.engine.event.LoopIterationListener;
 import org.apache.jmeter.save.CSVSaveService;
@@ -255,19 +255,14 @@ public class CSVDataSet extends ConfigTe
     public void setShareMode(String value) {
         this.shareMode = value;
     }
-
+    
     /** 
      * {@inheritDoc}}
      */
     @Override
-    public boolean searchContent(String textToSearch) throws Exception {
-        if(super.searchContent(textToSearch)) {
-            return true;
-        }
-        String searchedTextLowerCase = textToSearch.toLowerCase();
-        if(testField(getPropertyAsString("variableNames"), searchedTextLowerCase)) {
-            return true;
-        }
-        return false;
+    public List<String> getSearchableTokens() throws Exception {
+        List<String> result = super.getSearchableTokens();
+        result.add(getPropertyAsString("variableNames"));
+        return result;
     }
 }

Modified: jmeter/trunk/src/components/org/apache/jmeter/extractor/RegexExtractor.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/extractor/RegexExtractor.java?rev=1197425&r1=1197424&r2=1197425&view=diff
==============================================================================
--- jmeter/trunk/src/components/org/apache/jmeter/extractor/RegexExtractor.java (original)
+++ jmeter/trunk/src/components/org/apache/jmeter/extractor/RegexExtractor.java Fri Nov  4 08:34:07 2011
@@ -453,25 +453,16 @@ public class RegexExtractor extends Abst
     public void setUseField(String actionCommand) {
         setProperty(MATCH_AGAINST,actionCommand);
     }
-
-    /**
-     * {@inheritDoc}
+    
+    /** 
+     * {@inheritDoc}}
      */
     @Override
-    public boolean searchContent(String textToSearch) throws Exception {
-        if(super.searchContent(textToSearch)) {
-            return true;
-        }
-        String searchedTextLowerCase = textToSearch.toLowerCase();
-        if(testField(getRefName(), searchedTextLowerCase)) {
-            return true;
-        }
-        if(testField(getDefaultValue(), searchedTextLowerCase)) {
-            return true;
-        }
-        if(testField(getRegex(), searchedTextLowerCase)) {
-            return true;
-        }
-        return false;
+    public List<String> getSearchableTokens() throws Exception {
+        List<String> result = super.getSearchableTokens();
+        result.add(getRefName());
+        result.add(getDefaultValue());
+        result.add(getRegex());
+        return result;
     }
 }

Modified: jmeter/trunk/src/components/org/apache/jmeter/extractor/XPathExtractor.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/extractor/XPathExtractor.java?rev=1197425&r1=1197424&r2=1197425&view=diff
==============================================================================
--- jmeter/trunk/src/components/org/apache/jmeter/extractor/XPathExtractor.java (original)
+++ jmeter/trunk/src/components/org/apache/jmeter/extractor/XPathExtractor.java Fri Nov  4 08:34:07 2011
@@ -387,25 +387,16 @@ public class XPathExtractor extends Abst
         }
         return sw.toString();
     }
-
-    /**
-     * {@inheritDoc}
+    
+    /** 
+     * {@inheritDoc}}
      */
     @Override
-    public boolean searchContent(String textToSearch) throws Exception {
-        if(super.searchContent(textToSearch)) {
-            return true;
-        }
-        String searchedTextLowerCase = textToSearch.toLowerCase();
-        if(testField(getRefName(), searchedTextLowerCase)) {
-            return true;
-        }
-        if(testField(getDefaultValue(), searchedTextLowerCase)) {
-            return true;
-        }
-        if(testField(getXPathQuery(), searchedTextLowerCase)) {
-            return true;
-        }
-        return false;
+    public List<String> getSearchableTokens() throws Exception {
+        List<String> result = super.getSearchableTokens();
+        result.add(getRefName());
+        result.add(getDefaultValue());
+        result.add(getXPathQuery());
+        return result;
     }
 }

Modified: jmeter/trunk/src/core/org/apache/jmeter/gui/Searchable.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/gui/Searchable.java?rev=1197425&r1=1197424&r2=1197425&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/gui/Searchable.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/gui/Searchable.java Fri Nov  4 08:34:07 2011
@@ -18,17 +18,16 @@
 
 package org.apache.jmeter.gui;
 
+import java.util.List;
+
 /**
  * Interface for nodes that are searchable
  */
 public interface Searchable {
-
     /**
-     * 
-     * @param textToSearch
-     * @return true if search was successful
+     * @return List<String> of searchable tokens
+     * @throws Exception
      */
-    boolean searchContent(String textToSearch)
-        throws Exception ;
-
+    List<String> getSearchableTokens() 
+    	throws Exception;
 }

Added: jmeter/trunk/src/core/org/apache/jmeter/gui/action/RawTextSearcher.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/gui/action/RawTextSearcher.java?rev=1197425&view=auto
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/gui/action/RawTextSearcher.java (added)
+++ jmeter/trunk/src/core/org/apache/jmeter/gui/action/RawTextSearcher.java Fri Nov  4 08:34:07 2011
@@ -0,0 +1,83 @@
+/*
+ * 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.util.List;
+
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * 
+ */
+public class RawTextSearcher implements Searcher {
+	private boolean caseSensitive;
+	private String textToSearch;
+	
+
+	/**
+	 * 
+	 * @param caseSensitive
+	 * @param textToSearch
+	 */
+	public RawTextSearcher(boolean caseSensitive, String textToSearch) {
+		super();
+		this.caseSensitive = caseSensitive;
+		if(caseSensitive) {
+			this.textToSearch = textToSearch;
+		} else {
+			this.textToSearch = textToSearch.toLowerCase();
+		}
+	}
+
+
+
+	/* (non-Javadoc)
+	 * @see org.apache.jmeter.gui.action.ISearcher#search(java.util.List)
+	 */
+	@Override
+	public boolean search(List<String> textTokens) {
+		boolean result = false;
+		for (String searchableToken : textTokens) {
+			if(!StringUtils.isEmpty(searchableToken)) {
+				if(caseSensitive) {
+					result = searchableToken.indexOf(textToSearch)>=0;
+				} else {
+					result = searchableToken.toLowerCase().indexOf(textToSearch)>=0;
+				}
+				if (result) {
+					return result;
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+     * Returns true if searchedTextLowerCase is in value
+     * @param value
+     * @param searchedTextLowerCase
+     * @return true if searchedTextLowerCase is in value
+     */
+    protected boolean testField(String value, String searchedTextLowerCase) {
+        if(!StringUtils.isEmpty(value)) {
+            return value.toLowerCase().indexOf(searchedTextLowerCase)>=0;
+        }
+        return false;
+    }
+}
\ No newline at end of file

Propchange: jmeter/trunk/src/core/org/apache/jmeter/gui/action/RawTextSearcher.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: jmeter/trunk/src/core/org/apache/jmeter/gui/action/RegexpSearcher.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/gui/action/RegexpSearcher.java?rev=1197425&view=auto
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/gui/action/RegexpSearcher.java (added)
+++ jmeter/trunk/src/core/org/apache/jmeter/gui/action/RegexpSearcher.java Fri Nov  4 08:34:07 2011
@@ -0,0 +1,71 @@
+/*
+ * 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.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * Regexp search implementation
+ */
+public class RegexpSearcher implements Searcher {
+	private boolean caseSensitive;
+	private Pattern pattern;
+	
+
+	/**
+	 * @param caseSensitive
+	 * @param regexp
+	 */
+	public RegexpSearcher(boolean caseSensitive, String regexp) {
+		super();
+		this.caseSensitive = caseSensitive;
+		String newRegexp = ".*"+regexp+".*";
+		if(caseSensitive) {
+			pattern = Pattern.compile(newRegexp);
+		} else {
+			pattern = Pattern.compile(newRegexp.toLowerCase());
+		}
+	}
+
+
+	/* (non-Javadoc)
+	 * @see org.apache.jmeter.gui.action.ISearcher#search(java.util.List)
+	 */
+	@Override
+	public boolean search(List<String> textTokens) {
+		for (String searchableToken : textTokens) {
+			if(!StringUtils.isEmpty(searchableToken)) {
+				Matcher matcher = null; 
+				if(caseSensitive) {
+					matcher = pattern.matcher(searchableToken);
+				} else {
+					matcher = pattern.matcher(searchableToken.toLowerCase());
+				}
+				if(matcher.find()) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+}
\ No newline at end of file

Propchange: jmeter/trunk/src/core/org/apache/jmeter/gui/action/RegexpSearcher.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: jmeter/trunk/src/core/org/apache/jmeter/gui/action/SearchTreeCommand.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/gui/action/SearchTreeCommand.java?rev=1197425&r1=1197424&r2=1197425&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/gui/action/SearchTreeCommand.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/gui/action/SearchTreeCommand.java Fri Nov  4 08:34:07 2011
@@ -20,27 +20,13 @@ package org.apache.jmeter.gui.action;
 
 import java.awt.event.ActionEvent;
 import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
 import java.util.Set;
 
-import javax.swing.JOptionPane;
-
-import org.apache.commons.lang.StringUtils;
-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>();
 
@@ -53,39 +39,7 @@ public class SearchTreeCommand extends A
      */
     @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);
-        if(wordToSearch==null) {
-            return;
-        }
-        ActionRouter.getInstance().doActionNow(new ActionEvent(e.getSource(), e.getID(), ActionNames.SEARCH_RESET));
-        GuiPackage guiPackage = GuiPackage.getInstance();
-        JMeterTreeModel jMeterTreeModel = guiPackage.getTreeModel();
-        Set<JMeterTreeNode> nodes = new HashSet<JMeterTreeNode>();
-        for (JMeterTreeNode jMeterTreeNode : jMeterTreeModel.getNodesOfType(Searchable.class)) {
-            try {
-                if (jMeterTreeNode.getUserObject() instanceof Searchable){
-                    Searchable searchable = (Searchable) jMeterTreeNode.getUserObject();
-                    List<JMeterTreeNode> matchingNodes = jMeterTreeNode.getPathToThreadGroup();
-                    if(!StringUtils.isEmpty(wordToSearch)) {
-                        boolean result = searchable.searchContent(wordToSearch);
-                        if(result) {
-                            nodes.addAll(matchingNodes);
-                        }
-                    }
-                }
-            } catch (Exception ex) {
-                logger.error("Error occured searching for word:"+ wordToSearch, ex);
-            }
-        }
-        for (Iterator<JMeterTreeNode> iterator = nodes.iterator(); iterator.hasNext();) {
-            JMeterTreeNode jMeterTreeNode = iterator.next();
-            jMeterTreeNode.setMarkedBySearch(true);
-        }
-        GuiPackage.getInstance().getMainFrame().repaint();
+    	new SearchTreeDialog().setVisible(true);
     }
 
 

Added: jmeter/trunk/src/core/org/apache/jmeter/gui/action/SearchTreeDialog.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/gui/action/SearchTreeDialog.java?rev=1197425&view=auto
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/gui/action/SearchTreeDialog.java (added)
+++ jmeter/trunk/src/core/org/apache/jmeter/gui/action/SearchTreeDialog.java Fri Nov  4 08:34:07 2011
@@ -0,0 +1,146 @@
+/*
+ * 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.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+import org.apache.commons.lang.StringUtils;
+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.gui.ComponentUtil;
+import org.apache.jorphan.gui.JLabeledTextField;
+import org.apache.jorphan.logging.LoggingManager;
+import org.apache.log.Logger;
+
+/**
+ * 
+ */
+public class SearchTreeDialog extends JDialog implements ActionListener {
+    /**
+	 * 
+	 */
+	private static final long serialVersionUID = -4436834972710248247L;
+
+	private Logger logger = LoggingManager.getLoggerForClass();
+
+    private JButton searchButton;
+    
+	private JLabeledTextField searchTF;
+	
+	private JCheckBox isRegexpCB;
+
+	private JCheckBox isCaseSensitiveCB;
+
+	private JButton cancelButton;
+
+
+	public SearchTreeDialog() {
+        super((JFrame) null, JMeterUtils.getResString("search_tree_title"), true); //$NON-NLS-1$
+        init();
+    }
+
+    private void init() {
+        this.getContentPane().setLayout(new BorderLayout(10,10));
+
+        searchTF = new JLabeledTextField(JMeterUtils.getResString("search_text_field"), 20); //$NON-NLS-1$
+        isRegexpCB = new JCheckBox(JMeterUtils.getResString("search_text_chkbox_regexp"), false); //$NON-NLS-1$
+        isCaseSensitiveCB = new JCheckBox(JMeterUtils.getResString("search_text_chkbox_case"), false); //$NON-NLS-1$
+
+        JPanel searchCriterionPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
+        searchCriterionPanel.add(isCaseSensitiveCB);
+        searchCriterionPanel.add(isRegexpCB);
+        
+        this.getContentPane().add(searchTF, BorderLayout.NORTH);
+        this.getContentPane().add(searchCriterionPanel, BorderLayout.CENTER);
+        JPanel buttonsPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
+        
+        searchButton = new JButton(JMeterUtils.getResString("search")); //$NON-NLS-1$
+        searchButton.addActionListener(this);
+        cancelButton = new JButton(JMeterUtils.getResString("cancel")); //$NON-NLS-1$
+        cancelButton.addActionListener(this);
+        buttonsPanel.add(searchButton);
+        buttonsPanel.add(cancelButton);
+        this.getContentPane().add(buttonsPanel, BorderLayout.SOUTH);
+        this.pack();
+        ComponentUtil.centerComponentInWindow(this);
+    }
+
+
+    public void actionPerformed(ActionEvent e) {
+    	if(e.getSource()==cancelButton) {
+    		this.setVisible(false);
+    		return;
+    	} 
+    	
+    	String wordToSearch = searchTF.getText();
+    	if(StringUtils.isEmpty(wordToSearch)) {
+            return;
+        }
+    	
+    	// reset previous result
+    	ActionRouter.getInstance().doActionNow(new ActionEvent(e.getSource(), e.getID(), ActionNames.SEARCH_RESET));
+        // do search
+    	Searcher searcher = null; 
+    	if(isRegexpCB.isSelected()) {
+    		searcher = new RegexpSearcher(isCaseSensitiveCB.isSelected(), searchTF.getText());
+    	} else {
+    		searcher = new RawTextSearcher(isCaseSensitiveCB.isSelected(), searchTF.getText());
+    	}
+        GuiPackage guiPackage = GuiPackage.getInstance();
+        JMeterTreeModel jMeterTreeModel = guiPackage.getTreeModel();
+        Set<JMeterTreeNode> nodes = new HashSet<JMeterTreeNode>();
+        for (JMeterTreeNode jMeterTreeNode : jMeterTreeModel.getNodesOfType(Searchable.class)) {
+            try {
+                if (jMeterTreeNode.getUserObject() instanceof Searchable){
+                    Searchable searchable = (Searchable) jMeterTreeNode.getUserObject();
+                    List<JMeterTreeNode> matchingNodes = jMeterTreeNode.getPathToThreadGroup();
+                    List<String> searchableTokens = searchable.getSearchableTokens();
+                    boolean result = searcher.search(searchableTokens);
+                    if(result) {
+                        nodes.addAll(matchingNodes);
+                    }
+                }
+            } catch (Exception ex) {
+                logger.error("Error occured searching for word:"+ wordToSearch, ex);
+            }
+        }
+        for (Iterator<JMeterTreeNode> iterator = nodes.iterator(); iterator.hasNext();) {
+            JMeterTreeNode jMeterTreeNode = iterator.next();
+            jMeterTreeNode.setMarkedBySearch(true);
+        }
+        GuiPackage.getInstance().getMainFrame().repaint();
+        this.setVisible(false);
+    }
+}
\ No newline at end of file

Propchange: jmeter/trunk/src/core/org/apache/jmeter/gui/action/SearchTreeDialog.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: jmeter/trunk/src/core/org/apache/jmeter/gui/action/Searcher.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Searcher.java?rev=1197425&view=auto
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/gui/action/Searcher.java (added)
+++ jmeter/trunk/src/core/org/apache/jmeter/gui/action/Searcher.java Fri Nov  4 08:34:07 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.action;
+
+import java.util.List;
+
+/**
+ * Search algorithm
+ */
+public interface Searcher {
+
+	/**
+	 * Implements the search
+	 * @param textTokens List<String> content to be searched
+	 * @return true if search on textTokens is successful
+	 */
+	boolean search(List<String> textTokens);
+}

Propchange: jmeter/trunk/src/core/org/apache/jmeter/gui/action/Searcher.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=1197425&r1=1197424&r2=1197425&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties Fri Nov  4 08:34:07 2011
@@ -773,7 +773,7 @@ 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
+search=Search
 searchbase=Search base
 searchfilter=Search Filter
 searchtest=Search test

Modified: jmeter/trunk/src/core/org/apache/jmeter/testelement/AbstractScopedTestElement.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/testelement/AbstractScopedTestElement.java?rev=1197425&r1=1197424&r2=1197425&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/testelement/AbstractScopedTestElement.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/testelement/AbstractScopedTestElement.java Fri Nov  4 08:34:07 2011
@@ -157,18 +157,13 @@ public abstract class AbstractScopedTest
         return sampleList;
     }
     
-    /**
-     * {@inheritDoc}
+    /** 
+     * {@inheritDoc}}
      */
     @Override
-    public boolean searchContent(String textToSearch) throws Exception {
-        if(super.searchContent(textToSearch)) {
-            return true;
-        }
-        String searchedTextLowerCase = textToSearch.toLowerCase();
-        if(testField(getVariableName(), searchedTextLowerCase)) {
-            return true;
-        }
-        return false;
+    public List<String> getSearchableTokens() throws Exception {
+        List<String> result = super.getSearchableTokens();
+        result.add(getVariableName());
+        return result;
     }
 }

Modified: jmeter/trunk/src/core/org/apache/jmeter/testelement/AbstractTestElement.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/testelement/AbstractTestElement.java?rev=1197425&r1=1197424&r2=1197425&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/testelement/AbstractTestElement.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/testelement/AbstractTestElement.java Fri Nov  4 08:34:07 2011
@@ -19,14 +19,15 @@
 package org.apache.jmeter.testelement;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
-import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.lang.StringUtils;
 import org.apache.jmeter.gui.Searchable;
 import org.apache.jmeter.testelement.property.BooleanProperty;
 import org.apache.jmeter.testelement.property.CollectionProperty;
@@ -524,30 +525,13 @@ public abstract class AbstractTestElemen
         return getProperty(TestElement.ENABLED) instanceof NullProperty || getPropertyAsBoolean(TestElement.ENABLED);
     }
     
-    /**
-     * {@inheritDoc}
+    /** 
+     * {@inheritDoc}}
      */
-    public boolean searchContent(String textToSearch) throws Exception {
-        String searchedTextLowerCase = textToSearch.toLowerCase();
-        if(testField(getComment(), searchedTextLowerCase)) {
-            return true;
-        }
-        if(testField(getName(), searchedTextLowerCase)) {
-            return true;
-        }
-        return false;
-    }
-    
-    /**
-     * Returns true if searchedTextLowerCase is in value
-     * @param value
-     * @param searchedTextLowerCase
-     * @return true if searchedTextLowerCase is in value
-     */
-    protected boolean testField(String value, String searchedTextLowerCase) {
-        if(!StringUtils.isEmpty(value)) {
-            return value.toLowerCase().indexOf(searchedTextLowerCase)>=0;
-        }
-        return false;
+    public List<String> getSearchableTokens() throws Exception {
+        List<String> result = new ArrayList<String>(2);
+        result.add(getComment());
+        result.add(getName());
+        return result;
     }
 }

Modified: jmeter/trunk/src/core/org/apache/jmeter/util/BeanShellTestElement.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/util/BeanShellTestElement.java?rev=1197425&r1=1197424&r2=1197425&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/util/BeanShellTestElement.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/util/BeanShellTestElement.java Fri Nov  4 08:34:07 2011
@@ -19,6 +19,7 @@
 package org.apache.jmeter.util;
 
 import java.io.Serializable;
+import java.util.List;
 
 import org.apache.jmeter.engine.event.LoopIterationEvent;
 import org.apache.jmeter.testelement.AbstractTestElement;
@@ -27,8 +28,6 @@ import org.apache.jmeter.testelement.Thr
 import org.apache.jmeter.threads.JMeterContext;
 import org.apache.jmeter.threads.JMeterContextService;
 import org.apache.jmeter.threads.JMeterVariables;
-import org.apache.jmeter.util.BeanShellInterpreter;
-import org.apache.jmeter.util.JMeterUtils;
 import org.apache.jorphan.logging.LoggingManager;
 import org.apache.jorphan.util.JMeterException;
 import org.apache.jorphan.util.JOrphanUtils;
@@ -280,18 +279,13 @@ public abstract class BeanShellTestEleme
         resetInterpreter = b;
     }
     
-    /**
-     * {@inheritDoc}
+    /** 
+     * {@inheritDoc}}
      */
     @Override
-    public boolean searchContent(String textToSearch) throws Exception {
-        if(super.searchContent(textToSearch)) {
-            return true;
-        }
-        String searchedTextLowerCase = textToSearch.toLowerCase();
-        if(testField(getScript(), searchedTextLowerCase)) {
-            return true;
-        }
-        return false;
+    public List<String> getSearchableTokens() throws Exception {
+        List<String> result = super.getSearchableTokens();
+        result.add(getScript());
+        return result;
     }
 }

Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java?rev=1197425&r1=1197424&r2=1197425&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java (original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java Fri Nov  4 08:34:07 2011
@@ -1815,33 +1815,23 @@ public abstract class HTTPSamplerBase ex
         }
     }
     
-    /**
+    
+    /** 
      * We search in URL and arguments
-     * TODO Can be enhanced
-     * {@inheritDoc}
+     * {@inheritDoc}}
      */
     @Override
-    public boolean searchContent(String textToSearch) throws Exception {
-        if(super.searchContent(textToSearch)) {
-            return true;
-        }
-        String searchedTextLowerCase = textToSearch.toLowerCase();
-        if(testField(getUrl().toString(), searchedTextLowerCase)) {
-            return true;
-        }
+    public List<String> getSearchableTokens() throws Exception {
+        List<String> result = super.getSearchableTokens();
+        result.add(getUrl().toExternalForm());
         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;
-                }
+                result.add(argument.getName());
+                result.add(argument.getValue());
             }
         }
-        return false;
+        return result;
     }
- }
-
+}
\ No newline at end of file