EventSetDescriptorpublic class EventSetDescriptor extends FeatureDescriptor An EventSetDescriptor describes a group of events that a given Java
bean fires.
The given group of events are all delivered as method calls on a single
event listener interface, and an event listener object can be registered
via a call on a registration method supplied by the event source. |
Fields Summary |
---|
private MethodDescriptor[] | listenerMethodDescriptors | private MethodDescriptor | addMethodDescriptor | private MethodDescriptor | removeMethodDescriptor | private MethodDescriptor | getMethodDescriptor | private Reference | listenerMethodsRef | private Reference | listenerTypeRef | private boolean | unicast | private boolean | inDefaultEventSet |
Constructors Summary |
---|
public EventSetDescriptor(Class sourceClass, String eventSetName, Class listenerType, String listenerMethodName)Creates an EventSetDescriptor assuming that you are
following the most simple standard design pattern where a named
event "fred" is (1) delivered as a call on the single method of
interface FredListener, (2) has a single argument of type FredEvent,
and (3) where the FredListener may be registered with a call on an
addFredListener method of the source component and removed with a
call on a removeFredListener method.
this(sourceClass, eventSetName, listenerType,
new String[] { listenerMethodName },
"add" + getListenerClassName(listenerType),
"remove" + getListenerClassName(listenerType),
"get" + getListenerClassName(listenerType) + "s");
String eventName = capitalize(eventSetName) + "Event";
Method[] listenerMethods = getListenerMethods();
if (listenerMethods.length > 0) {
Class[] args = listenerMethods[0].getParameterTypes();
// Check for EventSet compliance. Special case for vetoableChange. See 4529996
if (!"vetoableChange".equals(eventSetName) && !args[0].getName().endsWith(eventName)) {
throw new IntrospectionException("Method \"" + listenerMethodName +
"\" should have argument \"" +
eventName + "\"");
}
}
| EventSetDescriptor(EventSetDescriptor x, EventSetDescriptor y)
super(x,y);
listenerMethodDescriptors = x.listenerMethodDescriptors;
if (y.listenerMethodDescriptors != null) {
listenerMethodDescriptors = y.listenerMethodDescriptors;
}
listenerTypeRef = x.listenerTypeRef;
if (y.listenerTypeRef != null) {
listenerTypeRef = y.listenerTypeRef;
}
addMethodDescriptor = x.addMethodDescriptor;
if (y.addMethodDescriptor != null) {
addMethodDescriptor = y.addMethodDescriptor;
}
removeMethodDescriptor = x.removeMethodDescriptor;
if (y.removeMethodDescriptor != null) {
removeMethodDescriptor = y.removeMethodDescriptor;
}
getMethodDescriptor = x.getMethodDescriptor;
if (y.getMethodDescriptor != null) {
getMethodDescriptor = y.getMethodDescriptor;
}
unicast = y.unicast;
if (!x.inDefaultEventSet || !y.inDefaultEventSet) {
inDefaultEventSet = false;
}
| EventSetDescriptor(EventSetDescriptor old)
super(old);
if (old.listenerMethodDescriptors != null) {
int len = old.listenerMethodDescriptors.length;
listenerMethodDescriptors = new MethodDescriptor[len];
for (int i = 0; i < len; i++) {
listenerMethodDescriptors[i] = new MethodDescriptor(
old.listenerMethodDescriptors[i]);
}
}
listenerTypeRef = old.listenerTypeRef;
addMethodDescriptor = old.addMethodDescriptor;
removeMethodDescriptor = old.removeMethodDescriptor;
getMethodDescriptor = old.getMethodDescriptor;
unicast = old.unicast;
inDefaultEventSet = old.inDefaultEventSet;
| public EventSetDescriptor(Class sourceClass, String eventSetName, Class listenerType, String[] listenerMethodNames, String addListenerMethodName, String removeListenerMethodName)Creates an EventSetDescriptor from scratch using
string names.
this(sourceClass, eventSetName, listenerType,
listenerMethodNames, addListenerMethodName,
removeListenerMethodName, null);
| public EventSetDescriptor(Class sourceClass, String eventSetName, Class listenerType, String[] listenerMethodNames, String addListenerMethodName, String removeListenerMethodName, String getListenerMethodName)This constructor creates an EventSetDescriptor from scratch using
string names.
if (sourceClass == null || eventSetName == null || listenerType == null) {
throw new NullPointerException();
}
setName(eventSetName);
setClass0(sourceClass);
setListenerType(listenerType);
Method[] listenerMethods = new Method[listenerMethodNames.length];
for (int i = 0; i < listenerMethodNames.length; i++) {
// Check for null names
if (listenerMethodNames[i] == null) {
throw new NullPointerException();
}
listenerMethods[i] = getMethod(listenerType, listenerMethodNames[i], 1);
}
setListenerMethods(listenerMethods);
setAddListenerMethod(getMethod(sourceClass, addListenerMethodName, 1));
setRemoveListenerMethod(getMethod(sourceClass, removeListenerMethodName, 1));
// Be more forgiving of not finding the getListener method.
Method method = Introspector.findMethod(sourceClass,
getListenerMethodName, 0);
if (method != null) {
setGetListenerMethod(method);
}
| public EventSetDescriptor(String eventSetName, Class listenerType, Method[] listenerMethods, Method addListenerMethod, Method removeListenerMethod)Creates an EventSetDescriptor from scratch using
java.lang.reflect.Method and java.lang.Class objects.
this(eventSetName, listenerType, listenerMethods,
addListenerMethod, removeListenerMethod, null);
| public EventSetDescriptor(String eventSetName, Class listenerType, Method[] listenerMethods, Method addListenerMethod, Method removeListenerMethod, Method getListenerMethod)This constructor creates an EventSetDescriptor from scratch using
java.lang.reflect.Method and java.lang.Class objects.
setName(eventSetName);
setListenerMethods(listenerMethods);
setAddListenerMethod(addListenerMethod);
setRemoveListenerMethod( removeListenerMethod);
setGetListenerMethod(getListenerMethod);
setListenerType(listenerType);
| public EventSetDescriptor(String eventSetName, Class listenerType, MethodDescriptor[] listenerMethodDescriptors, Method addListenerMethod, Method removeListenerMethod)Creates an EventSetDescriptor from scratch using
java.lang.reflect.MethodDescriptor and java.lang.Class
objects.
setName(eventSetName);
this.listenerMethodDescriptors = listenerMethodDescriptors;
setAddListenerMethod(addListenerMethod);
setRemoveListenerMethod(removeListenerMethod);
setListenerType(listenerType);
|
Methods Summary |
---|
public synchronized java.lang.reflect.Method | getAddListenerMethod()Gets the method used to add event listeners.
return (addMethodDescriptor != null ?
addMethodDescriptor.getMethod() : null);
| public synchronized java.lang.reflect.Method | getGetListenerMethod()Gets the method used to access the registered event listeners.
return (getMethodDescriptor != null ?
getMethodDescriptor.getMethod() : null);
| private static java.lang.String | getListenerClassName(java.lang.Class cls)
String className = cls.getName();
return className.substring(className.lastIndexOf('.") + 1);
| public synchronized java.beans.MethodDescriptor[] | getListenerMethodDescriptors()Gets the MethodDescriptor s of the target listener interface.
return listenerMethodDescriptors;
| public synchronized java.lang.reflect.Method[] | getListenerMethods()Gets the methods of the target listener interface.
Method[] methods = getListenerMethods0();
if (methods == null) {
if (listenerMethodDescriptors != null) {
methods = new Method[listenerMethodDescriptors.length];
for (int i = 0; i < methods.length; i++) {
methods[i] = listenerMethodDescriptors[i].getMethod();
}
}
setListenerMethods(methods);
}
return methods;
| private java.lang.reflect.Method[] | getListenerMethods0()
return (Method[])getObject(listenerMethodsRef);
| public java.lang.Class | getListenerType()Gets the Class object for the target interface.
return (Class)getObject(listenerTypeRef);
| private static java.lang.reflect.Method | getMethod(java.lang.Class cls, java.lang.String name, int args)
if (name == null) {
return null;
}
Method method = Introspector.findMethod(cls, name, args);
if (method == null) {
throw new IntrospectionException("Method not found: " + name +
" on class " + cls.getName());
}
return method;
| public synchronized java.lang.reflect.Method | getRemoveListenerMethod()Gets the method used to remove event listeners.
return (removeMethodDescriptor != null ?
removeMethodDescriptor.getMethod() : null);
| public boolean | isInDefaultEventSet()Reports if an event set is in the "default" set.
return inDefaultEventSet;
| public boolean | isUnicast()Normally event sources are multicast. However there are some
exceptions that are strictly unicast.
return unicast;
| private synchronized void | setAddListenerMethod(java.lang.reflect.Method method)
if (method == null) {
return;
}
if (getClass0() == null) {
setClass0(method.getDeclaringClass());
}
addMethodDescriptor = new MethodDescriptor(method);
| private synchronized void | setGetListenerMethod(java.lang.reflect.Method method)
if (method == null) {
return;
}
if (getClass0() == null) {
setClass0(method.getDeclaringClass());
}
getMethodDescriptor = new MethodDescriptor(method);
| public void | setInDefaultEventSet(boolean inDefaultEventSet)Marks an event set as being in the "default" set (or not).
By default this is true.
this.inDefaultEventSet = inDefaultEventSet;
| private void | setListenerMethods(java.lang.reflect.Method[] methods)
if (methods == null) {
return;
}
if (listenerMethodDescriptors == null) {
listenerMethodDescriptors = new MethodDescriptor[methods.length];
for (int i = 0; i < methods.length; i++) {
listenerMethodDescriptors[i] = new MethodDescriptor(methods[i]);
}
}
listenerMethodsRef = createReference(methods, true);
| private void | setListenerType(java.lang.Class cls)
listenerTypeRef = createReference(cls);
| private synchronized void | setRemoveListenerMethod(java.lang.reflect.Method method)
if (method == null) {
return;
}
if (getClass0() == null) {
setClass0(method.getDeclaringClass());
}
removeMethodDescriptor = new MethodDescriptor(method);
| public void | setUnicast(boolean unicast)Mark an event set as unicast (or not).
this.unicast = unicast;
|
|