jsalvata    2004/01/30 03:30:00

  Modified:    src/core/org/apache/jmeter/testbeans/gui PackageTest.java
                        TestBeanGUI.java TestElementEditor.java
                        BeanInfoSupport.java
               src/core/org/apache/jmeter/testbeans TestBeanBeanInfo.java
                        TestBean.java
  Log:
  Work around Introspector bug (BeanInfos were not being
  cached). Resolve bug uncovered by this workaround
  (BeanInfos were not being flushed from caches on
  language change).
  
  Handle undefined (e.g. non-editable) properties properly.
  
  Ensure different TestElement properties do not share a
  single TestElement as their value.
  
  Revision  Changes    Path
  1.4       +3 -3      
jakarta-jmeter/src/core/org/apache/jmeter/testbeans/gui/PackageTest.java
  
  Index: PackageTest.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/testbeans/gui/PackageTest.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- PackageTest.java  28 Jan 2004 10:35:12 -0000      1.3
  +++ PackageTest.java  30 Jan 2004 11:30:00 -0000      1.4
  @@ -113,7 +113,7 @@
                JMeterUtils.setLocale(new Locale(language,""));
                try
                {
  -                     beanInfo= Introspector.getBeanInfo(testBeanClass, 
TestBean.class);
  +                     beanInfo= Introspector.getBeanInfo(testBeanClass);
                        bundle= (ResourceBundle) beanInfo
                                .getBeanDescriptor()
                                .getValue(GenericTestBeanCustomizer.RESOURCE_BUNDLE);
  @@ -210,7 +210,7 @@
               try
               {
                   defaultBundle= (ResourceBundle)
  -                    Introspector.getBeanInfo(testBeanClass, TestBean.class)
  +                    Introspector.getBeanInfo(testBeanClass)
                       .getBeanDescriptor()
                       .getValue(GenericTestBeanCustomizer.RESOURCE_BUNDLE);
               }
  
  
  
  1.10      +14 -8     
jakarta-jmeter/src/core/org/apache/jmeter/testbeans/gui/TestBeanGUI.java
  
  Index: TestBeanGUI.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/testbeans/gui/TestBeanGUI.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- TestBeanGUI.java  28 Jan 2004 18:30:55 -0000      1.9
  +++ TestBeanGUI.java  30 Jan 2004 11:30:00 -0000      1.10
  @@ -130,8 +130,6 @@
       
       private BeanInfo beanInfo;
   
  -    private PropertyDescriptor[] properties;
  -
       private Class customizerClass;
   
       /**
  @@ -197,7 +195,7 @@
           // Get the beanInfo:
           try
           {
  -            beanInfo= Introspector.getBeanInfo(testBeanClass, TestBean.class);
  +            beanInfo= Introspector.getBeanInfo(testBeanClass);
           }
           catch (IntrospectionException e)
           {
  @@ -206,7 +204,6 @@
               throw new Error(e.toString()); // Programming error. Don't continue.
           }
   
  -        properties= beanInfo.getPropertyDescriptors();
           customizerClass= beanInfo.getBeanDescriptor().getCustomizerClass();
   
           // Creation of the customizer and GUI initialization is delayed until the 
first
  @@ -273,16 +270,25 @@
        */
       public void modifyTestElement(TestElement element)
       {
  -        super.configureTestElement(element);
  +        configureTestElement(element);
           
           // Copy all property values from the map into the element:
           PropertyDescriptor[] props= beanInfo.getPropertyDescriptors();
           for (int i=0; i<props.length; i++)
           {
               String name= props[i].getName();
  -            JMeterProperty jprop= wrapInProperty(propertyMap.get(name));
  -            jprop.setName(name);
  -            element.setProperty(jprop);
  +            Object value= propertyMap.get(name);
  +            log.debug("Modify "+name+" to "+value);
  +            if (value == null)
  +            {
  +                element.removeProperty(name);
  +            }
  +            else
  +            {
  +                JMeterProperty jprop= wrapInProperty(propertyMap.get(name));
  +                jprop.setName(name);
  +                element.setProperty(jprop);
  +            }
           }
       }
   
  
  
  
  1.4       +9 -3      
jakarta-jmeter/src/core/org/apache/jmeter/testbeans/gui/TestElementEditor.java
  
  Index: TestElementEditor.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/testbeans/gui/TestElementEditor.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TestElementEditor.java    28 Jan 2004 10:35:14 -0000      1.3
  +++ TestElementEditor.java    30 Jan 2004 11:30:00 -0000      1.4
  @@ -63,6 +63,8 @@
   import org.apache.jmeter.gui.GuiPackage;
   import org.apache.jmeter.gui.JMeterGUIComponent;
   import org.apache.jmeter.testelement.TestElement;
  +import org.apache.jorphan.logging.LoggingManager;
  +import org.apache.log.Logger;
   
   /**
    * Helper class to support using a TestElement GUI as a PropertyEditor when an
  @@ -70,6 +72,7 @@
    * on HTTPSampler).
    */
   public abstract class TestElementEditor extends PropertyEditorSupport {
  +    private static Logger log = LoggingManager.getLoggerForClass();
   
        private Class guiClass;
       private JMeterGUIComponent guiComponent;
  @@ -100,8 +103,10 @@
         * @see java.beans.PropertyEditor#getValue()
         */
        public Object getValue() {
  -             guiComponent.modifyTestElement(element);
  -        return element;
  +        TestElement newElement= guiComponent.createTestElement();
  +             guiComponent.modifyTestElement(newElement);
  +        log.debug("Got "+newElement);
  +        return newElement;
        }
   
        /**
  @@ -109,6 +114,7 @@
         * @see java.beans.PropertyEditor#setValue(java.lang.Object)
         */
        public void setValue(Object value) {
  +        log.debug("Set to "+value);
                if (value != null)
                {
               element= (TestElement)value;
  
  
  
  1.6       +28 -4     
jakarta-jmeter/src/core/org/apache/jmeter/testbeans/gui/BeanInfoSupport.java
  
  Index: BeanInfoSupport.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/testbeans/gui/BeanInfoSupport.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- BeanInfoSupport.java      28 Jan 2004 10:35:15 -0000      1.5
  +++ BeanInfoSupport.java      30 Jan 2004 11:30:00 -0000      1.6
  @@ -69,6 +69,8 @@
   import java.util.ResourceBundle;
   
   import org.apache.jmeter.util.JMeterUtils;
  +import org.apache.jmeter.util.LocaleChangeEvent;
  +import org.apache.jmeter.util.LocaleChangeListener;
   import org.apache.jorphan.logging.LoggingManager;
   import org.apache.log.Logger;
   
  @@ -99,7 +101,9 @@
    * example, uses it to obtain the group's display names from properties
    * <b><i>groupName</i>.displayName</b>.
    */
  -public abstract class BeanInfoSupport implements BeanInfo {
  +public abstract class BeanInfoSupport 
  +        implements BeanInfo, LocaleChangeListener
  +{
   
        private static transient Logger log = LoggingManager.getLoggerForClass();
   
  @@ -133,7 +137,7 @@
        protected BeanInfoSupport(Class beanClass) {
                
                this.beanClass= beanClass;
  -             
  +
                try {
                        rootBeanInfo= Introspector.getBeanInfo(
                                beanClass,
  @@ -170,7 +174,6 @@
                        for (int i=0; i<properties.length; i++)
                        {
                                String name= properties[i].getName();
  -                             //String s;
                        
                                try
                                {
  @@ -201,6 +204,8 @@
                {
                        log.warn("Localized strings not available for bean 
"+beanClass);
                }
  +
  +        JMeterUtils.addLocaleChangeListener(this);
        }
        
        /**
  @@ -279,4 +284,23 @@
        public PropertyDescriptor[] getPropertyDescriptors() {
                return rootBeanInfo.getPropertyDescriptors();
        }
  +
  +    /* (non-Javadoc)
  +     * @see 
org.apache.jmeter.util.LocaleChangeListener#localeChanged(org.apache.jmeter.util.LocaleChangeEvent)
  +     */
  +    public void localeChanged(LocaleChangeEvent event)
  +    {
  +        // This object is locale-dependent, so if the locale changes, we need
  +        // to remove it from the Introspector's BeanInfo cache:
  +        Introspector.flushFromCaches(beanClass);
  +        
  +        // Now this instance is no longer useful -- no more need to listen to
  +        // this events (and prevent being GCd):
  +        JMeterUtils.removeLocaleChangeListener(this);
  +
  +        // Note: another option --just as easy to implement-- would be to
  +        // regenerate the locale-dependent information. But this would require
  +        // any subclasses grabbing additional locale-dependent information to
  +        // override this method, while this solution will work without that.
  +    }
   }
  
  
  
  1.3       +9 -2      
jakarta-jmeter/src/core/org/apache/jmeter/testbeans/TestBeanBeanInfo.java
  
  Index: TestBeanBeanInfo.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/testbeans/TestBeanBeanInfo.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TestBeanBeanInfo.java     14 Jan 2004 23:10:30 -0000      1.2
  +++ TestBeanBeanInfo.java     30 Jan 2004 11:30:00 -0000      1.3
  @@ -69,6 +69,14 @@
    * This is the BeanInfo object for the TestBean class. It acts as a "stopper"
    * for the introspector: we don't want it to look at properties defined at this
    * or higher classes.
  + * <p>
  + * Note this is really needed since using Introspector.getBeanInfo with a
  + * stop class is not an option because:
  + * <ol>
  + * <li>The API does not define a 3-parameter getBeanInfo in which you can use
  + * a stop class AND flags. [Why? I guess this is a bug in the spec.]
  + * <li>java.beans.Introspector is buggy and, opposite to what's stated in the
  + * Javadocs, only results of getBeanInfo(Class) are actually cached.
    */
   public class TestBeanBeanInfo implements BeanInfo {
   
  @@ -123,7 +131,6 @@
         * @see java.beans.BeanInfo#getPropertyDescriptors()
         */
        public PropertyDescriptor[] getPropertyDescriptors() {
  -             // TODO Auto-generated method stub
                return new PropertyDescriptor[0];
        }
   }
  
  
  
  1.7       +2 -3      
jakarta-jmeter/src/core/org/apache/jmeter/testbeans/TestBean.java
  
  Index: TestBean.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/testbeans/TestBean.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- TestBean.java     28 Jan 2004 10:11:22 -0000      1.6
  +++ TestBean.java     30 Jan 2004 11:30:00 -0000      1.7
  @@ -111,8 +111,7 @@
                try
                {
                        // Obtain the property descriptors:
  -                     BeanInfo beanInfo= Introspector.getBeanInfo(this.getClass(),
  -                             TestBean.class);
  +                     BeanInfo beanInfo= Introspector.getBeanInfo(this.getClass());
                        PropertyDescriptor[] desc= beanInfo.getPropertyDescriptors();
                        descriptors= new HashMap();
                        for (int i=0; i<desc.length; i++)
  
  
  

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

Reply via email to