--- src/core/org/apache/jmeter/resources/messages.properties (revision 1021534) +++ src/core/org/apache/jmeter/resources/messages.properties (working copy) @@ -989,6 +989,20 @@ view_results_table_fields_value=Value view_results_table_headers_key=Response header view_results_table_headers_value=Value +view_results_table_request_headers_key=Request header +view_results_table_request_headers_value=Value +view_results_table_request_http_cookie=Cookie +view_results_table_request_http_host=Host +view_results_table_request_http_method=Method +view_results_table_request_http_nohttp=No HTTP Sample +view_results_table_request_http_path=Path +view_results_table_request_http_port=Port +view_results_table_request_http_protocol=Protocol +view_results_table_request_raw_nodata=No data to display +view_results_table_request_params_key=Parameter name +view_results_table_request_params_value=Value +view_results_table_request_tab_http=HTTP +view_results_table_request_tab_raw=Raw view_results_table_result_tab_parsed=Parsed view_results_table_result_tab_raw=Raw view_results_thread_name=Thread Name: --- src/core/org/apache/jmeter/resources/messages_fr.properties (revision 1021534) +++ src/core/org/apache/jmeter/resources/messages_fr.properties (working copy) @@ -886,6 +886,20 @@ view_results_table_fields_value=Valeur view_results_table_headers_key=Ent\u00EAte de r\u00E9ponse view_results_table_headers_value=Valeur +view_results_table_request_headers_key=Ent\u00EAte de r\u00E9qu\u00EAte +view_results_table_request_headers_value=Valeur +view_results_table_request_http_cookie=Cookie +view_results_table_request_http_host=H\u00F4te +view_results_table_request_http_method=M\u00E9thode +view_results_table_request_http_nohttp=N'est pas un \u00E9chantillon HTTP +view_results_table_request_http_path=Cheming +view_results_table_request_http_port=Port +view_results_table_request_http_protocol=Protocole +view_results_table_request_raw_nodata=Pas de donn\u00E9es \u00E0 afficher +view_results_table_request_params_key=Nom de param\u00E8tre +view_results_table_request_params_value=Valeur +view_results_table_request_tab_http=HTTP +view_results_table_request_tab_raw=Brut view_results_table_result_tab_parsed=D\u00E9cod\u00E9 view_results_table_result_tab_raw=Brut view_results_thread_name=Nom d'unit\u00E9 \: --- src/core/org/apache/jmeter/util/JMeterUtils.java (revision 1006011) +++ src/core/org/apache/jmeter/util/JMeterUtils.java (working copy) @@ -33,6 +33,7 @@ import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.MissingResourceException; @@ -46,7 +47,6 @@ import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JOptionPane; -// import javax.xml.parsers.SAXParserFactory; import org.apache.commons.io.IOUtils; import org.apache.jmeter.gui.GuiPackage; @@ -464,6 +464,18 @@ } /** + * To get I18N label from properties file + * + * @param key + * in messages.properties + * @return I18N label without (if exists) last colon ':' and spaces + */ + public static String getParsedLabel(String key) { + String value = JMeterUtils.getResString(key); + return value.replaceFirst("(?m)\\s*?:\\s*$", ""); // $NON-NLS-1$ $NON-NLS-2$ + } + + /** * Get the locale name as a resource. * Does not log an error if the resource does not exist. * This is needed to support additional locales, as they won't be in existing messages files. @@ -1202,4 +1214,27 @@ localHostName=localHost.getHostName(); localHostFullName=localHost.getCanonicalHostName(); } + + /** + * Split line into name/value pairs and remove colon ':' + * + * @param headers + * multi-line string headers + * @return a map name/value for each header + */ + public static LinkedHashMap parseHeaders(String headers) { + LinkedHashMap linkedHeaders = new LinkedHashMap(); + String[] list = headers.split("\n"); // $NON-NLS-1$ + for (String header : list) { + int colon = header.indexOf(':'); // $NON-NLS-1$ + if (colon <= 0) { + linkedHeaders.put(header, ""); // Empty value // $NON-NLS-1$ + } else { + linkedHeaders.put(header.substring(0, colon).trim(), header + .substring(colon + 1).trim()); + } + } + return linkedHeaders; + } + } --- src/components/org/apache/jmeter/visualizers/SamplerResultTab.java (revision 1021534) +++ src/components/org/apache/jmeter/visualizers/SamplerResultTab.java (working copy) @@ -38,7 +38,6 @@ import javax.swing.JSplitPane; import javax.swing.JTabbedPane; import javax.swing.JTable; -import javax.swing.JTextArea; import javax.swing.JTextPane; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; @@ -57,6 +56,10 @@ import org.apache.jorphan.gui.RendererUtils; import org.apache.jorphan.reflect.Functor; +/** + * Right side in View Results Tree + * + */ public abstract class SamplerResultTab implements ResultRenderer { // N.B. these are not multi-threaded, so don't make it static @@ -71,6 +74,8 @@ public static final Color REDIRECT_COLOR = Color.green; protected static final String TEXT_COMMAND = "text"; // $NON-NLS-1$ + + protected static final String REQUEST_VIEW_COMMAND = "change_request_view"; // $NON-NLS-1$ private static final String STYLE_SERVER_ERROR = "ServerError"; // $NON-NLS-1$ @@ -86,9 +91,7 @@ private JLabel imageLabel; - private JPanel requestPane; - - private JTextArea sampleDataField; /** request pane content */ + private RequestPanel requestPanel; /** request pane content */ protected JTabbedPane rightSide; /** holds the tabbed panes */ @@ -187,13 +190,13 @@ public void clearData() { results.setText("");// Response Data // $NON-NLS-1$ - sampleDataField.setText("");// Request Data // $NON-NLS-1$ + requestPanel.clearData();// Request Data // $NON-NLS-1$ } public void init() { rightSide.addTab(JMeterUtils.getResString("view_results_tab_sampler"), createResponseMetadataPanel()); // $NON-NLS-1$ // Create the panels for the other tabs - requestPane = createRequestPanel(); + requestPanel = new RequestPanel(); resultsPane = createResponseDataPanel(); } @@ -201,29 +204,15 @@ public void setupTabPane() { StyledDocument statsDoc = stats.getStyledDocument(); try { + // Clear data before display a new statsDoc.remove(0, statsDoc.getLength()); - sampleDataField.setText(""); // $NON-NLS-1$ + requestPanel.clearData(); results.setText(""); // $NON-NLS-1$ if (userObject instanceof SampleResult) { sampleResult = (SampleResult) userObject; // We are displaying a SampleResult setupTabPaneForSampleResult(); - - // load time label - String sd = sampleResult.getSamplerData(); - if (sd != null) { - String rh = sampleResult.getRequestHeaders(); - if (rh != null) { - StringBuilder sb = new StringBuilder(sd.length() + rh.length() + 20); - sb.append(sd); - sb.append("\n"); //$NON-NLS-1$ - sb.append(JMeterUtils.getResString("view_results_request_headers")); //$NON-NLS-1$ - sb.append("\n"); //$NON-NLS-1$ - sb.append(rh); - sd = sb.toString(); - } - sampleDataField.setText(sd); - } + requestPanel.setSamplerResult(sampleResult); final String samplerClass = sampleResult.getClass().getName(); String typeResult = samplerClass.substring(1 + samplerClass.lastIndexOf('.')); @@ -285,19 +274,19 @@ // Tabbed results resultModel.clearData(); // clear results table before filling // fill table - resultModel.addRow(new RowResult(getParsedLabel("view_results_thread_name"), sampleResult.getThreadName())); //$NON-NLS-1$ - resultModel.addRow(new RowResult(getParsedLabel("view_results_sample_start"), startTime)); //$NON-NLS-1$ - resultModel.addRow(new RowResult(getParsedLabel("view_results_load_time"), sampleResult.getTime())); //$NON-NLS-1$ - resultModel.addRow(new RowResult(getParsedLabel("view_results_latency"), sampleResult.getLatency())); //$NON-NLS-1$ - resultModel.addRow(new RowResult(getParsedLabel("view_results_size_in_bytes"), sampleResult.getBytes())); //$NON-NLS-1$ - resultModel.addRow(new RowResult(getParsedLabel("view_results_sample_count"), sampleResult.getSampleCount())); //$NON-NLS-1$ - resultModel.addRow(new RowResult(getParsedLabel("view_results_error_count"), sampleResult.getErrorCount())); //$NON-NLS-1$ - resultModel.addRow(new RowResult(getParsedLabel("view_results_response_code"), responseCode)); //$NON-NLS-1$ - resultModel.addRow(new RowResult(getParsedLabel("view_results_response_message"), responseMsgStr)); //$NON-NLS-1$ + resultModel.addRow(new RowResult(JMeterUtils.getParsedLabel("view_results_thread_name"), sampleResult.getThreadName())); //$NON-NLS-1$ + resultModel.addRow(new RowResult(JMeterUtils.getParsedLabel("view_results_sample_start"), startTime)); //$NON-NLS-1$ + resultModel.addRow(new RowResult(JMeterUtils.getParsedLabel("view_results_load_time"), sampleResult.getTime())); //$NON-NLS-1$ + resultModel.addRow(new RowResult(JMeterUtils.getParsedLabel("view_results_latency"), sampleResult.getLatency())); //$NON-NLS-1$ + resultModel.addRow(new RowResult(JMeterUtils.getParsedLabel("view_results_size_in_bytes"), sampleResult.getBytes())); //$NON-NLS-1$ + resultModel.addRow(new RowResult(JMeterUtils.getParsedLabel("view_results_sample_count"), sampleResult.getSampleCount())); //$NON-NLS-1$ + resultModel.addRow(new RowResult(JMeterUtils.getParsedLabel("view_results_error_count"), sampleResult.getErrorCount())); //$NON-NLS-1$ + resultModel.addRow(new RowResult(JMeterUtils.getParsedLabel("view_results_response_code"), responseCode)); //$NON-NLS-1$ + resultModel.addRow(new RowResult(JMeterUtils.getParsedLabel("view_results_response_message"), responseMsgStr)); //$NON-NLS-1$ resHeadersModel.clearData(); // clear response table before filling // Parsed response headers - LinkedHashMap lhm = parseResponseHeaders(sampleResult.getResponseHeaders()); + LinkedHashMap lhm = JMeterUtils.parseHeaders(sampleResult.getResponseHeaders()); Set keySet = lhm.keySet(); for (String key : keySet) { resHeadersModel.addRow(new RowResult(key, lhm.get(key))); @@ -341,7 +330,7 @@ rightSide.setTitleAt(0, JMeterUtils.getResString("view_results_tab_sampler")); //$NON-NLS-1$ // Add the other tabs if not present if(rightSide.indexOfTab(JMeterUtils.getResString("view_results_tab_request")) < 0) { // $NON-NLS-1$ - rightSide.addTab(JMeterUtils.getResString("view_results_tab_request"), requestPane); // $NON-NLS-1$ + rightSide.addTab(JMeterUtils.getResString("view_results_tab_request"), requestPanel.getPanel()); // $NON-NLS-1$ } if(rightSide.indexOfTab(JMeterUtils.getResString("view_results_tab_response")) < 0) { // $NON-NLS-1$ rightSide.addTab(JMeterUtils.getResString("view_results_tab_response"), resultsPane); // $NON-NLS-1$ @@ -444,17 +433,6 @@ return panel; } - private JPanel createRequestPanel() { - sampleDataField = new JTextArea(); - sampleDataField.setEditable(false); - sampleDataField.setLineWrap(true); - sampleDataField.setWrapStyleWord(true); - - JPanel pane = new JPanel(new BorderLayout(0, 5)); - pane.add(GuiUtils.makeScrollPane(sampleDataField)); - return pane; - } - private JPanel createResponseDataPanel() { results = new JEditorPane(); results.setEditable(false); @@ -506,39 +484,11 @@ this.backGround = backGround; } - /** - * To get I18N label from properties file - * @param key in messages.properties - * @return I18N label without (if exists) last colon ':' and spaces - */ - private String getParsedLabel(String key) { - String value = JMeterUtils.getResString(key); - return value.replaceFirst("(?m)\\s*?:\\s*$", ""); // $NON-NLS-1$ $NON-NLS-2$ - } - private void setFirstColumnPreferredSize(JTable table) { TableColumn column = table.getColumnModel().getColumn(0); column.setMaxWidth(300); column.setPreferredWidth(180); } - - /** - * Split line into name/value pairs and remove colon ':' - */ - private LinkedHashMap parseResponseHeaders(String responseHeaders) { - LinkedHashMap linkedHeaders = new LinkedHashMap(); - String[] list = responseHeaders.split(NL); - for (String header : list) { - int colon = header.indexOf(':'); // $NON-NLS-1$ - if (colon <= 0) { - linkedHeaders.put(header, ""); // Empty value // $NON-NLS-1$ - } else { - linkedHeaders.put(header.substring(0, colon).trim(), header - .substring(colon + 1).trim()); - } - } - return linkedHeaders; - } /** * For model table