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]