java.beans
Class PropertyDescriptor
PropertyDescriptor describes information about a JavaBean property,
by which we mean a property that has been exposed via a pair of
get and set methods. (There may be no get method, which means
the property is write-only, or no set method, which means the
the property is read-only.)
The constraints put on get and set methods are:
- A get method must have signature
<propertyType> <getMethodName>()
- A set method must have signature
void <setMethodName>(<propertyType>)
- Either method type may throw any exception.
- Both methods must be public.
attributeNames , getDisplayName , getName , getShortDescription , getValue , isExpert , isHidden , isPreferred , setDisplayName , setExpert , setHidden , setName , setPreferred , setShortDescription , setValue |
clone , equals , extends Object> getClass , finalize , hashCode , notify , notifyAll , toString , wait , wait , wait |
PropertyDescriptor
public PropertyDescriptor(String name,
Class> beanClass)
throws IntrospectionException
Create a new PropertyDescriptor by introspection.
This form of constructor creates the PropertyDescriptor by
looking for a getter method named
get<name>()
(or, optionally, if the property is boolean,
is<name>()
) and
set<name>()
in class
<beanClass>
, where <name> has its
first letter capitalized by the constructor.
Note that using this constructor the given property must be read-
and
writeable. If the implementation does not both, a read and a write method, an
IntrospectionException
is thrown.
Implementation note: If there is both are both isXXX and
getXXX methods, the former is used in preference to the latter.
We do not check that an isXXX method returns a boolean. In both
cases, this matches the behaviour of JDK 1.4
name
- the programmatic name of the property, usually
starting with a lowercase letter (e.g. fooManChu
instead of FooManChu).beanClass
- the class the get and set methods live in.
PropertyDescriptor
public PropertyDescriptor(String name,
Class> beanClass,
String getMethodName,
String setMethodName)
throws IntrospectionException
Create a new PropertyDescriptor by introspection.
This form of constructor allows you to specify the
names of the get and set methods to search for.
Implementation note: If there is a get method (or
boolean isXXX() method), then the return type of that method
is used to find the set method. If there is no get method,
then the set method is searched for exhaustively.
Spec note:
If there is no get method and multiple set methods with
the same name and a single parameter (different type of course),
then an IntrospectionException is thrown. While Sun's spec
does not state this, it can make Bean behavior different on
different systems (since method order is not guaranteed) and as
such, can be treated as a bug in the spec. I am not aware of
whether Sun's implementation catches this.
name
- the programmatic name of the property, usually
starting with a lowercase letter (e.g. fooManChu
instead of FooManChu).beanClass
- the class the get and set methods live in.getMethodName
- the name of the get method or null
if the property is write-only.setMethodName
- the name of the set method or null
if the property is read-only.
PropertyDescriptor
public PropertyDescriptor(String name,
Method readMethod,
Method writeMethod)
throws IntrospectionException
Create a new PropertyDescriptor using explicit Methods.
Note that the methods will be checked for conformance to standard
Property method rules, as described above at the top of this class.
It is possible to call this method with both Method
arguments
being null
. In such a case the property type is null
.
name
- the programmatic name of the property, usually
starting with a lowercase letter (e.g. fooManChu
instead of FooManChu).readMethod
- the read method or null
if the property is write-only.writeMethod
- the write method or null
if the property is read-only.
createPropertyEditor
public PropertyEditor createPropertyEditor(Object bean)
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.
bean
- the argument to the constructor
- a new PropertyEditor, or null on error
equals
public boolean equals(Object o)
Compares this
PropertyDescriptor
against the
given object.
Two PropertyDescriptors are equals if
- the read methods are equal
- the write methods are equal
- the property types are equals
- the property editor classes are equal
- the flags (constrained and bound) are equal
- equals in interface Object
- Whether both objects are equal according to the rules given above.
getPropertyType
public Class> getPropertyType()
Get the property type.
This is the type the get method returns and the set method
takes in.
getReadMethod
public Method getReadMethod()
Get the get method. Why they call it readMethod here and
get everywhere else is beyond me.
getWriteMethod
public Method getWriteMethod()
Get the set method. Why they call it writeMethod here and
set everywhere else is beyond me.
isBound
public boolean isBound()
Get whether the property is bound. Defaults to false. *
isConstrained
public boolean isConstrained()
Get whether the property is constrained. Defaults to false. *
setBound
public void setBound(boolean bound)
Set whether the property is bound.
As long as the the bean implements addPropertyChangeListener() and
removePropertyChangeListener(), setBound(true) may safely be called.
If these things are not true, then the behavior of the system
will be undefined.
When a property is bound, its set method is required to fire the
PropertyChangeListener.propertyChange())
event
after the value has changed.
bound
- whether the property is bound or not.
setConstrained
public void setConstrained(boolean constrained)
Set whether the property is constrained.
If the set method throws
java.beans.PropertyVetoException
(or subclass thereof) and the bean implements addVetoableChangeListener()
and removeVetoableChangeListener(), then setConstrained(true) may safely
be called. Otherwise, the system behavior is undefined.
Spec note: given those strict parameters, it would be nice if it
got set automatically by detection, but oh well.
When a property is constrained, its set method is required to:
- Fire the
VetoableChangeListener.vetoableChange()
event notifying others of the change and allowing them a chance to
say it is a bad thing. - If any of the listeners throws a PropertyVetoException, then
it must fire another vetoableChange() event notifying the others
of a reversion to the old value (though, of course, the change
was never made). Then it rethrows the PropertyVetoException and
exits.
- If all has gone well to this point, the value may be changed.
constrained
- whether the property is constrained or not.
setPropertyEditorClass
public void setPropertyEditorClass(Class> propertyEditorClass)
Set the PropertyEditor class. If the class does not implement
the PropertyEditor interface, you will likely get an exception
late in the game.
propertyEditorClass
- the PropertyEditor class for this
class to use.
setReadMethod
public void setReadMethod(Method readMethod)
throws IntrospectionException
Sets the read method.
The read method is used to retrieve the value of a property. A legal
read method must have no arguments. Its return type must not be
void
. If this methods succeeds the property type
is adjusted to the return type of the read method.
It is legal to set the read and the write method to null
or provide method which have been declared in distinct classes.
readMethod
- The new method to be used or null
.
setWriteMethod
public void setWriteMethod(Method writeMethod)
throws IntrospectionException
Sets the write method.
The write method is used to set the value of a property. A legal write method
must have a single argument which can be assigned to the property. If no
read method exists the property type changes to the argument type of the
write method.
It is legal to set the read and the write method to null
or provide method which have been declared in distinct classes.
writeMethod
- The new method to be used or null
.
java.beans.PropertyDescriptor
Copyright (C) 1998, 2001, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version.