Author: sebb Date: Wed Sep 9 23:02:00 2009 New Revision: 813160 URL: http://svn.apache.org/viewvc?rev=813160&view=rev Log: Bug 36726 - add search function to Tree View Listener
Added: jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SearchTextExtension.java (with props) Modified: jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.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/xdocs/changes.xml Added: jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SearchTextExtension.java URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SearchTextExtension.java?rev=813160&view=auto ============================================================================== --- jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SearchTextExtension.java (added) +++ jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SearchTextExtension.java Wed Sep 9 23:02:00 2009 @@ -0,0 +1,359 @@ +/* + * 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.visualizers; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.swing.AbstractAction; +import javax.swing.ActionMap; +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.InputMap; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComponent; +import javax.swing.JEditorPane; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.KeyStroke; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.text.BadLocationException; +import javax.swing.text.DefaultHighlighter; +import javax.swing.text.Document; +import javax.swing.text.Highlighter; + +import org.apache.jmeter.util.JMeterUtils; +import org.apache.jorphan.logging.LoggingManager; +import org.apache.log.Logger; + +public class SearchTextExtension implements ActionListener, DocumentListener { + + private static final Logger log = LoggingManager.getLoggerForClass(); + + public static final String SEARCH_TEXT_COMMAND = "search_text"; // $NON-NLS-1$ + + public static final String DIALOG_SEARCH_SHOW_COMMAND = "show_search_dialog"; // $NON-NLS-1$ + + public static final String DIALOG_SEARCH_HIDE_COMMAND = "close_search_dialog"; // $NON-NLS-1$ + + private static final String SEARCH_SHOW_COMMAND = "show_search_text"; // $NON-NLS-1$ + + // set default command to Text + private String command = DIALOG_SEARCH_SHOW_COMMAND; + + private static int LAST_POSITION_DEFAULT = 0; + + private int lastPosition = LAST_POSITION_DEFAULT; + + private final static Color HILIT_COLOR = Color.LIGHT_GRAY; + + private Highlighter selection; + + private Highlighter.HighlightPainter painter; + + private JLabel label; + + private JButton findButton; + + private JTextField textToFindField; + + private JCheckBox caseChkBox; + + private JCheckBox regexpChkBox; + + private String lastTextTofind; + + private boolean newSearch = false; + + private JEditorPane results; + + private JPanel searchPanel; + + private boolean enabled = true; + + private JCheckBox showSearch; + + + public void init(JPanel resultsPane) { + // when CTRL-T is pressed, (un-)show search dialog box (only in results pane) + InputMap im = resultsPane + .getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); + im.put(KeyStroke.getKeyStroke(KeyEvent.VK_T, + InputEvent.CTRL_MASK), SEARCH_SHOW_COMMAND); + ActionMap am = resultsPane.getActionMap(); + am.put(SEARCH_SHOW_COMMAND, new DisplaySearchAction()); + } + + public void setResults(JEditorPane results) { + if (this.results != null) { + newSearch = true; + resetTextToFind(); + } + this.results = results; + // prepare highlighter to show text find with search command + selection = new DefaultHighlighter(); + painter = new DefaultHighlighter.DefaultHighlightPainter(HILIT_COLOR); + results.setHighlighter(selection); + } + + /** + * Launch find text engine on response text + */ + public void executeAndShowTextFind() { + if (results != null && results.getText().length() > 0 + && this.textToFindField.getText().length() > 0) { + String textToFind = textToFindField.getText(); + + // new search? + if (lastTextTofind != null && !lastTextTofind.equals(textToFind)) { + lastPosition = LAST_POSITION_DEFAULT; + } + + log.debug("lastPosition=" + lastPosition); + Matcher matcher = null; + try { + Pattern pattern = createPattern(textToFind); + Document contentDoc = results.getDocument(); + String body = contentDoc.getText(lastPosition, + (contentDoc.getLength() - lastPosition)); + matcher = pattern.matcher(body); + + if ((matcher != null) && (matcher.find())) { + selection.removeAllHighlights(); + selection.addHighlight(lastPosition + matcher.start(), + lastPosition + matcher.end(), painter); + results.setCaretPosition(lastPosition + matcher.end()); + + // save search position + lastPosition = lastPosition + matcher.end(); + findButton.setText(JMeterUtils + .getResString("search_text_button_next"));// $NON-NLS-1$ + lastTextTofind = textToFind; + newSearch = true; + } else { + // Display not found message and reset search + JOptionPane.showMessageDialog(null, JMeterUtils + .getResString("search_text_msg_not_found"),// $NON-NLS-1$ + JMeterUtils.getResString("search_text_title_not_found"), // $NON-NLS-1$ + JOptionPane.INFORMATION_MESSAGE); + lastPosition = LAST_POSITION_DEFAULT; + findButton.setText(JMeterUtils + .getResString("search_text_button_find"));// $NON-NLS-1$ + results.setCaretPosition(0); + } + } catch (BadLocationException ble) { + log.error("Location exception in text find", ble);// $NON-NLS-1$ + } + } + } + + /** + * Create the text find task pane + * + * @return Text find task pane + */ + public JPanel createSearchTextPanel() { + Font font = new Font("SansSerif", Font.PLAIN, 10); + + // Search field + searchPanel = new JPanel(); + searchPanel.setLayout(new BoxLayout(searchPanel, BoxLayout.X_AXIS)); + searchPanel.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3)); + label = new JLabel(JMeterUtils.getResString("search_text_field")); // $NON-NLS-1$ + label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); + searchPanel.add(label); + textToFindField = new JTextField(); // $NON-NLS-1$ + searchPanel.add(textToFindField); + searchPanel.add(Box.createRigidArea(new Dimension(5,0))); + + // add listener to intercept texttofind changes and reset search + textToFindField.getDocument().addDocumentListener(this); + + // Buttons + findButton = new JButton(JMeterUtils + .getResString("search_text_button_find")); // $NON-NLS-1$ + findButton.setFont(font); + findButton.setActionCommand(SEARCH_TEXT_COMMAND); + findButton.addActionListener(this); + searchPanel.add(findButton); + + // checkboxes + caseChkBox = new JCheckBox(JMeterUtils + .getResString("search_text_chkbox_case"), false); // $NON-NLS-1$ + caseChkBox.setFont(font); + searchPanel.add(caseChkBox); + regexpChkBox = new JCheckBox(JMeterUtils + .getResString("search_text_chkbox_regexp"), false); // $NON-NLS-1$ + regexpChkBox.setFont(font); + searchPanel.add(regexpChkBox); + + // when Enter is pressed, search start + InputMap im = textToFindField + .getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); + im.put(KeyStroke.getKeyStroke("ENTER"), SEARCH_TEXT_COMMAND); + ActionMap am = textToFindField.getActionMap(); + am.put(SEARCH_TEXT_COMMAND, new EnterAction()); + + return searchPanel; + } + + public JPanel createSearchTextExtensionPane() { + JPanel pane = new JPanel(); + pane.setLayout(new BoxLayout(pane, BoxLayout.X_AXIS)); + pane.add(createShowSearchPanel()); + pane.add(createSearchTextPanel()); + return pane; + } + + public JPanel createShowSearchPanel() { + Font fontBold = new Font("SansSerif", Font.BOLD, 10); + + showSearch = new JCheckBox(); + showSearch.setFont(fontBold); + showSearch.setAction(new DisplaySearchAction()); + showSearch.setText(JMeterUtils + .getResString("view_results_search_pane")); // $NON-NLS-1$ + + JPanel pane = new JPanel(); + pane.setLayout(new BoxLayout(pane, BoxLayout.X_AXIS)); + pane.add(showSearch); + + return pane; + } + + + /** + * Display the response as text or as rendered HTML. Change the text on the + * button appropriate to the current display. + * + * @param e + * the ActionEvent being processed + */ + public void actionPerformed(ActionEvent e) { + command = e.getActionCommand(); + + // Search text in response data + if (command != null + && (command.equals(SearchTextExtension.SEARCH_TEXT_COMMAND))) { + executeAndShowTextFind(); + } + // hide search dialog box + else if (command != null && command.equals( + SearchTextExtension.DIALOG_SEARCH_HIDE_COMMAND)) { + hideSearchBox(); + } + } + + private class EnterAction extends AbstractAction { + private static final long serialVersionUID = 1L; + public void actionPerformed(ActionEvent ev) { + executeAndShowTextFind(); + } + } + + private class DisplaySearchAction extends AbstractAction { + private static final long serialVersionUID = 1L; + public void actionPerformed(ActionEvent ev) { + if (searchPanel != null) { + resetTextToFind(); + if (searchPanel.isVisible()) { + searchPanel.setVisible(false); + showSearch.setSelected(false); + } else { + searchPanel.setVisible(true); + showSearch.setSelected(true); + } + } + } + } + + // DocumentListener method + public void changedUpdate(DocumentEvent e) { + // do nothing + } + + // DocumentListener method + public void insertUpdate(DocumentEvent e) { + resetTextToFind(); + } + + // DocumentListener method + public void removeUpdate(DocumentEvent e) { + resetTextToFind(); + } + + public void hideSearchBox() { + searchPanel.setVisible(false); + } + + public void resetTextToFind() { + if (newSearch) { + log.debug("reset pass"); + // Reset search + lastPosition = LAST_POSITION_DEFAULT; + lastTextTofind = null; + findButton.setText(JMeterUtils + .getResString("search_text_button_find"));// $NON-NLS-1$ + selection.removeAllHighlights(); + results.setCaretPosition(0); + newSearch = false; + } + } + + public boolean isEnabled() { + return enabled ; + } + + public void setEnabled(boolean b) { + this.enabled = b; + label.setEnabled(b); + textToFindField.setEnabled(b); + findButton.setEnabled(b); + caseChkBox.setEnabled(b); + regexpChkBox.setEnabled(b); + } + + private Pattern createPattern(String textToFind) { + // desactivate or not specials regexp char + String textToFindQ = Pattern.quote(textToFind); + if (regexpChkBox.isSelected()) { + textToFindQ = textToFind; + } + Pattern pattern = null; + if (caseChkBox.isSelected()) { + pattern = Pattern.compile(textToFindQ); + } else { + pattern = Pattern.compile(textToFindQ, Pattern.CASE_INSENSITIVE); + } + return pattern; + } +} Propchange: jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SearchTextExtension.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SearchTextExtension.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Modified: jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java?rev=813160&r1=813159&r2=813160&view=diff ============================================================================== --- jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java (original) +++ jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java Wed Sep 9 23:02:00 2009 @@ -22,9 +22,12 @@ import java.awt.Color; import java.awt.Component; import java.awt.Dimension; +import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; import java.io.ByteArrayInputStream; import java.io.StringWriter; import java.text.DateFormat; @@ -33,11 +36,17 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.swing.AbstractAction; +import javax.swing.ActionMap; import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.BoxLayout; import javax.swing.ButtonGroup; import javax.swing.Icon; import javax.swing.ImageIcon; +import javax.swing.InputMap; import javax.swing.JCheckBox; +import javax.swing.JComponent; import javax.swing.JEditorPane; import javax.swing.JLabel; import javax.swing.JOptionPane; @@ -49,6 +58,7 @@ import javax.swing.JTextArea; import javax.swing.JTextPane; import javax.swing.JTree; +import javax.swing.KeyStroke; import javax.swing.ToolTipManager; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; @@ -182,11 +192,17 @@ private JRadioButton xmlButton; private JCheckBox downloadAll; + + private JLabel renderLabel; private JTree jTree; private JTabbedPane rightSide; + private SearchTextExtension searchTextExtension; + + private JPanel searchPanel = null; + private static final ImageIcon imageSuccess = JMeterUtils.getImage( JMeterUtils.getPropDefault("viewResultsTree.success", //$NON-NLS-1$ "icon_success_sml.gif")); //$NON-NLS-1$ @@ -408,6 +424,9 @@ statsDoc.insertString(statsDoc.getLength(), statsBuff.toString(), null); statsBuff = null; // Done + // Reset search + searchTextExtension.resetTextToFind(); + // get the text response and image icon // to determine which is NOT null if ((SampleResult.TEXT).equals(res.getDataType())) // equals(null) is OK @@ -422,10 +441,16 @@ } else if (command.equals(XML_COMMAND)) { showRenderXMLResponse(res); } + if (!searchTextExtension.isEnabled()) { + searchTextExtension.setEnabled(true); + } } else { byte[] responseBytes = res.getResponseData(); if (responseBytes != null) { showImage(new ImageIcon(responseBytes)); //TODO implement other non-text types + if (searchTextExtension.isEnabled()) { + searchTextExtension.setEnabled(false); + } } } } @@ -457,10 +482,7 @@ private void showImage(Icon image) { imageLabel.setIcon(image); resultsScrollPane.setViewportView(imageLabel); - textButton.setEnabled(false); - htmlButton.setEnabled(false); - jsonButton.setEnabled(false); - xmlButton.setEnabled(false); + setEnabledButtons(false); } private void showTextResponse(String response) { @@ -469,10 +491,7 @@ results.setCaretPosition(0); resultsScrollPane.setViewportView(results); - textButton.setEnabled(true); - htmlButton.setEnabled(true); - jsonButton.setEnabled(true); - xmlButton.setEnabled(true); + setEnabledButtons(true); } // It might be useful also to make this available in the 'Request' tab, for @@ -536,10 +555,7 @@ results.setCaretPosition(0); resultsScrollPane.setViewportView(results); - textButton.setEnabled(true); - htmlButton.setEnabled(true); - jsonButton.setEnabled(true); - xmlButton.setEnabled(true); + setEnabledButtons(true); } private void showRenderXMLResponse(SampleResult res) { @@ -571,10 +587,7 @@ JPanel domTreePanel = new DOMTreePanel(document); view = domTreePanel; resultsScrollPane.setViewportView(view); - textButton.setEnabled(true); - htmlButton.setEnabled(true); - jsonButton.setEnabled(true); - xmlButton.setEnabled(true); + setEnabledButtons(true); } private static String getResponseAsString(SampleResult res) { @@ -623,7 +636,8 @@ results.setText(""); return; } - + searchTextExtension.resetTextToFind(); + SampleResult res = (SampleResult) node.getUserObject(); String response = getResponseAsString(res); @@ -688,47 +702,61 @@ results.setCaretPosition(0); resultsScrollPane.setViewportView(results); - textButton.setEnabled(true); - htmlButton.setEnabled(true); - jsonButton.setEnabled(true); - xmlButton.setEnabled(true); + setEnabledButtons(true); } private Component createHtmlOrTextPane() { ButtonGroup group = new ButtonGroup(); + Font font = new Font("SansSerif", Font.PLAIN, 10); + Font fontBold = new Font("SansSerif", Font.BOLD, 10); + + renderLabel = new JLabel(JMeterUtils + .getResString("view_results_render")); // $NON-NLS-1$ + renderLabel.setFont(fontBold); textButton = new JRadioButton(JMeterUtils.getResString("view_results_render_text")); // $NON-NLS-1$ + textButton.setFont(font); textButton.setActionCommand(TEXT_COMMAND); textButton.addActionListener(this); textButton.setSelected(textMode); group.add(textButton); htmlButton = new JRadioButton(JMeterUtils.getResString("view_results_render_html")); // $NON-NLS-1$ + htmlButton.setFont(font); htmlButton.setActionCommand(HTML_COMMAND); htmlButton.addActionListener(this); htmlButton.setSelected(!textMode); group.add(htmlButton); jsonButton = new JRadioButton(JMeterUtils.getResString("view_results_render_json")); // $NON-NLS-1$ + jsonButton.setFont(font); jsonButton.setActionCommand(JSON_COMMAND); jsonButton.addActionListener(this); jsonButton.setSelected(!textMode); group.add(jsonButton); xmlButton = new JRadioButton(JMeterUtils.getResString("view_results_render_xml")); // $NON-NLS-1$ + xmlButton.setFont(font); xmlButton.setActionCommand(XML_COMMAND); xmlButton.addActionListener(this); xmlButton.setSelected(!textMode); group.add(xmlButton); downloadAll = new JCheckBox(JMeterUtils.getResString("view_results_render_embedded")); // $NON-NLS-1$ - + downloadAll.setFont(font); + JPanel pane = new JPanel(); + pane.setLayout(new BoxLayout(pane, BoxLayout.X_AXIS)); + pane.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3)); + pane.add(searchTextExtension.createShowSearchPanel()); + pane.add(Box.createRigidArea(new Dimension(30, 0))); + pane.add(renderLabel); pane.add(textButton); pane.add(htmlButton); pane.add(xmlButton); pane.add(jsonButton); pane.add(downloadAll); + return pane; } @@ -751,6 +779,8 @@ JSplitPane mainSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftSide, rightSide); add(mainSplit, BorderLayout.CENTER); + + searchTextExtension.init(resultsPane); } private void setupTabPaneForSampleResult() { @@ -838,13 +868,35 @@ resultsScrollPane = makeScrollPane(results); imageLabel = new JLabel(); + // Add search text extension + searchTextExtension = new SearchTextExtension(); + searchPanel = searchTextExtension.createSearchTextPanel(); + searchTextExtension.setResults(results); + searchPanel.setVisible(false); + JPanel panelSouth = new JPanel(new BorderLayout()); + panelSouth.add(createHtmlOrTextPane(), BorderLayout.CENTER); + panelSouth.add(searchPanel, BorderLayout.SOUTH); + JPanel panel = new JPanel(new BorderLayout()); panel.add(resultsScrollPane, BorderLayout.CENTER); - panel.add(createHtmlOrTextPane(), BorderLayout.SOUTH); + panel.add(panelSouth, BorderLayout.SOUTH); return panel; } + private void setEnabledButtons(boolean b) { + renderLabel.setEnabled(b); + textButton.setEnabled(b); + htmlButton.setEnabled(b); + jsonButton.setEnabled(b); + xmlButton.setEnabled(b); + if (b && command.equals(HTML_COMMAND)) { + downloadAll.setEnabled(b); + } else { + downloadAll.setEnabled(false); + } + } + private static class ResultsNodeRenderer extends DefaultTreeCellRenderer { @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, 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=813160&r1=813159&r2=813160&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 Wed Sep 9 23:02:00 2009 @@ -721,6 +721,14 @@ search_base=Search base search_filter=Search Filter search_test=Search Test +search_text_button_close=Close +search_text_button_find=Find +search_text_button_next=Find next +search_text_chkbox_case=Case sensitive +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 searchbase=Search base searchfilter=Search Filter searchtest=Search test @@ -874,11 +882,12 @@ view_results_in_table=View Results in Table view_results_latency=Latency: view_results_load_time=Load time: +view_results_render=Render: view_results_render_embedded=Download embedded resources -view_results_render_html=Render HTML -view_results_render_json=Render JSON -view_results_render_text=Show Text -view_results_render_xml=Render XML +view_results_render_html=HTML +view_results_render_json=JSON +view_results_render_text=Text +view_results_render_xml=XML view_results_request_headers=Request Headers: view_results_response_code=Response code: view_results_response_headers=Response headers: @@ -886,6 +895,7 @@ view_results_response_too_large_message=Response too large to be displayed. Size: view_results_sample_count=Sample Count: view_results_sample_start=Sample Start: +view_results_search_pane=Search pane view_results_size_in_bytes=Size in bytes: view_results_tab_assertion=Assertion result view_results_tab_request=Request 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=813160&r1=813159&r2=813160&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 Wed Sep 9 23:02:00 2009 @@ -579,6 +579,14 @@ search_base=Base de recherche search_filter=Filtre de recherche search_test=Recherche +search_text_button_close=Fermer +search_text_button_find=Rechercher +search_text_button_next=Suivant +search_text_chkbox_case=Consid\u00E9rer la casse +search_text_chkbox_regexp=Exp. reguli\u00E8re +search_text_field=Rechercher \: +search_text_msg_not_found=Text non trouv\u00E9 +search_text_title_not_found=Pas trouv\u00E9 second=seconde secure=S\u00E9curis\u00E9 \: send_file=Envoyer un fichier avec la requ\u00EAte \: @@ -719,11 +727,12 @@ view_results_in_table=Tableau de r\u00E9sultats view_results_latency=Latence \: view_results_load_time=Temps de r\u00E9ponse \: +view_results_render=Rendu \: view_results_render_embedded=T\u00E9l\u00E9charger les ressources incluses -view_results_render_html=Afficher en HTML -view_results_render_json=Afficher en JSON -view_results_render_text=Afficher en texte brut -view_results_render_xml=Afficher en XML +view_results_render_html=HTML +view_results_render_json=JSON +view_results_render_text=Texte brut +view_results_render_xml=XML view_results_request_headers=Ent\u00EAtes de requ\u00EAte \: view_results_response_code=Code HTTP de r\u00E9ponse \: view_results_response_headers=Ent\u00EAtes de r\u00E9ponse \: @@ -731,6 +740,7 @@ view_results_response_too_large_message=R\u00E9ponse d\u00E9passant la taille maximale d'affichage. Taille \: view_results_sample_count=Compteur \u00E9chantillon \: view_results_sample_start=Date d\u00E9but \u00E9chantillon \: +view_results_search_pane=Volet recherche view_results_size_in_bytes=Taille en octets \: view_results_tab_assertion=R\u00E9sultats d'assertion view_results_tab_request=Requ\u00EAte Modified: jakarta/jmeter/trunk/xdocs/changes.xml URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=813160&r1=813159&r2=813160&view=diff ============================================================================== --- jakarta/jmeter/trunk/xdocs/changes.xml (original) +++ jakarta/jmeter/trunk/xdocs/changes.xml Wed Sep 9 23:02:00 2009 @@ -125,6 +125,7 @@ <li>Bug 47398 - SampleEvents are sent twice over RMI in distributed testing and non gui mode</li> <li>Added DataStrippingSample sender - supports "Stripped" and "StrippedBatch" modes.</li> <li>Added Comparison Assertion Visualizer</li> +<li>Bug 36726 - add search function to Tree View Listener</li> </ul> <h3>Assertions, Config, Pre- & Post-Processors</h3> --------------------------------------------------------------------- To unsubscribe, e-mail: jmeter-dev-unsubscr...@jakarta.apache.org For additional commands, e-mail: jmeter-dev-h...@jakarta.apache.org