mstover1    2005/08/29 11:48:03

  Modified:    src/components/org/apache/jmeter/assertions
                        CompareAssertionResources.properties
                        CompareAssertionBeanInfo.java CompareAssertion.java
               src/core/org/apache/jmeter/samplers
                        DataStrippingSampleSender.java
                        SampleSenderFactory.java
               src/core/org/apache/jmeter/testbeans TestBeanHelper.java
                        BeanInfoSupport.java
               src/core/org/apache/jmeter/testbeans/gui
                        GenericTestBeanCustomizer.java
               src/core/org/apache/jmeter/reporters ResultCollector.java
               src/jorphan/org/apache/jorphan/gui ObjectTableModel.java
               src/core/org/apache/jmeter/save SaveService.java
                        OldSaveService.java
               src/core/org/apache/jmeter/testelement/property
                        AbstractProperty.java
  Added:       src/core/org/apache/jmeter/testbeans/gui TableEditor.java
                        TestBeanPropertyEditor.java
  Log:
  New support for Collections in TestBean framework.
  fix for reading back CSV-formatted jtl files with non-default settings.
  
  Revision  Changes    Path
  1.2       +4 -1      
jakarta-jmeter/src/components/org/apache/jmeter/assertions/CompareAssertionResources.properties
  
  Index: CompareAssertionResources.properties
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/assertions/CompareAssertionResources.properties,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- CompareAssertionResources.properties      15 Aug 2005 20:33:07 -0000      
1.1
  +++ CompareAssertionResources.properties      29 Aug 2005 18:48:02 -0000      
1.2
  @@ -3,4 +3,7 @@
   compareContent.displayName=Compare Content
   compareContent.shortDescription=Verify that all Samplers within the 
Controller return the same data
   compareTime.displayName=Compare Time
  -compareTime.shortDescription=Verify that all Samplers' return times are 
within a given number of milliseconds
  \ No newline at end of file
  +compareTime.shortDescription=Verify that all Samplers' return times are 
within a given number of milliseconds
  +comparison_filters.displayName=Comparison Filters
  +stringsToSkip.displayName=Regular Expression Filters
  +stringsToSkip.shortDescription=Regular expressions to match elements of 
response data to be ignored when comparing
  \ No newline at end of file
  
  
  
  1.2       +12 -1     
jakarta-jmeter/src/components/org/apache/jmeter/assertions/CompareAssertionBeanInfo.java
  
  Index: CompareAssertionBeanInfo.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/assertions/CompareAssertionBeanInfo.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- CompareAssertionBeanInfo.java     15 Aug 2005 20:33:07 -0000      1.1
  +++ CompareAssertionBeanInfo.java     29 Aug 2005 18:48:02 -0000      1.2
  @@ -1,14 +1,17 @@
   package org.apache.jmeter.assertions;
   
   import java.beans.PropertyDescriptor;
  +import java.util.Arrays;
   
   import org.apache.jmeter.testbeans.BeanInfoSupport;
  +import org.apache.jmeter.testbeans.gui.TableEditor;
   
   public class CompareAssertionBeanInfo extends BeanInfoSupport {
   
        public CompareAssertionBeanInfo() {
                super(CompareAssertion.class);
                createPropertyGroup("compareChoices", new String[] { 
"compareContent", "compareTime" });
  +             createPropertyGroup("comparison_filters", new 
String[]{"stringsToSkip"});
                PropertyDescriptor p = property("compareContent");
                p.setValue(NOT_UNDEFINED, Boolean.TRUE);
                p.setValue(DEFAULT, Boolean.TRUE);
  @@ -16,7 +19,15 @@
                p = property("compareTime");
                p.setValue(NOT_UNDEFINED, Boolean.TRUE);
                p.setValue(DEFAULT, new Long(-1));
  -             p.setValue(NOT_EXPRESSION, Boolean.FALSE);              
  +             p.setValue(NOT_EXPRESSION, Boolean.FALSE);      
  +             p = property("stringsToSkip");
  +             p.setPropertyEditorClass(TableEditor.class);
  +             p.setValue(TableEditor.CLASSNAME,"java.lang.String");
  +             p.setValue(TableEditor.HEADERS,new String[]{"Regex String"});
  +             p.setValue(NOT_UNDEFINED,Boolean.TRUE);
  +             p.setValue(DEFAULT,Arrays.asList(new String[]{"One","Two"}));
  +             p.setValue(MULTILINE,Boolean.TRUE);
  +             
        }
   
   }
  
  
  
  1.2       +17 -0     
jakarta-jmeter/src/components/org/apache/jmeter/assertions/CompareAssertion.java
  
  Index: CompareAssertion.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/assertions/CompareAssertion.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- CompareAssertion.java     15 Aug 2005 20:33:07 -0000      1.1
  +++ CompareAssertion.java     29 Aug 2005 18:48:02 -0000      1.2
  @@ -2,6 +2,7 @@
   
   import java.io.Serializable;
   import java.io.UnsupportedEncodingException;
  +import java.util.Collection;
   import java.util.Iterator;
   import java.util.LinkedList;
   import java.util.List;
  @@ -24,6 +25,8 @@
        private boolean compareContent = true;
   
        private long compareTime = -1;
  +     
  +     Collection stringsToSkip;
   
        public CompareAssertion() {
                super();
  @@ -175,4 +178,18 @@
                this.compareTime = compareTime;
        }
   
  +     /**
  +      * @return Returns the stringsToSkip.
  +      */
  +     public Collection getStringsToSkip() {
  +             return stringsToSkip;
  +     }
  +
  +     /**
  +      * @param stringsToSkip The stringsToSkip to set.
  +      */
  +     public void setStringsToSkip(Collection stringsToSkip) {
  +             this.stringsToSkip = stringsToSkip;
  +     }
  +
   }
  
  
  
  1.2       +19 -6     
jakarta-jmeter/src/core/org/apache/jmeter/samplers/DataStrippingSampleSender.java
  
  Index: DataStrippingSampleSender.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/samplers/DataStrippingSampleSender.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DataStrippingSampleSender.java    25 Aug 2005 21:04:59 -0000      1.1
  +++ DataStrippingSampleSender.java    29 Aug 2005 18:48:02 -0000      1.2
  @@ -19,26 +19,39 @@
        transient private static Logger log = 
LoggingManager.getLoggerForClass();
        
        RemoteSampleListener listener;
  +     SampleSender decoratedSender;
   
        public DataStrippingSampleSender(RemoteSampleListener listener) {
                this.listener = listener;
        }
  +     
  +     public DataStrippingSampleSender(SampleSender decorate)
  +     {
  +             decoratedSender = decorate;
  +     }
   
        public void testEnded() {
  -
  +             if(decoratedSender != null) decoratedSender.testEnded();
        }
   
        public void testEnded(String host) {
  -
  +             if(decoratedSender != null) decoratedSender.testEnded(host);
        }
   
        public void SampleOccurred(SampleEvent e) {
                //Strip the response data before wiring, but only for a 
successful request.
                if(e.getResult().isSuccessful()) 
e.getResult().setResponseData(new byte[0]);
  -             try {
  -                     listener.sampleOccurred(e);
  -             } catch (RemoteException e1) {
  -                     log.error("Error sending sample result over network 
",e1);
  +             if(decoratedSender == null)
  +             {
  +                     try {
  +                             listener.sampleOccurred(e);
  +                     } catch (RemoteException e1) {
  +                             log.error("Error sending sample result over 
network ",e1);
  +                     }
  +             }
  +             else
  +             {
  +                     decoratedSender.SampleOccurred(e);
                }
        }
   
  
  
  
  1.4       +2 -0      
jakarta-jmeter/src/core/org/apache/jmeter/samplers/SampleSenderFactory.java
  
  Index: SampleSenderFactory.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/samplers/SampleSenderFactory.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SampleSenderFactory.java  25 Aug 2005 21:04:59 -0000      1.3
  +++ SampleSenderFactory.java  29 Aug 2005 18:48:02 -0000      1.4
  @@ -46,6 +46,8 @@
                } else if(type.equalsIgnoreCase("Full")) {
                        StandardSampleSender s = new 
StandardSampleSender(listener);
                        return s;
  +             }  else if(type.equalsIgnoreCase("Stripped Batch")) {
  +                     return new DataStrippingSampleSender(new 
BatchSampleSender(listener));
                } else {
                        return new DataStrippingSampleSender(listener);
                }
  
  
  
  1.4       +50 -3     
jakarta-jmeter/src/core/org/apache/jmeter/testbeans/TestBeanHelper.java
  
  Index: TestBeanHelper.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/testbeans/TestBeanHelper.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TestBeanHelper.java       12 Jul 2005 20:50:43 -0000      1.3
  +++ TestBeanHelper.java       29 Aug 2005 18:48:02 -0000      1.4
  @@ -22,9 +22,15 @@
   import java.beans.PropertyDescriptor;
   import java.lang.reflect.InvocationTargetException;
   import java.lang.reflect.Method;
  +import java.util.Collection;
  +import java.util.LinkedList;
   
  +import org.apache.jmeter.testbeans.gui.TableEditor;
   import org.apache.jmeter.testelement.TestElement;
  +import org.apache.jmeter.testelement.property.CollectionProperty;
   import org.apache.jmeter.testelement.property.JMeterProperty;
  +import org.apache.jmeter.testelement.property.MultiProperty;
  +import org.apache.jmeter.testelement.property.PropertyIterator;
   import org.apache.jorphan.logging.LoggingManager;
   import org.apache.jorphan.util.Converter;
   import org.apache.log.Logger;
  @@ -67,7 +73,8 @@
                                // Obtain a value of the appropriate type for 
this property.
                                JMeterProperty jprop = 
el.getProperty(desc[x].getName());
                                Class type = desc[x].getPropertyType();
  -                             Object value = 
Converter.convert(jprop.getStringValue(), type);
  +                             Object value = null;
  +                             value = unwrapProperty(desc[x], jprop, type);
   
                                if (log.isDebugEnabled())
                                        log.debug("Setting " + jprop.getName() 
+ "=" + value);
  @@ -86,6 +93,46 @@
        }
   
        /**
  +      * @param desc
  +      * @param x
  +      * @param jprop
  +      * @param type
  +      * @return
  +      */
  +     private static Object unwrapProperty(PropertyDescriptor desc, 
JMeterProperty jprop, Class type) {
  +             Object value;
  +             if(jprop instanceof MultiProperty)
  +             {
  +                     value = 
unwrapCollection((MultiProperty)jprop,(String)desc.getValue(TableEditor.CLASSNAME));
  +             }
  +             else value = Converter.convert(jprop.getStringValue(), type);
  +             return value;
  +     }
  +     
  +     private static Object unwrapCollection(MultiProperty prop,String type)
  +     {
  +             if(prop instanceof CollectionProperty)
  +             {
  +                     Collection values = new LinkedList();
  +                     PropertyIterator iter = prop.iterator();
  +                     while(iter.hasNext())
  +                     {
  +                             JMeterProperty propVal = iter.next();
  +                             try
  +                             {
  +                                     
values.add(Converter.convert(propVal.getObjectValue(), Class.forName(type)));
  +                             }
  +                             catch(Exception e)
  +                             {
  +                                     log.error("Couldn't convert object: " + 
propVal.getObjectValue() + " to " + type);
  +                             }
  +                     }
  +                     return values;
  +             }
  +             return null;
  +     }
  +
  +     /**
         * Utility method that invokes a method and does the error handling 
around
         * the invocation.
         * 
  
  
  
  1.10      +4 -2      
jakarta-jmeter/src/core/org/apache/jmeter/testbeans/BeanInfoSupport.java
  
  Index: BeanInfoSupport.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/testbeans/BeanInfoSupport.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- BeanInfoSupport.java      12 Jul 2005 20:50:43 -0000      1.9
  +++ BeanInfoSupport.java      29 Aug 2005 18:48:02 -0000      1.10
  @@ -72,6 +72,8 @@
        public static final String NOT_EXPRESSION = 
GenericTestBeanCustomizer.NOT_EXPRESSION;
   
        public static final String NOT_OTHER = 
GenericTestBeanCustomizer.NOT_OTHER;
  +     
  +     public static final String MULTILINE = "multiline";
   
        public static final String DEFAULT = GenericTestBeanCustomizer.DEFAULT;
   
  
  
  
  1.10      +38 -21    
jakarta-jmeter/src/core/org/apache/jmeter/testbeans/gui/GenericTestBeanCustomizer.java
  
  Index: GenericTestBeanCustomizer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/testbeans/gui/GenericTestBeanCustomizer.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- GenericTestBeanCustomizer.java    12 Jul 2005 20:51:01 -0000      1.9
  +++ GenericTestBeanCustomizer.java    29 Aug 2005 18:48:02 -0000      1.10
  @@ -111,6 +111,8 @@
        public static final String NOT_OTHER = "notOther";
   
        public static final String DEFAULT = "default";
  +     
  +     public static final String MULTILINE = "multiline";
   
        public static final String RESOURCE_BUNDLE = "resourceBundle";
   
  @@ -213,14 +215,18 @@
                                editors[i] = null;
                                continue;
                        }
  -
  +                     String[] tags = 
mergeTags(propertyEditor,descriptors[i]);
                        if (!propertyEditor.supportsCustomEditor()) {
  -                             propertyEditor = 
createWrapperEditor(propertyEditor, descriptors[i]);
  +                             propertyEditor = 
createWrapperEditor(propertyEditor, descriptors[i],tags);
   
                                if (log.isDebugEnabled()) {
                                        log.debug("Editor for property " + name 
+ " is wrapped in " + propertyEditor);
                                }
                        }
  +                     if(propertyEditor instanceof TestBeanPropertyEditor)
  +                     {
  +                             
((TestBeanPropertyEditor)propertyEditor).setDescriptor(descriptors[i]);
  +                     }
                        if (propertyEditor.getCustomEditor() instanceof 
JScrollPane) {
                                scrollerCount++;
                        }
  @@ -251,22 +257,7 @@
         * @param descriptor
         * @return
         */
  -     private WrapperEditor createWrapperEditor(PropertyEditor typeEditor, 
PropertyDescriptor descriptor) {
  -             String[] editorTags = typeEditor.getTags();
  -             String[] additionalTags = (String[]) descriptor.getValue(TAGS);
  -             String[] tags = null;
  -             if (editorTags == null)
  -                     tags = additionalTags;
  -             else if (additionalTags == null)
  -                     tags = editorTags;
  -             else {
  -                     tags = new String[editorTags.length + 
additionalTags.length];
  -                     int j = 0;
  -                     for (int i = 0; i < editorTags.length; i++)
  -                             tags[j++] = editorTags[i];
  -                     for (int i = 0; i < additionalTags.length; i++)
  -                             tags[j++] = additionalTags[i];
  -             }
  +     private WrapperEditor createWrapperEditor(PropertyEditor typeEditor, 
PropertyDescriptor descriptor,String[] tags) {
   
                boolean notNull = 
Boolean.TRUE.equals(descriptor.getValue(NOT_UNDEFINED));
                boolean notExpression = 
Boolean.TRUE.equals(descriptor.getValue(NOT_EXPRESSION));
  @@ -293,6 +284,30 @@
        }
   
        /**
  +      * @param typeEditor
  +      * @param descriptor
  +      * @return
  +      */
  +     protected String[] mergeTags(PropertyEditor typeEditor, 
PropertyDescriptor descriptor) {
  +             String[] editorTags = typeEditor.getTags();
  +             String[] additionalTags = (String[]) descriptor.getValue(TAGS);
  +             String[] tags = null;
  +             if (editorTags == null)
  +                     tags = additionalTags;
  +             else if (additionalTags == null)
  +                     tags = editorTags;
  +             else {
  +                     tags = new String[editorTags.length + 
additionalTags.length];
  +                     int j = 0;
  +                     for (int i = 0; i < editorTags.length; i++)
  +                             tags[j++] = editorTags[i];
  +                     for (int i = 0; i < additionalTags.length; i++)
  +                             tags[j++] = additionalTags[i];
  +             }
  +             return tags;
  +     }
  +
  +     /**
         * Set the value of the i-th property, properly reporting a possible
         * failure.
         * 
  @@ -425,7 +440,9 @@
                        Component customEditor = editors[i].getCustomEditor();
   
                        boolean multiLineEditor = false;
  -                     if (customEditor.getPreferredSize().height > 50 || 
customEditor instanceof JScrollPane) {
  +                     if (descriptors[i].getValue(MULTILINE) != null ||
  +                                     customEditor.getPreferredSize().height 
> 50 || 
  +                                     customEditor instanceof JScrollPane) {
                                // TODO: the above works in the current 
situation, but it's
                                // just a hack. How to get each editor to 
report whether it
                                // wants to grow bigger? Whether the property 
label should
  
  
  
  1.1                  
jakarta-jmeter/src/core/org/apache/jmeter/testbeans/gui/TableEditor.java
  
  Index: TableEditor.java
  ===================================================================
  package org.apache.jmeter.testbeans.gui;
  
  import java.awt.BorderLayout;
  import java.awt.Component;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.awt.event.FocusEvent;
  import java.awt.event.FocusListener;
  import java.beans.PropertyDescriptor;
  import java.beans.PropertyEditorSupport;
  import java.lang.reflect.Method;
  
  import javax.swing.CellEditor;
  import javax.swing.JButton;
  import javax.swing.JComponent;
  import javax.swing.JPanel;
  import javax.swing.JScrollPane;
  import javax.swing.JTable;
  import javax.swing.ListSelectionModel;
  import javax.swing.event.TableModelEvent;
  import javax.swing.event.TableModelListener;
  
  import org.apache.jmeter.util.JMeterUtils;
  import org.apache.jorphan.gui.ObjectTableModel;
  import org.apache.jorphan.logging.LoggingManager;
  import org.apache.jorphan.reflect.Functor;
  import org.apache.log.Logger;
  
  public class TableEditor extends PropertyEditorSupport implements 
FocusListener,TestBeanPropertyEditor,TableModelListener{
        Logger log = LoggingManager.getLoggerForClass();
        
        public static final String CLASSNAME = "tableObject.classname";
        public static final String HEADERS = "table.headers";
        public static final String OBJECT_PROPERTIES = "tableObject.properties";
        
        JTable table;
        ObjectTableModel model;
        Class clazz;
        PropertyDescriptor descriptor;
        JButton addButton,removeButton,clearButton;
  
        public TableEditor() {
                addButton = new JButton(JMeterUtils.getResString("add"));
                addButton.addActionListener(new AddListener());
                removeButton = new JButton(JMeterUtils.getResString("remove"));
                removeButton.addActionListener(new RemoveListener());
                clearButton = new JButton(JMeterUtils.getResString("clear"));
                clearButton.addActionListener(new ClearListener());
        }
  
        /* (non-Javadoc)
         * @see java.beans.PropertyEditor#getAsText()
         */
        public String getAsText() {
                return null;
        }
  
        /* (non-Javadoc)
         * @see java.beans.PropertyEditor#getCustomEditor()
         */
        public Component getCustomEditor() {
                JComponent pane = makePanel();
                pane.doLayout();
                pane.validate();
                return pane;
        }
        
        private JComponent makePanel()
        {
                JPanel p = new JPanel(new BorderLayout());
                JScrollPane scroller = new JScrollPane(table);
                scroller.setPreferredSize(scroller.getMinimumSize());
                p.add(scroller,BorderLayout.CENTER);
                JPanel south = new JPanel();
                south.add(addButton);
                south.add(removeButton);
                south.add(clearButton);
                p.add(south,BorderLayout.SOUTH);
                return p;
        }
  
        /* (non-Javadoc)
         * @see java.beans.PropertyEditor#getValue()
         */
        public Object getValue() {
                return model.getObjectList();
        }
  
        /* (non-Javadoc)
         * @see java.beans.PropertyEditor#setAsText(java.lang.String)
         */
        public void setAsText(String text) throws IllegalArgumentException {
                //not interested in this method.                
        }
  
        /* (non-Javadoc)
         * @see java.beans.PropertyEditor#setValue(java.lang.Object)
         */
        public void setValue(Object value) {
                if(value != null)
                {
                        model.setRows((Iterable)value);
                }
                else model.clearData();
                this.firePropertyChange();
        }
  
        /* (non-Javadoc)
         * @see java.beans.PropertyEditor#supportsCustomEditor()
         */
        public boolean supportsCustomEditor() {
                return true;
        }
  
        /**
         * For the table editor, the tag must simply be the name of the class 
of object it will hold 
         * where each row holds one object. 
         */
        public void setDescriptor(PropertyDescriptor descriptor) {
                try {
                        this.descriptor = descriptor;
                        clazz = 
Class.forName((String)descriptor.getValue(CLASSNAME));
                        initializeModel();
                } catch (ClassNotFoundException e) {
                        throw new RuntimeException("The Table Editor requires 
one TAG be set - the name of the object to represent a row",e);
                }
        }
        
        void initializeModel()
        {
                if(clazz == String.class)
                {
                        model = new 
ObjectTableModel((String[])descriptor.getValue(HEADERS),new Functor[0],new 
Functor[0],new Class[]{String.class});
                        model.addTableModelListener(this);
                }
                else
                {
                        String[] props = 
(String[])descriptor.getValue(OBJECT_PROPERTIES);
                        Functor[] writers = new Functor[props.length];
                        Functor[] readers = new Functor[props.length];
                        Class[] editors = new Class[props.length];
                        int count = 0;
                        for(String propName : props)
                        {
                                propName = 
propName.substring(0,1).toUpperCase() + propName.substring(1);
                                writers[count] = createWriter(clazz,propName);
                                readers[count] = createReader(clazz,propName);
                                editors[count] = 
getArgForWriter(clazz,propName);
                                count++;
                        }
                        model = new 
ObjectTableModel((String[])descriptor.getValue(HEADERS),readers,writers,editors);
                        model.addTableModelListener(this);
                }
                table = new JTable(model);
                table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                table.addFocusListener(this);
        }
        
        Functor createWriter(Class c,String propName)
        {
                String setter = "set" + propName;
                return new Functor(setter);
        }
        
        Functor createReader(Class c,String propName)
        {
                String getter = "get" + propName;
                try
                {
                        c.getMethod(getter,new Class[0]);
                        return new Functor(getter);
                }
                catch(Exception e) { return new Functor("is" + propName); }
        }
        
        Class getArgForWriter(Class c,String propName)
        {
                String setter = "set" + propName;
                for(Method m : c.getMethods())
                {
                        if(m.getName().equals(setter))
                        {
                                return m.getParameterTypes()[0];
                        }
                }
                return null;
        }
  
        /* (non-Javadoc)
         * @see 
javax.swing.event.TableModelListener#tableChanged(javax.swing.event.TableModelEvent)
         */
        public void tableChanged(TableModelEvent e) {
                this.firePropertyChange();              
        }
  
        /* (non-Javadoc)
         * @see 
java.awt.event.FocusListener#focusGained(java.awt.event.FocusEvent)
         */
        public void focusGained(FocusEvent e) {
                
        }
  
        /* (non-Javadoc)
         * @see 
java.awt.event.FocusListener#focusLost(java.awt.event.FocusEvent)
         */
        public void focusLost(FocusEvent e) {
                CellEditor ce = 
table.getCellEditor(table.getEditingRow(),table.getEditingColumn());
                Component editor = table.getEditorComponent();
                if(ce != null && (editor == null || editor != 
e.getOppositeComponent()))
                {
                        ce.stopCellEditing();
                }
                else if(editor != null)
                {
                        editor.addFocusListener(this);
                }
                this.firePropertyChange();
        }
        
        private class AddListener implements ActionListener
        {
                public void actionPerformed(ActionEvent e)
                {
                        try
                        {
                                model.addRow(clazz.newInstance());
                        }catch(Exception err)
                        {
                                log.error("The class type given to TableEditor 
was not instantiable. ",err);
                        }
                }
        }
        
        private class RemoveListener implements ActionListener
        {
                public void actionPerformed(ActionEvent e)
                {
                        model.removeRow(table.getSelectedRow());
                }
        }
        
        private class ClearListener implements ActionListener
        {
                public void actionPerformed(ActionEvent e)
                {
                        model.clearData();
                }
        }
  
  }
  
  
  
  1.1                  
jakarta-jmeter/src/core/org/apache/jmeter/testbeans/gui/TestBeanPropertyEditor.java
  
  Index: TestBeanPropertyEditor.java
  ===================================================================
  package org.apache.jmeter.testbeans.gui;
  
  import java.beans.PropertyDescriptor;
  import java.beans.PropertyEditor;
  
  public interface TestBeanPropertyEditor extends PropertyEditor {
        
        public void setDescriptor(PropertyDescriptor descriptor);
  
  }
  
  
  
  1.54      +1 -1      
jakarta-jmeter/src/core/org/apache/jmeter/reporters/ResultCollector.java
  
  Index: ResultCollector.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/reporters/ResultCollector.java,v
  retrieving revision 1.53
  retrieving revision 1.54
  diff -u -r1.53 -r1.54
  --- ResultCollector.java      12 Jul 2005 20:50:43 -0000      1.53
  +++ ResultCollector.java      29 Aug 2005 18:48:02 -0000      1.54
  @@ -193,7 +193,7 @@
                                        dataReader = new BufferedReader(new 
FileReader(getFilename()));
                                        String line;
                                        while ((line = dataReader.readLine()) 
!= null) {
  -                                             
sendToVisualizer(OldSaveService.makeResultFromDelimitedString(line));
  +                                             
sendToVisualizer(OldSaveService.makeResultFromDelimitedString(line,getSaveConfig()));
                                        }
                                        parsedOK = true;
                                }
  
  
  
  1.8       +23 -3     
jakarta-jmeter/src/jorphan/org/apache/jorphan/gui/ObjectTableModel.java
  
  Index: ObjectTableModel.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/jorphan/org/apache/jorphan/gui/ObjectTableModel.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ObjectTableModel.java     12 Jul 2005 20:50:59 -0000      1.7
  +++ ObjectTableModel.java     29 Aug 2005 18:48:02 -0000      1.8
  @@ -69,6 +69,15 @@
                objects.add(value);
                super.fireTableRowsInserted(objects.size() - 1, objects.size());
        }
  +     
  +     public void setRows(Iterable rows)
  +     {
  +             clearData();
  +             for(Object val : rows)
  +             {
  +                     addRow(val);
  +             }
  +     }
   
        public void insertRow(Object value, int index) {
                objects.add(index, value);
  @@ -105,8 +114,10 @@
        public Object getValueAt(int row, int col) {
                log.debug("Getting row value");
                Object value = objects.get(row);
  +             if(headers.size() == 1 && col >= readFunctors.size())
  +                     return value;
                Functor getMethod = (Functor) readFunctors.get(col);
  -             if (getMethod != null) {
  +             if (getMethod != null && value != null) {
                        return getMethod.invoke(value);
                }
                return null;
  @@ -152,6 +163,10 @@
                                        super.fireTableDataChanged();
                                }
                        }
  +                     else if(headers.size() == 1)
  +                     {
  +                             objects.set(row,cellValue);
  +                     }
                }
        }
   
  @@ -161,5 +176,10 @@
        public Class getColumnClass(int arg0) {
                return (Class) classes.get(arg0);
        }
  +     
  +     public List getObjectList()
  +     {
  +             return objects;
  +     }
   
   }
  
  
  
  1.69      +1 -1      
jakarta-jmeter/src/core/org/apache/jmeter/save/SaveService.java
  
  Index: SaveService.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/save/SaveService.java,v
  retrieving revision 1.68
  retrieving revision 1.69
  diff -u -r1.68 -r1.69
  --- SaveService.java  12 Jul 2005 22:50:33 -0000      1.68
  +++ SaveService.java  29 Aug 2005 18:48:02 -0000      1.69
  @@ -225,7 +225,7 @@
                checkVersion(IntegerPropertyConverter.class, "1.4");
                checkVersion(LongPropertyConverter.class, "1.4");
                checkVersion(MultiPropertyConverter.class, "1.4");
  -             checkVersion(SampleResultConverter.class, "1.9");
  +             checkVersion(SampleResultConverter.class, "1.10");
                /*
                 * Should check this, but tricky to do, because not built until 
later.
                 * 
  
  
  
  1.11      +21 -16    
jakarta-jmeter/src/core/org/apache/jmeter/save/OldSaveService.java
  
  Index: OldSaveService.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/save/OldSaveService.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- OldSaveService.java       25 Aug 2005 21:05:00 -0000      1.10
  +++ OldSaveService.java       29 Aug 2005 18:48:03 -0000      1.11
  @@ -74,6 +74,11 @@
         */
        private OldSaveService() {
        }
  +     
  +     public static SampleResult makeResultFromDelimitedString(String delim)
  +     {
  +             return makeResultFromDelimitedString(delim,_saveConfig);
  +     }
   
        /**
         * Make a SampleResult given a delimited string.
  @@ -81,65 +86,65 @@
         * @param delim
         * @return SampleResult
         */
  -     public static SampleResult makeResultFromDelimitedString(String delim) {
  +     public static SampleResult makeResultFromDelimitedString(String 
delim,SampleSaveConfiguration saveConfig) {
                SampleResult result = null;
                long timeStamp = 0;
                long elapsed = 0;
  -             StringTokenizer splitter = new StringTokenizer(delim, 
_saveConfig.getDelimiter());
  +             StringTokenizer splitter = new StringTokenizer(delim, 
saveConfig.getDelimiter());
                String text = null;
   
                try {
  -                     if (_saveConfig.printMilliseconds()) {
  +                     if (saveConfig.printMilliseconds()) {
                                text = splitter.nextToken();
                                timeStamp = Long.parseLong(text);
  -                     } else if (_saveConfig.formatter() != null) {
  +                     } else if (saveConfig.formatter() != null) {
                                text = splitter.nextToken();
  -                             Date stamp = 
_saveConfig.formatter().parse(text);
  +                             Date stamp = saveConfig.formatter().parse(text);
                                timeStamp = stamp.getTime();
                        }
   
  -                     if (_saveConfig.saveTime()) {
  +                     if (saveConfig.saveTime()) {
                                text = splitter.nextToken();
                                elapsed = Long.parseLong(text);
                        }
   
                        result = new SampleResult(timeStamp, elapsed);
   
  -                     if (_saveConfig.saveContentLength()) {
  +                     if (saveConfig.saveContentLength()) {
                                text = splitter.nextToken();
                                result.setContentLength(Converter.getInt(text));
                        }
   
  -                     if (_saveConfig.saveLabel()) {
  +                     if (saveConfig.saveLabel()) {
                                text = splitter.nextToken();
                                result.setSampleLabel(text);
                        }
  -                     if (_saveConfig.saveCode()) {
  +                     if (saveConfig.saveCode()) {
                                text = splitter.nextToken();
                                result.setResponseCode(text);
                        }
   
  -                     if (_saveConfig.saveMessage()) {
  +                     if (saveConfig.saveMessage()) {
                                text = splitter.nextToken();
                                result.setResponseMessage(text);
                        }
   
  -                     if (_saveConfig.saveThreadName()) {
  +                     if (saveConfig.saveThreadName()) {
                                text = splitter.nextToken();
                                result.setThreadName(text);
                        }
   
  -                     if (_saveConfig.saveDataType()) {
  +                     if (saveConfig.saveDataType()) {
                                text = splitter.nextToken();
                                result.setDataType(text);
                        }
   
  -                     if (_saveConfig.saveSuccess()) {
  +                     if (saveConfig.saveSuccess()) {
                                text = splitter.nextToken();
                                
result.setSuccessful(Boolean.valueOf(text).booleanValue());
                        }
   
  -                     if (_saveConfig.saveAssertionResultsFailureMessage()) {
  +                     if (saveConfig.saveAssertionResultsFailureMessage()) {
                                text = splitter.nextToken();
                        }
                } catch (NumberFormatException e) {
  
  
  
  1.24      +5 -3      
jakarta-jmeter/src/core/org/apache/jmeter/testelement/property/AbstractProperty.java
  
  Index: AbstractProperty.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/testelement/property/AbstractProperty.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- AbstractProperty.java     12 Jul 2005 20:50:25 -0000      1.23
  +++ AbstractProperty.java     29 Aug 2005 18:48:03 -0000      1.24
  @@ -38,6 +38,7 @@
   
   package org.apache.jmeter.testelement.property;
   
  +import java.util.ArrayList;
   import java.util.Collection;
   import java.util.Iterator;
   import java.util.Map;
  @@ -324,7 +325,8 @@
                                try {
                                        newColl = (Collection) 
coll.getClass().newInstance();
                                } catch (Exception e) {
  -                                     log.error("Bad collection", e);
  +                                     newColl = new ArrayList();
  +                                     log.warn("Bad collection", e);
                                }
                        }
                        newColl.add(convertObject(item));
  
  
  

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

Reply via email to