Lines 38-44
Link Here
|
38 |
import javax.swing.JSplitPane; |
38 |
import javax.swing.JSplitPane; |
39 |
import javax.swing.JTabbedPane; |
39 |
import javax.swing.JTabbedPane; |
40 |
import javax.swing.JTable; |
40 |
import javax.swing.JTable; |
41 |
import javax.swing.JTextArea; |
|
|
42 |
import javax.swing.JTextPane; |
41 |
import javax.swing.JTextPane; |
43 |
import javax.swing.table.TableCellRenderer; |
42 |
import javax.swing.table.TableCellRenderer; |
44 |
import javax.swing.table.TableColumn; |
43 |
import javax.swing.table.TableColumn; |
Lines 57-62
Link Here
|
57 |
import org.apache.jorphan.gui.RendererUtils; |
56 |
import org.apache.jorphan.gui.RendererUtils; |
58 |
import org.apache.jorphan.reflect.Functor; |
57 |
import org.apache.jorphan.reflect.Functor; |
59 |
|
58 |
|
|
|
59 |
/** |
60 |
* Right side in View Results Tree |
61 |
* |
62 |
*/ |
60 |
public abstract class SamplerResultTab implements ResultRenderer { |
63 |
public abstract class SamplerResultTab implements ResultRenderer { |
61 |
|
64 |
|
62 |
// N.B. these are not multi-threaded, so don't make it static |
65 |
// N.B. these are not multi-threaded, so don't make it static |
Lines 71-76
Link Here
|
71 |
public static final Color REDIRECT_COLOR = Color.green; |
74 |
public static final Color REDIRECT_COLOR = Color.green; |
72 |
|
75 |
|
73 |
protected static final String TEXT_COMMAND = "text"; // $NON-NLS-1$ |
76 |
protected static final String TEXT_COMMAND = "text"; // $NON-NLS-1$ |
|
|
77 |
|
78 |
protected static final String REQUEST_VIEW_COMMAND = "change_request_view"; // $NON-NLS-1$ |
74 |
|
79 |
|
75 |
private static final String STYLE_SERVER_ERROR = "ServerError"; // $NON-NLS-1$ |
80 |
private static final String STYLE_SERVER_ERROR = "ServerError"; // $NON-NLS-1$ |
76 |
|
81 |
|
Lines 86-94
Link Here
|
86 |
|
91 |
|
87 |
private JLabel imageLabel; |
92 |
private JLabel imageLabel; |
88 |
|
93 |
|
89 |
private JPanel requestPane; |
94 |
private RequestPanel requestPanel; /** request pane content */ |
90 |
|
|
|
91 |
private JTextArea sampleDataField; /** request pane content */ |
92 |
|
95 |
|
93 |
protected JTabbedPane rightSide; /** holds the tabbed panes */ |
96 |
protected JTabbedPane rightSide; /** holds the tabbed panes */ |
94 |
|
97 |
|
Lines 187-199
Link Here
|
187 |
|
190 |
|
188 |
public void clearData() { |
191 |
public void clearData() { |
189 |
results.setText("");// Response Data // $NON-NLS-1$ |
192 |
results.setText("");// Response Data // $NON-NLS-1$ |
190 |
sampleDataField.setText("");// Request Data // $NON-NLS-1$ |
193 |
requestPanel.clearData();// Request Data // $NON-NLS-1$ |
191 |
} |
194 |
} |
192 |
|
195 |
|
193 |
public void init() { |
196 |
public void init() { |
194 |
rightSide.addTab(JMeterUtils.getResString("view_results_tab_sampler"), createResponseMetadataPanel()); // $NON-NLS-1$ |
197 |
rightSide.addTab(JMeterUtils.getResString("view_results_tab_sampler"), createResponseMetadataPanel()); // $NON-NLS-1$ |
195 |
// Create the panels for the other tabs |
198 |
// Create the panels for the other tabs |
196 |
requestPane = createRequestPanel(); |
199 |
requestPanel = new RequestPanel(); |
197 |
resultsPane = createResponseDataPanel(); |
200 |
resultsPane = createResponseDataPanel(); |
198 |
} |
201 |
} |
199 |
|
202 |
|
Lines 201-229
Link Here
|
201 |
public void setupTabPane() { |
204 |
public void setupTabPane() { |
202 |
StyledDocument statsDoc = stats.getStyledDocument(); |
205 |
StyledDocument statsDoc = stats.getStyledDocument(); |
203 |
try { |
206 |
try { |
|
|
207 |
// Clear data before display a new |
204 |
statsDoc.remove(0, statsDoc.getLength()); |
208 |
statsDoc.remove(0, statsDoc.getLength()); |
205 |
sampleDataField.setText(""); // $NON-NLS-1$ |
209 |
requestPanel.clearData(); |
206 |
results.setText(""); // $NON-NLS-1$ |
210 |
results.setText(""); // $NON-NLS-1$ |
207 |
if (userObject instanceof SampleResult) { |
211 |
if (userObject instanceof SampleResult) { |
208 |
sampleResult = (SampleResult) userObject; |
212 |
sampleResult = (SampleResult) userObject; |
209 |
// We are displaying a SampleResult |
213 |
// We are displaying a SampleResult |
210 |
setupTabPaneForSampleResult(); |
214 |
setupTabPaneForSampleResult(); |
211 |
|
215 |
requestPanel.setSamplerResult(sampleResult); |
212 |
// load time label |
|
|
213 |
String sd = sampleResult.getSamplerData(); |
214 |
if (sd != null) { |
215 |
String rh = sampleResult.getRequestHeaders(); |
216 |
if (rh != null) { |
217 |
StringBuilder sb = new StringBuilder(sd.length() + rh.length() + 20); |
218 |
sb.append(sd); |
219 |
sb.append("\n"); //$NON-NLS-1$ |
220 |
sb.append(JMeterUtils.getResString("view_results_request_headers")); //$NON-NLS-1$ |
221 |
sb.append("\n"); //$NON-NLS-1$ |
222 |
sb.append(rh); |
223 |
sd = sb.toString(); |
224 |
} |
225 |
sampleDataField.setText(sd); |
226 |
} |
227 |
|
216 |
|
228 |
final String samplerClass = sampleResult.getClass().getName(); |
217 |
final String samplerClass = sampleResult.getClass().getName(); |
229 |
String typeResult = samplerClass.substring(1 + samplerClass.lastIndexOf('.')); |
218 |
String typeResult = samplerClass.substring(1 + samplerClass.lastIndexOf('.')); |
Lines 285-303
Link Here
|
285 |
// Tabbed results |
274 |
// Tabbed results |
286 |
resultModel.clearData(); // clear results table before filling |
275 |
resultModel.clearData(); // clear results table before filling |
287 |
// fill table |
276 |
// fill table |
288 |
resultModel.addRow(new RowResult(getParsedLabel("view_results_thread_name"), sampleResult.getThreadName())); //$NON-NLS-1$ |
277 |
resultModel.addRow(new RowResult(JMeterUtils.getParsedLabel("view_results_thread_name"), sampleResult.getThreadName())); //$NON-NLS-1$ |
289 |
resultModel.addRow(new RowResult(getParsedLabel("view_results_sample_start"), startTime)); //$NON-NLS-1$ |
278 |
resultModel.addRow(new RowResult(JMeterUtils.getParsedLabel("view_results_sample_start"), startTime)); //$NON-NLS-1$ |
290 |
resultModel.addRow(new RowResult(getParsedLabel("view_results_load_time"), sampleResult.getTime())); //$NON-NLS-1$ |
279 |
resultModel.addRow(new RowResult(JMeterUtils.getParsedLabel("view_results_load_time"), sampleResult.getTime())); //$NON-NLS-1$ |
291 |
resultModel.addRow(new RowResult(getParsedLabel("view_results_latency"), sampleResult.getLatency())); //$NON-NLS-1$ |
280 |
resultModel.addRow(new RowResult(JMeterUtils.getParsedLabel("view_results_latency"), sampleResult.getLatency())); //$NON-NLS-1$ |
292 |
resultModel.addRow(new RowResult(getParsedLabel("view_results_size_in_bytes"), sampleResult.getBytes())); //$NON-NLS-1$ |
281 |
resultModel.addRow(new RowResult(JMeterUtils.getParsedLabel("view_results_size_in_bytes"), sampleResult.getBytes())); //$NON-NLS-1$ |
293 |
resultModel.addRow(new RowResult(getParsedLabel("view_results_sample_count"), sampleResult.getSampleCount())); //$NON-NLS-1$ |
282 |
resultModel.addRow(new RowResult(JMeterUtils.getParsedLabel("view_results_sample_count"), sampleResult.getSampleCount())); //$NON-NLS-1$ |
294 |
resultModel.addRow(new RowResult(getParsedLabel("view_results_error_count"), sampleResult.getErrorCount())); //$NON-NLS-1$ |
283 |
resultModel.addRow(new RowResult(JMeterUtils.getParsedLabel("view_results_error_count"), sampleResult.getErrorCount())); //$NON-NLS-1$ |
295 |
resultModel.addRow(new RowResult(getParsedLabel("view_results_response_code"), responseCode)); //$NON-NLS-1$ |
284 |
resultModel.addRow(new RowResult(JMeterUtils.getParsedLabel("view_results_response_code"), responseCode)); //$NON-NLS-1$ |
296 |
resultModel.addRow(new RowResult(getParsedLabel("view_results_response_message"), responseMsgStr)); //$NON-NLS-1$ |
285 |
resultModel.addRow(new RowResult(JMeterUtils.getParsedLabel("view_results_response_message"), responseMsgStr)); //$NON-NLS-1$ |
297 |
|
286 |
|
298 |
resHeadersModel.clearData(); // clear response table before filling |
287 |
resHeadersModel.clearData(); // clear response table before filling |
299 |
// Parsed response headers |
288 |
// Parsed response headers |
300 |
LinkedHashMap<String, String> lhm = parseResponseHeaders(sampleResult.getResponseHeaders()); |
289 |
LinkedHashMap<String, String> lhm = JMeterUtils.parseHeaders(sampleResult.getResponseHeaders()); |
301 |
Set<String> keySet = lhm.keySet(); |
290 |
Set<String> keySet = lhm.keySet(); |
302 |
for (String key : keySet) { |
291 |
for (String key : keySet) { |
303 |
resHeadersModel.addRow(new RowResult(key, lhm.get(key))); |
292 |
resHeadersModel.addRow(new RowResult(key, lhm.get(key))); |
Lines 341-347
Link Here
|
341 |
rightSide.setTitleAt(0, JMeterUtils.getResString("view_results_tab_sampler")); //$NON-NLS-1$ |
330 |
rightSide.setTitleAt(0, JMeterUtils.getResString("view_results_tab_sampler")); //$NON-NLS-1$ |
342 |
// Add the other tabs if not present |
331 |
// Add the other tabs if not present |
343 |
if(rightSide.indexOfTab(JMeterUtils.getResString("view_results_tab_request")) < 0) { // $NON-NLS-1$ |
332 |
if(rightSide.indexOfTab(JMeterUtils.getResString("view_results_tab_request")) < 0) { // $NON-NLS-1$ |
344 |
rightSide.addTab(JMeterUtils.getResString("view_results_tab_request"), requestPane); // $NON-NLS-1$ |
333 |
rightSide.addTab(JMeterUtils.getResString("view_results_tab_request"), requestPanel.getPanel()); // $NON-NLS-1$ |
345 |
} |
334 |
} |
346 |
if(rightSide.indexOfTab(JMeterUtils.getResString("view_results_tab_response")) < 0) { // $NON-NLS-1$ |
335 |
if(rightSide.indexOfTab(JMeterUtils.getResString("view_results_tab_response")) < 0) { // $NON-NLS-1$ |
347 |
rightSide.addTab(JMeterUtils.getResString("view_results_tab_response"), resultsPane); // $NON-NLS-1$ |
336 |
rightSide.addTab(JMeterUtils.getResString("view_results_tab_response"), resultsPane); // $NON-NLS-1$ |
Lines 444-460
Link Here
|
444 |
return panel; |
433 |
return panel; |
445 |
} |
434 |
} |
446 |
|
435 |
|
447 |
private JPanel createRequestPanel() { |
|
|
448 |
sampleDataField = new JTextArea(); |
449 |
sampleDataField.setEditable(false); |
450 |
sampleDataField.setLineWrap(true); |
451 |
sampleDataField.setWrapStyleWord(true); |
452 |
|
453 |
JPanel pane = new JPanel(new BorderLayout(0, 5)); |
454 |
pane.add(GuiUtils.makeScrollPane(sampleDataField)); |
455 |
return pane; |
456 |
} |
457 |
|
458 |
private JPanel createResponseDataPanel() { |
436 |
private JPanel createResponseDataPanel() { |
459 |
results = new JEditorPane(); |
437 |
results = new JEditorPane(); |
460 |
results.setEditable(false); |
438 |
results.setEditable(false); |
Lines 506-544
Link Here
|
506 |
this.backGround = backGround; |
484 |
this.backGround = backGround; |
507 |
} |
485 |
} |
508 |
|
486 |
|
509 |
/** |
|
|
510 |
* To get I18N label from properties file |
511 |
* @param key in messages.properties |
512 |
* @return I18N label without (if exists) last colon ':' and spaces |
513 |
*/ |
514 |
private String getParsedLabel(String key) { |
515 |
String value = JMeterUtils.getResString(key); |
516 |
return value.replaceFirst("(?m)\\s*?:\\s*$", ""); // $NON-NLS-1$ $NON-NLS-2$ |
517 |
} |
518 |
|
519 |
private void setFirstColumnPreferredSize(JTable table) { |
487 |
private void setFirstColumnPreferredSize(JTable table) { |
520 |
TableColumn column = table.getColumnModel().getColumn(0); |
488 |
TableColumn column = table.getColumnModel().getColumn(0); |
521 |
column.setMaxWidth(300); |
489 |
column.setMaxWidth(300); |
522 |
column.setPreferredWidth(180); |
490 |
column.setPreferredWidth(180); |
523 |
} |
491 |
} |
524 |
|
|
|
525 |
/** |
526 |
* Split line into name/value pairs and remove colon ':' |
527 |
*/ |
528 |
private LinkedHashMap<String, String> parseResponseHeaders(String responseHeaders) { |
529 |
LinkedHashMap<String, String> linkedHeaders = new LinkedHashMap<String, String>(); |
530 |
String[] list = responseHeaders.split(NL); |
531 |
for (String header : list) { |
532 |
int colon = header.indexOf(':'); // $NON-NLS-1$ |
533 |
if (colon <= 0) { |
534 |
linkedHeaders.put(header, ""); // Empty value // $NON-NLS-1$ |
535 |
} else { |
536 |
linkedHeaders.put(header.substring(0, colon).trim(), header |
537 |
.substring(colon + 1).trim()); |
538 |
} |
539 |
} |
540 |
return linkedHeaders; |
541 |
} |
542 |
|
492 |
|
543 |
/** |
493 |
/** |
544 |
* For model table |
494 |
* For model table |