summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2006-03-04 20:25:39 +0000
committerTom Tromey <tromey@redhat.com>2006-03-04 20:25:39 +0000
commit812c5a072d5f8830e68c254f813f03ac52c144bf (patch)
treeee334c7164a9fe3002c057a5223fa40588210777
parent2c072aeb6a4267018a95659d8b91849ffc297d07 (diff)
downloadclasspath-812c5a072d5f8830e68c254f813f03ac52c144bf.tar.gz
* java/beans/PropertyDescriptor.java (createPropertyEditor): New
method. (findConstructor): Likewise. (instantiateClass): Likewise.
-rw-r--r--ChangeLog7
-rw-r--r--java/beans/PropertyDescriptor.java67
2 files changed, 74 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index c44fcdda4..cb1f033e9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-03-04 Tom Tromey <tromey@redhat.com>
+
+ * java/beans/PropertyDescriptor.java (createPropertyEditor): New
+ method.
+ (findConstructor): Likewise.
+ (instantiateClass): Likewise.
+
2006-03-04 Audrius Meskauskas <AudriusA@Bioinformatics.org>
* gnu/java/rmi/dgc/DGCImpl.java: More comments, boilerplate fix.
diff --git a/java/beans/PropertyDescriptor.java b/java/beans/PropertyDescriptor.java
index a22d6252e..da2ca78ae 100644
--- a/java/beans/PropertyDescriptor.java
+++ b/java/beans/PropertyDescriptor.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package java.beans;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
@@ -344,6 +346,71 @@ public class PropertyDescriptor extends FeatureDescriptor
this.propertyEditorClass = propertyEditorClass;
}
+ /**
+ * Instantiate a property editor using the property editor class.
+ * If no property editor class has been set, this will return null.
+ * If the editor class has a public constructor which takes a single
+ * argument, that will be used and the bean parameter will be passed
+ * to it. Otherwise, a public no-argument constructor will be used,
+ * if available. This method will return null if no constructor is
+ * found or if construction fails for any reason.
+ * @param bean the argument to the constructor
+ * @return a new PropertyEditor, or null on error
+ * @since 1.5
+ */
+ public PropertyEditor createPropertyEditor(Object bean)
+ {
+ if (propertyEditorClass == null)
+ return null;
+ Constructor c = findConstructor(propertyEditorClass,
+ new Class[] { Object.class });
+ if (c != null)
+ return instantiateClass(c, new Object[] { bean });
+ c = findConstructor(propertyEditorClass, null);
+ if (c != null)
+ return instantiateClass(c, null);
+ return null;
+ }
+
+ // Helper method to look up a constructor and return null if it is not
+ // found.
+ private Constructor findConstructor(Class k, Class[] argTypes)
+ {
+ try
+ {
+ return k.getConstructor(argTypes);
+ }
+ catch (NoSuchMethodException _)
+ {
+ return null;
+ }
+ }
+
+ // Helper method to instantiate an object but return null on error.
+ private PropertyEditor instantiateClass(Constructor c, Object[] args)
+ {
+ try
+ {
+ return (PropertyEditor) c.newInstance(args);
+ }
+ catch (InstantiationException _)
+ {
+ return null;
+ }
+ catch (InvocationTargetException _)
+ {
+ return null;
+ }
+ catch (IllegalAccessException _)
+ {
+ return null;
+ }
+ catch (ClassCastException _)
+ {
+ return null;
+ }
+ }
+
private void findMethods(
Class beanClass,
String getMethodName1,