Lines 22-30
Link Here
|
22 |
import java.awt.Color; |
22 |
import java.awt.Color; |
23 |
import java.awt.Component; |
23 |
import java.awt.Component; |
24 |
import java.awt.Dimension; |
24 |
import java.awt.Dimension; |
|
|
25 |
import java.awt.Font; |
25 |
import java.awt.GridLayout; |
26 |
import java.awt.GridLayout; |
26 |
import java.awt.event.ActionEvent; |
27 |
import java.awt.event.ActionEvent; |
27 |
import java.awt.event.ActionListener; |
28 |
import java.awt.event.ActionListener; |
|
|
29 |
import java.awt.event.InputEvent; |
30 |
import java.awt.event.KeyEvent; |
28 |
import java.io.ByteArrayInputStream; |
31 |
import java.io.ByteArrayInputStream; |
29 |
import java.io.StringWriter; |
32 |
import java.io.StringWriter; |
30 |
import java.text.DateFormat; |
33 |
import java.text.DateFormat; |
Lines 33-43
Link Here
|
33 |
import java.util.regex.Matcher; |
36 |
import java.util.regex.Matcher; |
34 |
import java.util.regex.Pattern; |
37 |
import java.util.regex.Pattern; |
35 |
|
38 |
|
|
|
39 |
import javax.swing.AbstractAction; |
40 |
import javax.swing.ActionMap; |
36 |
import javax.swing.BorderFactory; |
41 |
import javax.swing.BorderFactory; |
|
|
42 |
import javax.swing.Box; |
43 |
import javax.swing.BoxLayout; |
37 |
import javax.swing.ButtonGroup; |
44 |
import javax.swing.ButtonGroup; |
38 |
import javax.swing.Icon; |
45 |
import javax.swing.Icon; |
39 |
import javax.swing.ImageIcon; |
46 |
import javax.swing.ImageIcon; |
|
|
47 |
import javax.swing.InputMap; |
40 |
import javax.swing.JCheckBox; |
48 |
import javax.swing.JCheckBox; |
|
|
49 |
import javax.swing.JComponent; |
41 |
import javax.swing.JEditorPane; |
50 |
import javax.swing.JEditorPane; |
42 |
import javax.swing.JLabel; |
51 |
import javax.swing.JLabel; |
43 |
import javax.swing.JOptionPane; |
52 |
import javax.swing.JOptionPane; |
Lines 49-54
Link Here
|
49 |
import javax.swing.JTextArea; |
58 |
import javax.swing.JTextArea; |
50 |
import javax.swing.JTextPane; |
59 |
import javax.swing.JTextPane; |
51 |
import javax.swing.JTree; |
60 |
import javax.swing.JTree; |
|
|
61 |
import javax.swing.KeyStroke; |
52 |
import javax.swing.ToolTipManager; |
62 |
import javax.swing.ToolTipManager; |
53 |
import javax.swing.event.TreeSelectionEvent; |
63 |
import javax.swing.event.TreeSelectionEvent; |
54 |
import javax.swing.event.TreeSelectionListener; |
64 |
import javax.swing.event.TreeSelectionListener; |
Lines 182-187
Link Here
|
182 |
private JRadioButton xmlButton; |
192 |
private JRadioButton xmlButton; |
183 |
|
193 |
|
184 |
private JCheckBox downloadAll; |
194 |
private JCheckBox downloadAll; |
|
|
195 |
|
196 |
private JLabel renderLabel; |
185 |
|
197 |
|
186 |
private JTree jTree; |
198 |
private JTree jTree; |
187 |
|
199 |
|
Lines 187-192
Link Here
|
187 |
|
199 |
|
188 |
private JTabbedPane rightSide; |
200 |
private JTabbedPane rightSide; |
189 |
|
201 |
|
|
|
202 |
private SearchTextExtension searchTextExtension; |
203 |
|
204 |
private JPanel searchPanel = null; |
205 |
|
190 |
private static final ImageIcon imageSuccess = JMeterUtils.getImage( |
206 |
private static final ImageIcon imageSuccess = JMeterUtils.getImage( |
191 |
JMeterUtils.getPropDefault("viewResultsTree.success", //$NON-NLS-1$ |
207 |
JMeterUtils.getPropDefault("viewResultsTree.success", //$NON-NLS-1$ |
192 |
"icon_success_sml.gif")); //$NON-NLS-1$ |
208 |
"icon_success_sml.gif")); //$NON-NLS-1$ |
Lines 408-413
Link Here
|
408 |
statsDoc.insertString(statsDoc.getLength(), statsBuff.toString(), null); |
424 |
statsDoc.insertString(statsDoc.getLength(), statsBuff.toString(), null); |
409 |
statsBuff = null; // Done |
425 |
statsBuff = null; // Done |
410 |
|
426 |
|
|
|
427 |
// Reset search |
428 |
searchTextExtension.resetTextToFind(); |
429 |
|
411 |
// get the text response and image icon |
430 |
// get the text response and image icon |
412 |
// to determine which is NOT null |
431 |
// to determine which is NOT null |
413 |
if ((SampleResult.TEXT).equals(res.getDataType())) // equals(null) is OK |
432 |
if ((SampleResult.TEXT).equals(res.getDataType())) // equals(null) is OK |
Lines 422-427
Link Here
|
422 |
} else if (command.equals(XML_COMMAND)) { |
441 |
} else if (command.equals(XML_COMMAND)) { |
423 |
showRenderXMLResponse(res); |
442 |
showRenderXMLResponse(res); |
424 |
} |
443 |
} |
|
|
444 |
if (!searchTextExtension.isEnabled()) { |
445 |
searchTextExtension.setEnabled(true); |
446 |
} |
425 |
} else { |
447 |
} else { |
426 |
byte[] responseBytes = res.getResponseData(); |
448 |
byte[] responseBytes = res.getResponseData(); |
427 |
if (responseBytes != null) { |
449 |
if (responseBytes != null) { |
Lines 426-431
Link Here
|
426 |
byte[] responseBytes = res.getResponseData(); |
448 |
byte[] responseBytes = res.getResponseData(); |
427 |
if (responseBytes != null) { |
449 |
if (responseBytes != null) { |
428 |
showImage(new ImageIcon(responseBytes)); //TODO implement other non-text types |
450 |
showImage(new ImageIcon(responseBytes)); //TODO implement other non-text types |
|
|
451 |
if (searchTextExtension.isEnabled()) { |
452 |
searchTextExtension.setEnabled(false); |
453 |
} |
429 |
} |
454 |
} |
430 |
} |
455 |
} |
431 |
} |
456 |
} |
Lines 457-466
Link Here
|
457 |
private void showImage(Icon image) { |
482 |
private void showImage(Icon image) { |
458 |
imageLabel.setIcon(image); |
483 |
imageLabel.setIcon(image); |
459 |
resultsScrollPane.setViewportView(imageLabel); |
484 |
resultsScrollPane.setViewportView(imageLabel); |
460 |
textButton.setEnabled(false); |
485 |
setEnabledButtons(false); |
461 |
htmlButton.setEnabled(false); |
|
|
462 |
jsonButton.setEnabled(false); |
463 |
xmlButton.setEnabled(false); |
464 |
} |
486 |
} |
465 |
|
487 |
|
466 |
private void showTextResponse(String response) { |
488 |
private void showTextResponse(String response) { |
Lines 469-478
Link Here
|
469 |
results.setCaretPosition(0); |
491 |
results.setCaretPosition(0); |
470 |
resultsScrollPane.setViewportView(results); |
492 |
resultsScrollPane.setViewportView(results); |
471 |
|
493 |
|
472 |
textButton.setEnabled(true); |
494 |
setEnabledButtons(true); |
473 |
htmlButton.setEnabled(true); |
|
|
474 |
jsonButton.setEnabled(true); |
475 |
xmlButton.setEnabled(true); |
476 |
} |
495 |
} |
477 |
|
496 |
|
478 |
// It might be useful also to make this available in the 'Request' tab, for |
497 |
// It might be useful also to make this available in the 'Request' tab, for |
Lines 536-545
Link Here
|
536 |
results.setCaretPosition(0); |
555 |
results.setCaretPosition(0); |
537 |
resultsScrollPane.setViewportView(results); |
556 |
resultsScrollPane.setViewportView(results); |
538 |
|
557 |
|
539 |
textButton.setEnabled(true); |
558 |
setEnabledButtons(true); |
540 |
htmlButton.setEnabled(true); |
|
|
541 |
jsonButton.setEnabled(true); |
542 |
xmlButton.setEnabled(true); |
543 |
} |
559 |
} |
544 |
|
560 |
|
545 |
private void showRenderXMLResponse(SampleResult res) { |
561 |
private void showRenderXMLResponse(SampleResult res) { |
Lines 571-580
Link Here
|
571 |
JPanel domTreePanel = new DOMTreePanel(document); |
587 |
JPanel domTreePanel = new DOMTreePanel(document); |
572 |
view = domTreePanel; |
588 |
view = domTreePanel; |
573 |
resultsScrollPane.setViewportView(view); |
589 |
resultsScrollPane.setViewportView(view); |
574 |
textButton.setEnabled(true); |
590 |
setEnabledButtons(true); |
575 |
htmlButton.setEnabled(true); |
|
|
576 |
jsonButton.setEnabled(true); |
577 |
xmlButton.setEnabled(true); |
578 |
} |
591 |
} |
579 |
|
592 |
|
580 |
private static String getResponseAsString(SampleResult res) { |
593 |
private static String getResponseAsString(SampleResult res) { |
Lines 623-629
Link Here
|
623 |
results.setText(""); |
636 |
results.setText(""); |
624 |
return; |
637 |
return; |
625 |
} |
638 |
} |
626 |
|
639 |
searchTextExtension.resetTextToFind(); |
|
|
640 |
|
627 |
SampleResult res = (SampleResult) node.getUserObject(); |
641 |
SampleResult res = (SampleResult) node.getUserObject(); |
628 |
String response = getResponseAsString(res); |
642 |
String response = getResponseAsString(res); |
629 |
|
643 |
|
Lines 688-697
Link Here
|
688 |
results.setCaretPosition(0); |
702 |
results.setCaretPosition(0); |
689 |
resultsScrollPane.setViewportView(results); |
703 |
resultsScrollPane.setViewportView(results); |
690 |
|
704 |
|
691 |
textButton.setEnabled(true); |
705 |
setEnabledButtons(true); |
692 |
htmlButton.setEnabled(true); |
|
|
693 |
jsonButton.setEnabled(true); |
694 |
xmlButton.setEnabled(true); |
695 |
} |
706 |
} |
696 |
|
707 |
|
697 |
private Component createHtmlOrTextPane() { |
708 |
private Component createHtmlOrTextPane() { |
Lines 696-703
Link Here
|
696 |
|
707 |
|
697 |
private Component createHtmlOrTextPane() { |
708 |
private Component createHtmlOrTextPane() { |
698 |
ButtonGroup group = new ButtonGroup(); |
709 |
ButtonGroup group = new ButtonGroup(); |
|
|
710 |
Font font = new Font("SansSerif", Font.PLAIN, 10); |
711 |
Font fontBold = new Font("SansSerif", Font.BOLD, 10); |
712 |
|
713 |
renderLabel = new JLabel(JMeterUtils |
714 |
.getResString("view_results_render")); // $NON-NLS-1$ |
715 |
renderLabel.setFont(fontBold); |
699 |
|
716 |
|
700 |
textButton = new JRadioButton(JMeterUtils.getResString("view_results_render_text")); // $NON-NLS-1$ |
717 |
textButton = new JRadioButton(JMeterUtils.getResString("view_results_render_text")); // $NON-NLS-1$ |
|
|
718 |
textButton.setFont(font); |
701 |
textButton.setActionCommand(TEXT_COMMAND); |
719 |
textButton.setActionCommand(TEXT_COMMAND); |
702 |
textButton.addActionListener(this); |
720 |
textButton.addActionListener(this); |
703 |
textButton.setSelected(textMode); |
721 |
textButton.setSelected(textMode); |
Lines 704-709
Link Here
|
704 |
group.add(textButton); |
722 |
group.add(textButton); |
705 |
|
723 |
|
706 |
htmlButton = new JRadioButton(JMeterUtils.getResString("view_results_render_html")); // $NON-NLS-1$ |
724 |
htmlButton = new JRadioButton(JMeterUtils.getResString("view_results_render_html")); // $NON-NLS-1$ |
|
|
725 |
htmlButton.setFont(font); |
707 |
htmlButton.setActionCommand(HTML_COMMAND); |
726 |
htmlButton.setActionCommand(HTML_COMMAND); |
708 |
htmlButton.addActionListener(this); |
727 |
htmlButton.addActionListener(this); |
709 |
htmlButton.setSelected(!textMode); |
728 |
htmlButton.setSelected(!textMode); |
Lines 710-715
Link Here
|
710 |
group.add(htmlButton); |
729 |
group.add(htmlButton); |
711 |
|
730 |
|
712 |
jsonButton = new JRadioButton(JMeterUtils.getResString("view_results_render_json")); // $NON-NLS-1$ |
731 |
jsonButton = new JRadioButton(JMeterUtils.getResString("view_results_render_json")); // $NON-NLS-1$ |
|
|
732 |
jsonButton.setFont(font); |
713 |
jsonButton.setActionCommand(JSON_COMMAND); |
733 |
jsonButton.setActionCommand(JSON_COMMAND); |
714 |
jsonButton.addActionListener(this); |
734 |
jsonButton.addActionListener(this); |
715 |
jsonButton.setSelected(!textMode); |
735 |
jsonButton.setSelected(!textMode); |
Lines 716-721
Link Here
|
716 |
group.add(jsonButton); |
736 |
group.add(jsonButton); |
717 |
|
737 |
|
718 |
xmlButton = new JRadioButton(JMeterUtils.getResString("view_results_render_xml")); // $NON-NLS-1$ |
738 |
xmlButton = new JRadioButton(JMeterUtils.getResString("view_results_render_xml")); // $NON-NLS-1$ |
|
|
739 |
xmlButton.setFont(font); |
719 |
xmlButton.setActionCommand(XML_COMMAND); |
740 |
xmlButton.setActionCommand(XML_COMMAND); |
720 |
xmlButton.addActionListener(this); |
741 |
xmlButton.addActionListener(this); |
721 |
xmlButton.setSelected(!textMode); |
742 |
xmlButton.setSelected(!textMode); |
Lines 722-729
Link Here
|
722 |
group.add(xmlButton); |
743 |
group.add(xmlButton); |
723 |
|
744 |
|
724 |
downloadAll = new JCheckBox(JMeterUtils.getResString("view_results_render_embedded")); // $NON-NLS-1$ |
745 |
downloadAll = new JCheckBox(JMeterUtils.getResString("view_results_render_embedded")); // $NON-NLS-1$ |
725 |
|
746 |
downloadAll.setFont(font); |
|
|
747 |
|
726 |
JPanel pane = new JPanel(); |
748 |
JPanel pane = new JPanel(); |
|
|
749 |
pane.setLayout(new BoxLayout(pane, BoxLayout.X_AXIS)); |
750 |
pane.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3)); |
751 |
pane.add(searchTextExtension.createShowSearchPanel()); |
752 |
pane.add(Box.createRigidArea(new Dimension(30, 0))); |
753 |
pane.add(renderLabel); |
727 |
pane.add(textButton); |
754 |
pane.add(textButton); |
728 |
pane.add(htmlButton); |
755 |
pane.add(htmlButton); |
729 |
pane.add(xmlButton); |
756 |
pane.add(xmlButton); |
Lines 729-734
Link Here
|
729 |
pane.add(xmlButton); |
756 |
pane.add(xmlButton); |
730 |
pane.add(jsonButton); |
757 |
pane.add(jsonButton); |
731 |
pane.add(downloadAll); |
758 |
pane.add(downloadAll); |
|
|
759 |
|
732 |
return pane; |
760 |
return pane; |
733 |
} |
761 |
} |
734 |
|
762 |
|
Lines 751-756
Link Here
|
751 |
|
779 |
|
752 |
JSplitPane mainSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftSide, rightSide); |
780 |
JSplitPane mainSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftSide, rightSide); |
753 |
add(mainSplit, BorderLayout.CENTER); |
781 |
add(mainSplit, BorderLayout.CENTER); |
|
|
782 |
|
783 |
searchTextExtension.init(resultsPane); |
754 |
} |
784 |
} |
755 |
|
785 |
|
756 |
private void setupTabPaneForSampleResult() { |
786 |
private void setupTabPaneForSampleResult() { |
Lines 838-846
Link Here
|
838 |
resultsScrollPane = makeScrollPane(results); |
868 |
resultsScrollPane = makeScrollPane(results); |
839 |
imageLabel = new JLabel(); |
869 |
imageLabel = new JLabel(); |
840 |
|
870 |
|
|
|
871 |
// Add search text extension |
872 |
searchTextExtension = new SearchTextExtension(); |
873 |
searchPanel = searchTextExtension.createSearchTextPanel(); |
874 |
searchTextExtension.setResults(results); |
875 |
searchPanel.setVisible(false); |
876 |
JPanel panelSouth = new JPanel(new BorderLayout()); |
877 |
panelSouth.add(createHtmlOrTextPane(), BorderLayout.CENTER); |
878 |
panelSouth.add(searchPanel, BorderLayout.SOUTH); |
879 |
|
841 |
JPanel panel = new JPanel(new BorderLayout()); |
880 |
JPanel panel = new JPanel(new BorderLayout()); |
842 |
panel.add(resultsScrollPane, BorderLayout.CENTER); |
881 |
panel.add(resultsScrollPane, BorderLayout.CENTER); |
843 |
panel.add(createHtmlOrTextPane(), BorderLayout.SOUTH); |
882 |
panel.add(panelSouth, BorderLayout.SOUTH); |
844 |
|
883 |
|
845 |
return panel; |
884 |
return panel; |
846 |
} |
885 |
} |
Lines 845-850
Link Here
|
845 |
return panel; |
884 |
return panel; |
846 |
} |
885 |
} |
847 |
|
886 |
|
|
|
887 |
private void setEnabledButtons(boolean b) { |
888 |
renderLabel.setEnabled(b); |
889 |
textButton.setEnabled(b); |
890 |
htmlButton.setEnabled(b); |
891 |
jsonButton.setEnabled(b); |
892 |
xmlButton.setEnabled(b); |
893 |
if (b && command.equals(HTML_COMMAND)) { |
894 |
downloadAll.setEnabled(b); |
895 |
} else { |
896 |
downloadAll.setEnabled(false); |
897 |
} |
898 |
} |
899 |
|
848 |
private static class ResultsNodeRenderer extends DefaultTreeCellRenderer { |
900 |
private static class ResultsNodeRenderer extends DefaultTreeCellRenderer { |
849 |
@Override |
901 |
@Override |
850 |
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, |
902 |
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, |