Author: milamber
Date: Mon Oct 11 22:12:42 2010
New Revision: 1021534

URL: http://svn.apache.org/viewvc?rev=1021534&view=rev
Log:
View Results Tree - Add a dialog's text box on "Sampler result tab > Parsed" to 
display the long values with a double click on cell

Added:
    
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/util/TextBoxDialoger.java   
(with props)
Modified:
    
jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java
    
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
    
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
    
jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/gui/ObjectTableModel.java
    jakarta/jmeter/trunk/xdocs/changes.xml

Modified: 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java?rev=1021534&r1=1021533&r2=1021534&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java
 (original)
+++ 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java
 Mon Oct 11 22:12:42 2010
@@ -49,6 +49,7 @@ import javax.swing.text.StyledDocument;
 
 import org.apache.jmeter.assertions.AssertionResult;
 import org.apache.jmeter.gui.util.HeaderAsPropertyRenderer;
+import org.apache.jmeter.gui.util.TextBoxDialoger.TextBoxDoubleClick;
 import org.apache.jmeter.samplers.SampleResult;
 import org.apache.jmeter.util.JMeterUtils;
 import org.apache.jorphan.gui.GuiUtils;
@@ -166,7 +167,7 @@ public abstract class SamplerResultTab i
                         new Functor("getValue") }, // $NON-NLS-1$
                 new Functor[] {
                         null, null }, new Class[] {
-                        String.class, String.class });
+                        String.class, String.class }, false);
         resHeadersModel = new ObjectTableModel(COLUMNS_HEADERS,
                 RowResult.class, // The object used for each row
                 new Functor[] {
@@ -174,14 +175,14 @@ public abstract class SamplerResultTab i
                         new Functor("getValue") }, // $NON-NLS-1$
                 new Functor[] {
                         null, null }, new Class[] {
-                        String.class, String.class });
+                        String.class, String.class }, false);
         resFieldsModel = new ObjectTableModel(COLUMNS_FIELDS, RowResult.class, 
// The object used for each row
                 new Functor[] {
                         new Functor("getKey"), // $NON-NLS-1$
                         new Functor("getValue") }, // $NON-NLS-1$
                 new Functor[] {
                         null, null }, new Class[] {
-                        String.class, String.class });
+                        String.class, String.class }, false);
     }
 
     public void clearData() {
@@ -395,11 +396,15 @@ public abstract class SamplerResultTab i
 
         // Set up the 1st table Result with empty headers
         tableResult = new JTable(resultModel);     
+        
tableResult.setToolTipText(JMeterUtils.getResString("textbox_tooltip_cell")); 
// $NON-NLS-1$
+        tableResult.addMouseListener(new TextBoxDoubleClick(tableResult));
         setFirstColumnPreferredSize(tableResult);
         RendererUtils.applyRenderers(tableResult, RENDERERS_RESULT);
 
         // Set up the 2nd table 
         tableResHeaders = new JTable(resHeadersModel);
+        
tableResHeaders.setToolTipText(JMeterUtils.getResString("textbox_tooltip_cell"));
 // $NON-NLS-1$
+        tableResHeaders.addMouseListener(new 
TextBoxDoubleClick(tableResHeaders));
         setFirstColumnPreferredSize(tableResHeaders);
         tableResHeaders.getTableHeader().setDefaultRenderer(
                 new HeaderAsPropertyRenderer());
@@ -407,6 +412,8 @@ public abstract class SamplerResultTab i
 
         // Set up the 3rd table 
         tableResFields = new JTable(resFieldsModel);
+        
tableResFields.setToolTipText(JMeterUtils.getResString("textbox_tooltip_cell"));
 // $NON-NLS-1$
+        tableResFields.addMouseListener(new 
TextBoxDoubleClick(tableResFields));
         setFirstColumnPreferredSize(tableResFields);
         tableResFields.getTableHeader().setDefaultRenderer(
                 new HeaderAsPropertyRenderer());

Added: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/util/TextBoxDialoger.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/util/TextBoxDialoger.java?rev=1021534&view=auto
==============================================================================
--- 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/util/TextBoxDialoger.java 
(added)
+++ 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/util/TextBoxDialoger.java 
Mon Oct 11 22:12:42 2010
@@ -0,0 +1,195 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed  under the  License is distributed on an "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+ * implied.
+ * 
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jmeter.gui.util;
+
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JEditorPane;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.table.TableModel;
+
+import org.apache.jmeter.gui.GuiPackage;
+import org.apache.jmeter.util.JMeterUtils;
+import org.apache.jorphan.gui.GuiUtils;
+
+/**
+ * Dialog text box to display some text in a box
+ *
+ */
+public class TextBoxDialoger implements ActionListener {
+    
+    private static final long serialVersionUID = 241L;
+    
+    private static final String CANCEL_COMMAND = "cancel_dialog"; // 
$NON-NLS-1$
+    
+    private static final String SAVE_CLOSE_COMMAND = "save_close_dialog"; // 
$NON-NLS-1$
+    
+    private static final String CLOSE_COMMAND = "close_dialog"; // $NON-NLS-1$
+    
+    private static JDialog dialog;
+    
+    private JEditorPane textBox;
+    
+    private String originalText;
+    
+    private boolean editable = false;
+
+    /**
+     * Dialog text box
+     */
+    public TextBoxDialoger() {
+        // Empty box
+        init(""); //$NON-NLS-1$
+    }
+    
+    /**
+     * Dialog text box
+     * @param text - text to display in a box
+     */
+    public TextBoxDialoger(String text) {
+        init(text);
+    }
+    
+    /**
+     * Dialog text box
+     * @param text - text to display in a box
+     * @param editable - allow to modify text
+     */
+    public TextBoxDialoger(String text, boolean editable) {
+        init(text);
+        this.editable = editable;
+    }
+    
+    private void init(String text) {
+        createDialogBox();
+        setTextBox(text);
+        dialog.setVisible(true);
+    }
+    
+    private void createDialogBox() {
+        JFrame mainFrame = GuiPackage.getInstance().getMainFrame();
+        String title = editable ? 
JMeterUtils.getResString("textbox_title_edit") //$NON-NLS-1$
+                : JMeterUtils.getResString("textbox_title_view"); //$NON-NLS-1$
+        dialog = new JDialog(mainFrame, title, true);  // modal dialog box
+        
+        textBox = new JEditorPane();
+        textBox.setEditable(editable);
+        
+        JScrollPane textBoxScrollPane = GuiUtils.makeScrollPane(textBox);
+        
+        JPanel btnBar = new JPanel();
+        btnBar.setLayout(new FlowLayout(FlowLayout.RIGHT));
+        if (editable) {
+            JButton cancelBtn = new 
JButton(JMeterUtils.getResString("textbox_cancel")); //$NON-NLS-1$
+            cancelBtn.setActionCommand(CANCEL_COMMAND);
+            cancelBtn.addActionListener(this);
+            JButton saveBtn = new 
JButton(JMeterUtils.getResString("textbox_save_close")); //$NON-NLS-1$
+            saveBtn.setActionCommand(SAVE_CLOSE_COMMAND);
+            saveBtn.addActionListener(this);
+
+            btnBar.add(cancelBtn);
+            btnBar.add(saveBtn);
+        } else {
+            JButton closeBtn = new 
JButton(JMeterUtils.getResString("textbox_close")); //$NON-NLS-1$
+            closeBtn.setActionCommand(CLOSE_COMMAND);
+            closeBtn.addActionListener(this);
+            
+            btnBar.add(closeBtn);
+        }
+
+        // Prepare dialog box
+        Container panel = dialog.getContentPane();
+        dialog.setMinimumSize(new Dimension(400, 250));
+        panel.add(textBoxScrollPane, BorderLayout.CENTER);
+        panel.add(btnBar, BorderLayout.SOUTH);
+        
+        // determine location on screen
+        Point p = mainFrame.getLocationOnScreen();
+        Dimension d1 = mainFrame.getSize();
+        Dimension d2 = dialog.getSize();
+        dialog.setLocation(p.x + (d1.width - d2.width) / 2, p.y + (d1.height - 
d2.height) / 2);
+        dialog.pack();
+    }
+    
+    private void closeDialog() {
+        dialog.setVisible(false);
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        String command = e.getActionCommand();
+
+        if (CANCEL_COMMAND.equals(command)) {
+            closeDialog();
+            setTextBox(originalText);
+        } else {
+            // must be CLOSE or SAVE_CLOSE COMMANDS
+            closeDialog();
+        }
+        
+    }
+    
+    public void setTextBox(String text) {
+        originalText = text; // text backup
+        textBox.setText(text);
+    }
+    
+    public String getTextBox() {
+        return textBox.getText();
+    }
+    
+    /**
+     * Class to display a dialog box and cell's content
+     * when double click on a table's cell
+     *
+     */
+    public static class TextBoxDoubleClick extends MouseAdapter {
+        
+        private JTable table = null;
+        
+        public TextBoxDoubleClick(JTable table) {
+            super();
+            this.table = table;
+        }
+
+        @Override
+        public void mouseClicked(MouseEvent e) {
+            if (e.getClickCount() == 2) { // double click
+                TableModel tm = table.getModel();
+                Object value = tm.getValueAt(table.getSelectedRow(), 
table.getSelectedColumn());
+                new TextBoxDialoger(value.toString(), false); // view only
+            }
+        }
+    }
+
+
+}

Propchange: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/util/TextBoxDialoger.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/util/TextBoxDialoger.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=1021534&r1=1021533&r2=1021534&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties 
(original)
+++ 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties 
Mon Oct 11 22:12:42 2010
@@ -900,6 +900,12 @@ testconfiguration=Test Configuration
 testplan.serialized=Run Thread Groups consecutively (i.e. run groups one at a 
time)
 testplan_comments=Comments\:
 testt=Test
+textbox_cancel=Cancel
+textbox_close=Close
+textbox_save_close=Save & Close
+textbox_title_edit=Edit text
+textbox_title_view=View text
+textbox_tooltip_cell=Double click to view/edit
 thread_delay_properties=Thread Delay Properties
 thread_group_title=Thread Group
 thread_properties=Thread Properties

Modified: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties?rev=1021534&r1=1021533&r2=1021534&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
 (original)
+++ 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
 Mon Oct 11 22:12:42 2010
@@ -808,6 +808,12 @@ test_plan=Plan de test
 test_plan_classpath_browse=Ajouter un r\u00E9pertoire ou un fichier 'jar' au 
'classpath'
 testplan.serialized=Lancer les groupes d'unit\u00E9s en s\u00E9rie 
(c'est-\u00E0-dire \: lance un groupe \u00E0 la fois)
 testplan_comments=Commentaires \:
+textbox_cancel=Annuler
+textbox_close=Fermer
+textbox_save_close=Enregistrer & Fermer
+textbox_title_edit=Editer texte
+textbox_title_view=Voir texte
+textbox_tooltip_cell=Double clic pour voir/editer
 thread_delay_properties=Propri\u00E9t\u00E9s de temporisation de l'unit\u00E9
 thread_group_title=Groupe d'unit\u00E9s
 thread_properties=Propri\u00E9t\u00E9s du groupe d'unit\u00E9s

Modified: 
jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/gui/ObjectTableModel.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/gui/ObjectTableModel.java?rev=1021534&r1=1021533&r2=1021534&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/gui/ObjectTableModel.java 
(original)
+++ 
jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/gui/ObjectTableModel.java 
Mon Oct 11 22:12:42 2010
@@ -50,6 +50,8 @@ public class ObjectTableModel extends De
     private transient ArrayList<Functor> writeFunctors = new 
ArrayList<Functor>();
 
     private transient Class<?> objectClass = null; // if provided
+    
+    private transient boolean cellEditable = true;
 
     /**
      * The ObjectTableModel is a TableModel whose rows are objects;
@@ -65,6 +67,24 @@ public class ObjectTableModel extends De
         this(headers, readFunctors, writeFunctors, editorClasses);
         this.objectClass=_objClass;
     }
+    
+    /**
+     * The ObjectTableModel is a TableModel whose rows are objects;
+     * columns are defined as Functors on the object.
+     *
+     * @param headers - Column names
+     * @param _objClass - Object class that will be used
+     * @param readFunctors - used to get the values
+     * @param writeFunctors - used to set the values
+     * @param editorClasses - class for each column
+     * @param cellEditable - if cell must editable (false to allow double 
click on cell)
+     */
+    public ObjectTableModel(String[] headers, Class<?> _objClass, Functor[] 
readFunctors, 
+            Functor[] writeFunctors, Class<?>[] editorClasses, boolean 
cellEditable) {
+        this(headers, readFunctors, writeFunctors, editorClasses);
+        this.objectClass=_objClass;
+        this.cellEditable = cellEditable;
+    }
 
     /**
      * The ObjectTableModel is a TableModel whose rows are objects;
@@ -176,7 +196,7 @@ public class ObjectTableModel extends De
     /** {...@inheritdoc} */
     @Override
     public boolean isCellEditable(int arg0, int arg1) {
-        return true;
+        return cellEditable;
     }
 
     /** {...@inheritdoc} */

Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=1021534&r1=1021533&r2=1021534&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Mon Oct 11 22:12:42 2010
@@ -123,6 +123,7 @@ To override the default local language f
 
 <h3>Listeners</h3>
 <ul>
+<li>View Results Tree - Add a dialog's text box on "Sampler result tab > 
Parsed" to display the long value with a double click on cell</li>
 </ul>
 
 <h3>Timers, Assertions, Config, Pre- &amp; Post-Processors</h3>



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to