jsalvata    2004/01/19 03:15:28

  Modified:    src/components/org/apache/jmeter/visualizers
                        ViewResultsFullVisualizer.java
  Log:
  * Use tabbed pannels instead of adjacent ones to present
  the different views of the result.
  * Prevent attempting to show excessively large texts -- it's
  too costly both in time and in memory.
  
  Revision  Changes    Path
  1.36      +45 -23    
jakarta-jmeter/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java
  
  Index: ViewResultsFullVisualizer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java,v
  retrieving revision 1.35
  retrieving revision 1.36
  diff -u -r1.35 -r1.36
  --- ViewResultsFullVisualizer.java    17 Dec 2003 03:39:30 -0000      1.35
  +++ ViewResultsFullVisualizer.java    19 Jan 2004 11:15:28 -0000      1.36
  @@ -72,6 +72,7 @@
   import javax.swing.JRadioButton;
   import javax.swing.JScrollPane;
   import javax.swing.JSplitPane;
  +import javax.swing.JTabbedPane;
   import javax.swing.JTextArea;
   import javax.swing.JTextPane;
   import javax.swing.JTree;
  @@ -237,7 +238,7 @@
       }
   
       /**
  -     * Sets the bottom pane to correspond to the selected node of the top tree.
  +     * Sets the right pane to correspond to the selected node of the left tree.
        */
       public void valueChanged(TreeSelectionEvent e)
       {
  @@ -343,17 +344,30 @@
                       // get the text response and image icon
                       // to determine which is NOT null
                       byte[] responseBytes = (byte[]) res.getResponseData();
  +
                       if (res.getDataType() != null
                           && res.getDataType().equals(SampleResult.TEXT))
                       {
                           String response = null;
                           try
                           {
  -                            response = new String(responseBytes, "UTF-8");
  +                                                     // Showing large strings can 
be VERY costly, so we will avoid doing so if the response
  +                                                     // data is larger than 200K. 
TODO: instead, we could delay doing the result.setText
  +                                                     // call until the user chooses 
the "Response data" tab. Plus we could warn the user
  +                                                     // if this happens and revert 
the choice if he doesn't confirm he's ready to wait.
  +                                                     if (responseBytes.length > 
200*1024)
  +                                                     {
  +                                                             response= 
  +                                                                     ("Response too 
large to be displayed ("+responseBytes.length+" bytes).");
  +                                                     }
  +                                                     else
  +                                                     {
  +                                                             response = new 
String(responseBytes, "UTF-8");
  +                                                     }
                           }
                           catch (UnsupportedEncodingException err)
                           {
  -                            response = new String(responseBytes);
  +                            throw new Error(err.toString()); // UTF-8 not 
supported? Com'on!
                           }
   
                           if (textMode)
  @@ -391,7 +405,7 @@
       protected void showTextResponse(String response)
       {
           results.setContentType("text/plain");
  -        results.setText(response == null ? "" : response);
  +             results.setText(response == null ? "" : response);
           results.setCaretPosition(0);
           resultsScrollPane.setViewportView(results);
   
  @@ -438,11 +452,24 @@
               {
                   try
                   {
  -                    response = new String(responseBytes, "UTF-8");
  +                                     // Showing large strings can be VERY costly, 
so we will avoid doing so if the response
  +                                     // data is larger than 200K. TODO: instead, we 
could delay doing the result.setText
  +                                     // call until the user chooses the "Response 
data" tab. Plus we could warn the user
  +                                     // if this happens and revert the choice if he 
doesn't confirm he's ready to wait.
  +                                     if (responseBytes.length > 200*1024)
  +                                     {
  +                                             response= 
  +                                                     ("Response too large to be 
displayed ("+responseBytes.length+" bytes).");
  +                                             log.warn("Response too large to 
display.");
  +                                     }
  +                                     else
  +                                     {
  +                                             response = new String(responseBytes, 
"UTF-8");
  +                                     }
                   }
                   catch (UnsupportedEncodingException err)
                   {
  -                    response = new String(responseBytes);
  +                     throw new Error(err.toString()); // UTF-8 unsupported? Com'on!
                   }
               }
   
  @@ -530,22 +557,20 @@
   
           add(makeTitlePanel(), BorderLayout.NORTH);
   
  -        Component topLeft = createTopLeftPanel();
  -        Component bottomLeft = createBottomLeftPanel();
  -        JSplitPane leftSide =
  -            new JSplitPane(JSplitPane.VERTICAL_SPLIT, topLeft, bottomLeft);
  -
  -        Component topRight = createTopRightPanel();
  -        Component bottomRight = createBottomRightPanel();
  -        JSplitPane rightSide =
  -            new JSplitPane(JSplitPane.VERTICAL_SPLIT, topRight, bottomRight);
  +        Component leftSide = createLeftPanel();
  +        JTabbedPane rightSide= new JTabbedPane();
  +
  +             // TODO: i18n
  +        rightSide.addTab("Sampler result", createResponseMetadataPanel());
  +             rightSide.addTab("Request", createRequestPanel());
  +             rightSide.addTab("Response data", createResponseDataPanel());
   
           JSplitPane mainSplit =
               new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftSide, rightSide);
           add(mainSplit, BorderLayout.CENTER);
       }
   
  -    private Component createTopLeftPanel()
  +    private Component createLeftPanel()
       {
           SampleResult rootSampleResult = new SampleResult();
           rootSampleResult.setSampleLabel("Root");
  @@ -565,7 +590,7 @@
           return treePane;
       }
   
  -    private Component createBottomLeftPanel()
  +    private Component createResponseMetadataPanel()
       {
           stats = new JTextPane();
           stats.setEditable(false);
  @@ -588,7 +613,7 @@
           return pane;
       }
   
  -    private Component createTopRightPanel()
  +    private Component createRequestPanel()
       {
           sampleDataField = new JTextArea();
           sampleDataField.setEditable(false);
  @@ -596,12 +621,11 @@
           sampleDataField.setWrapStyleWord(true);
   
           JPanel pane = new JPanel(new BorderLayout(0, 5));
  -        pane.setBorder(BorderFactory.createTitledBorder("Request Data"));
           pane.add(makeScrollPane(sampleDataField));
           return pane;
       }
   
  -    private Component createBottomRightPanel()
  +    private Component createResponseDataPanel()
       {
           results = new JEditorPane();
           results.setEditable(false);
  @@ -610,8 +634,6 @@
           imageLabel = new JLabel();
   
           JPanel resultsPane = new JPanel(new BorderLayout());
  -        resultsPane.setBorder(
  -            BorderFactory.createTitledBorder("Response Data"));
           resultsPane.add(resultsScrollPane, BorderLayout.CENTER);
           resultsPane.add(createHtmlOrTextPane(), BorderLayout.SOUTH);
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to