View | Details | Raw Unified | Return to bug 36726
Collapse All | Expand All

(-)/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java (-23 / +75 lines)
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,
(-)/src/core/org/apache/jmeter/resources/messages.properties (-4 / +14 lines)
Lines 719-724 Link Here
719
search_base=Search base
719
search_base=Search base
720
search_filter=Search Filter
720
search_filter=Search Filter
721
search_test=Search Test
721
search_test=Search Test
722
search_text_button_close=Close
723
search_text_button_find=Find
724
search_text_button_next=Find next
725
search_text_chkbox_case=Case sensitive
726
search_text_chkbox_regexp=Regular exp.
727
search_text_field=Search: 
728
search_text_msg_not_found=Text not found
729
search_text_title_not_found=Not found
722
searchbase=Search base
730
searchbase=Search base
723
searchfilter=Search Filter
731
searchfilter=Search Filter
724
searchtest=Search test
732
searchtest=Search test
Lines 872-882 Link Here
872
view_results_in_table=View Results in Table
880
view_results_in_table=View Results in Table
873
view_results_latency=Latency: 
881
view_results_latency=Latency: 
874
view_results_load_time=Load time: 
882
view_results_load_time=Load time: 
883
view_results_render=Render: 
875
view_results_render_embedded=Download embedded resources
884
view_results_render_embedded=Download embedded resources
876
view_results_render_html=Render HTML
885
view_results_render_html=HTML
877
view_results_render_json=Render JSON
886
view_results_render_json=JSON
878
view_results_render_text=Show Text
887
view_results_render_text=Text
879
view_results_render_xml=Render XML
888
view_results_render_xml=XML
880
view_results_request_headers=Request Headers:
889
view_results_request_headers=Request Headers:
881
view_results_response_code=Response code: 
890
view_results_response_code=Response code: 
882
view_results_response_headers=Response headers:
891
view_results_response_headers=Response headers:
Lines 884-889 Link Here
884
view_results_response_too_large_message=Response too large to be displayed. Size: 
893
view_results_response_too_large_message=Response too large to be displayed. Size: 
885
view_results_sample_count=Sample Count: 
894
view_results_sample_count=Sample Count: 
886
view_results_sample_start=Sample Start: 
895
view_results_sample_start=Sample Start: 
896
view_results_search_pane=Search pane
887
view_results_size_in_bytes=Size in bytes: 
897
view_results_size_in_bytes=Size in bytes: 
888
view_results_tab_assertion=Assertion result
898
view_results_tab_assertion=Assertion result
889
view_results_tab_request=Request
899
view_results_tab_request=Request
(-)/src/core/org/apache/jmeter/resources/messages_fr.properties (-4 / +14 lines)
Lines 579-584 Link Here
579
search_base=Base de recherche
579
search_base=Base de recherche
580
search_filter=Filtre de recherche
580
search_filter=Filtre de recherche
581
search_test=Recherche
581
search_test=Recherche
582
search_text_button_close=Fermer
583
search_text_button_find=Rechercher
584
search_text_button_next=Suivant
585
search_text_chkbox_case=Consid\u00E9rer la casse
586
search_text_chkbox_regexp=Exp. reguli\u00E8re
587
search_text_field=Rechercher \:
588
search_text_msg_not_found=Text non trouv\u00E9
589
search_text_title_not_found=Pas trouv\u00E9
582
second=seconde
590
second=seconde
583
secure=S\u00E9curis\u00E9 \:
591
secure=S\u00E9curis\u00E9 \:
584
send_file=Envoyer un fichier avec la requ\u00EAte \:
592
send_file=Envoyer un fichier avec la requ\u00EAte \:
Lines 719-729 Link Here
719
view_results_in_table=Tableau de r\u00E9sultats
727
view_results_in_table=Tableau de r\u00E9sultats
720
view_results_latency=Latence \: 
728
view_results_latency=Latence \: 
721
view_results_load_time=Temps de r\u00E9ponse \: 
729
view_results_load_time=Temps de r\u00E9ponse \: 
730
view_results_render=Rendu \: 
722
view_results_render_embedded=T\u00E9l\u00E9charger les ressources incluses
731
view_results_render_embedded=T\u00E9l\u00E9charger les ressources incluses
723
view_results_render_html=Afficher en HTML
732
view_results_render_html=HTML
724
view_results_render_json=Afficher en JSON
733
view_results_render_json=JSON
725
view_results_render_text=Afficher en texte brut
734
view_results_render_text=Texte brut
726
view_results_render_xml=Afficher en XML
735
view_results_render_xml=XML
727
view_results_request_headers=Ent\u00EAtes de requ\u00EAte \:
736
view_results_request_headers=Ent\u00EAtes de requ\u00EAte \:
728
view_results_response_code=Code HTTP de r\u00E9ponse \: 
737
view_results_response_code=Code HTTP de r\u00E9ponse \: 
729
view_results_response_headers=Ent\u00EAtes de r\u00E9ponse \:
738
view_results_response_headers=Ent\u00EAtes de r\u00E9ponse \:
Lines 731-736 Link Here
731
view_results_response_too_large_message=R\u00E9ponse d\u00E9passant la taille maximale d'affichage. Taille \: 
740
view_results_response_too_large_message=R\u00E9ponse d\u00E9passant la taille maximale d'affichage. Taille \: 
732
view_results_sample_count=Compteur \u00E9chantillon \: 
741
view_results_sample_count=Compteur \u00E9chantillon \: 
733
view_results_sample_start=Date d\u00E9but \u00E9chantillon \: 
742
view_results_sample_start=Date d\u00E9but \u00E9chantillon \: 
743
view_results_search_pane=Volet recherche 
734
view_results_size_in_bytes=Taille en octets \: 
744
view_results_size_in_bytes=Taille en octets \: 
735
view_results_tab_assertion=R\u00E9sultats d'assertion
745
view_results_tab_assertion=R\u00E9sultats d'assertion
736
view_results_tab_request=Requ\u00EAte
746
view_results_tab_request=Requ\u00EAte

Return to bug 36726