Author: kylem Date: Sun Jan 9 19:19:32 2005 New Revision: 124758 URL: http://svn.apache.org/viewcvs?view=rev&rev=124758 Log: Another checkpoint of work for XML persistence of controls using java.beans.XMLEncoder. Now has support for encoding implementation instances and nested controls. Some work on listener wireup on decode remains.
Added: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ContextPersistenceDelegate.java incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ImplPersistenceDelegate.java incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/packaging/ControlEventSetDescriptor.java Modified: incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/context/ControlBeanContext.java incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlPersistenceDelegate.java incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/EventNotifier.java incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/UnicastEventNotifier.java incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlClient.java incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlImplementation.java incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptEventSet.java incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptPropertySet.java incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ClientInitializer.vm incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBeanInfo.vm incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/NestProps.java incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/NestPropsImpl.jcs incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/Props.java incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/PropsImpl.jcs incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/property/DrivePropsBeans.java incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/beaninfo/InfoTestBean.beaninfo incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext1Bean.beaninfo incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext2Bean.beaninfo incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf1Bean.beaninfo incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf2Bean.beaninfo Modified: incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/context/ControlBeanContext.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/context/ControlBeanContext.java?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/context/ControlBeanContext.java&r1=124757&p2=incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/context/ControlBeanContext.java&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/context/ControlBeanContext.java (original) +++ incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/context/ControlBeanContext.java Sun Jan 9 19:19:32 2005 @@ -24,6 +24,7 @@ import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Method; +import org.apache.beehive.controls.api.bean.ControlBean; import org.apache.beehive.controls.api.events.EventSet; import org.apache.beehive.controls.api.properties.PropertyMap; import org.apache.beehive.controls.api.properties.PropertySet; @@ -175,6 +176,13 @@ * necessarily have been packaged directly with the implementation class). */ public java.lang.ClassLoader getClassLoader(); + + /** + * Returns any child ControlBean that is nested in the ControlBeanContext, or null + * if no matching child is found. The <code>id</code> parameter is relative to + * the current nesting context, not an absolute control id. + */ + public ControlBean getBean(String id); /** * The Lifecycle event interface defines a set of lifecycle events exposed by the Added: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ContextPersistenceDelegate.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ContextPersistenceDelegate.java?view=auto&rev=124758 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ContextPersistenceDelegate.java Sun Jan 9 19:19:32 2005 @@ -0,0 +1,69 @@ +package org.apache.beehive.controls.runtime.bean; +/* + * Copyright 2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * $Header:$ + */ + +import java.beans.BeanInfo; +import java.beans.DefaultPersistenceDelegate; +import java.beans.Encoder; +import java.beans.Expression; +import java.beans.IntrospectionException; +import java.beans.Introspector; +import java.beans.PersistenceDelegate; +import java.beans.PropertyDescriptor; +import java.beans.Statement; +import java.beans.XMLEncoder; +import java.util.Set; + +import org.apache.beehive.controls.api.ControlException; + +/** + * The ContextPersistenceDelegate class supports the XML persistance of ControlBeanContext + * instances by implementing the <code>java.beans.PersistenceDelegate</b> API, and overriding + * the default persistance algorithm based upon the runtime structure for Controls. + * <p> + */ +public class ContextPersistenceDelegate extends DefaultPersistenceDelegate +{ + /** + * PersistenceDelegate.instantiate() + */ + protected Expression instantiate(Object oldInstance, Encoder out) + { + // + // Instead of directly creating a context instance, simply ask the containing + // bean to return the associated context. + // + return new Expression(((XMLEncoder)out).getOwner(), "getControlBeanContext", null); + } + + /** + * PersistenceDelegate.initialize() + */ + protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) + { + //super.initialize(type, oldInstance, newInstance, out); + } + + /** + * PersistenceDelegate.writeObject() + */ + public void writeObject(Object oldInstance, Encoder out) + { + super.writeObject(oldInstance, out); + } +} Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java&r1=124757&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java (original) +++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java Sun Jan 9 19:19:32 2005 @@ -286,7 +286,7 @@ * REVIEW: could probably improve the granularity of locking here, but start w/ just * synchronizing the entire fn. */ - protected synchronized Object ensureControl() + public synchronized Object ensureControl() { if (_control == null) { @@ -335,6 +335,11 @@ } /** + * Returns the implementation instance associated with this ControlBean. + */ + /* package */ Object getImplementation() { return _control; } + + /** * The preinvoke method is called before all operations on the control. It is the basic * hook for logging, context initialization, resource management, and other common * services @@ -415,7 +420,7 @@ /** * Sets the EventNotifier for this ControlBean */ - protected void setEventNotifier(Class eventSet, Object notifier) + protected <T> void setEventNotifier(Class<T> eventSet, T notifier) { _notifiers.put(eventSet,notifier); @@ -461,9 +466,9 @@ /** * Returns an EventNotifier/UnicastEventNotifier for this ControlBean for the target event set */ - protected Object getEventNotifier(Class eventSet) + protected <T> T getEventNotifier(Class<T> eventSet) { - return _notifiers.get(eventSet); + return (T)_notifiers.get(eventSet); } /** @@ -842,6 +847,15 @@ oos.defaultWriteObject(); } + + /** + * Called during XMLDecoder reconstruction of a ControlBean. + */ + public void decodeImpl(Object impl) + { + if (impl != _control) + throw new ControlException("Cannot change implementation"); + }; /** * Retrieves interceptor instances, creates them lazily. Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlPersistenceDelegate.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlPersistenceDelegate.java?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlPersistenceDelegate.java&r1=124757&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlPersistenceDelegate.java&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlPersistenceDelegate.java (original) +++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlPersistenceDelegate.java Sun Jan 9 19:19:32 2005 @@ -20,12 +20,17 @@ import java.beans.BeanInfo; import java.beans.DefaultPersistenceDelegate; import java.beans.Encoder; +import java.beans.EventSetDescriptor; import java.beans.Expression; import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PersistenceDelegate; import java.beans.PropertyDescriptor; import java.beans.Statement; +import java.beans.XMLEncoder; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Iterator; import java.util.Set; import org.apache.beehive.controls.api.ControlException; @@ -35,11 +40,11 @@ import org.apache.beehive.controls.api.properties.PropertyMap; /** - * The ControlPersistenceDelegate class supports the XML persistance of Control JavaBeans by + * The ControlPersistenceDelegate class supports the XML persistence of Control JavaBeans by * implementing the <code>java.beans.PersistenceDelegate</b> API, and overriding the default - * persistance algorithm based upon the runtime structure for Controls. + * persistence algorithm based upon the runtime structure for Controls. * <p> - * The ControlPersistanceDelegate class implements optimized property persistence based upon the + * The ControlPersistence class implements optimized property persistence based upon the * fact that the ControlBean already has a map containing all non-default property state. Rather * than using the standard (and slower) algorithm of comparing the encoding instance against a * 'clean' instance, the delegate can simply retrieve the map and persist the values contained @@ -65,12 +70,36 @@ } } + /** + * The FieldPersistencersistence is an XMLEncoder Persistence for the + * <code>java.lang.reflect.Field</code> claass. It is similar to the one that comes + * bundled with the JDK with one key exception: it works for non-public fields as + * well. + */ + class FieldPersistenceDelegate extends PersistenceDelegate + { + protected Expression instantiate(Object oldInstance, Encoder out) + { + Field f = (Field)oldInstance; + return new Expression(oldInstance, f.getDeclaringClass(), "getDeclaredField", + new Object[]{f.getName()}); + } + } + protected Expression instantiate(Object oldInstance, Encoder out) { - System.err.println("ControlPersistenceDelegate instantiate(): " + oldInstance); + XMLEncoder xmlOut = (XMLEncoder)out; ControlBean control = (ControlBean)oldInstance; // + // If processing a nested control, then use the parent bean's context as the + // constructor context + // + ControlBeanContext cbc = null; + if (xmlOut.getOwner() != null) + cbc = ((ControlBean)xmlOut.getOwner()).getControlBeanContext(); + + // // See if the ControlBean has any associated PropertyMap in its delegation chain // that was derived from an AnnotatedElement so this relationship (and any associated // external config delegates) will be restored as part of the decoding process. @@ -86,9 +115,17 @@ aem = (AnnotatedElementMap)pMap; // - // Ensure that there is a persistance delegate for the map + // Ignore a class-valued AnnotationElementMap.. this just refers to the + // Control type, and will be automatically reassociated at construction + // time + // + if (aem.getAnnotatedElement() instanceof Class) + aem = null; + + // + // Ensure that there is a persistence delegate for the map // - out.setPersistenceDelegate(AnnotatedElementMap.class, + xmlOut.setPersistenceDelegate(AnnotatedElementMap.class, new AnnotatedElementMapPersistenceDelegate()); break; } @@ -105,7 +142,7 @@ // any AnnotatedElementMap that was passed into the original constructor. // return new Expression(control, control.getClass(), "new", - new Object [] {null, control.getLocalID(), aem}); + new Object [] {cbc, control.getLocalID(), aem}); } /** @@ -113,8 +150,6 @@ */ protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) { - System.err.println("ControlPersistenceDelegate initialize(): " + oldInstance); - // // Get the bean and associated beanInfo for the source instance // @@ -128,46 +163,137 @@ { throw new ControlException("Unable to locate BeanInfo", ie); } - //super.initialize(type, control, newInstance, out); // - // The default implementation of property persistance will use BeanInfo to incrementally - // compare oldInstance property values to newInstance property values. Because the - // bean instance PropertyMap holds only the values that have been modified, this process - // can be optimized by directly writing out only the properties found in the map. + // Cast the encoding stream to an XMLEncoder (only encoding supported) and then set + // the stream owner to the bean being persisted // - BeanPropertyMap beanMap = control.getPropertyMap(); - PropertyDescriptor [] propDescriptors = beanInfo.getPropertyDescriptors(); - for (PropertyKey pk : beanMap.getPropertyKeys()) + XMLEncoder xmlOut = (XMLEncoder)out; + Object owner = xmlOut.getOwner(); + xmlOut.setOwner(control); + try { + // - // Locate the PropertyDescriptor for the modified property, and use it to write - // the property value to the encoder stream + // The default implementation of property persistence will use BeanInfo to + // incrementally compare oldInstance property values to newInstance property values. + // Because the bean instance PropertyMap holds only the values that have been + // modified, this process can be optimized by directly writing out only the properties + // found in the map. // - String propName = pk.getPropertyName(); - boolean found = false; - for (int i = 0; i < propDescriptors.length; i++) + BeanPropertyMap beanMap = control.getPropertyMap(); + PropertyDescriptor [] propDescriptors = beanInfo.getPropertyDescriptors(); + for (PropertyKey pk : beanMap.getPropertyKeys()) { - if (propName.equals(propDescriptors[i].getName())) + // + // Locate the PropertyDescriptor for the modified property, and use it to write + // the property value to the encoder stream + // + String propName = pk.getPropertyName(); + boolean found = false; + for (int i = 0; i < propDescriptors.length; i++) { - found = true; - - // Only write the property if it is not flagged as transient - Object transientVal = propDescriptors[i].getValue("transient"); - if (transientVal == null || transientVal.equals(Boolean.FALSE)) + if (propName.equals(propDescriptors[i].getName())) { - out.writeStatement( - new Statement(oldInstance, + found = true; + + // Only write the property if it is not flagged as transient + Object transientVal = propDescriptors[i].getValue("transient"); + if (transientVal == null || transientVal.equals(Boolean.FALSE)) + { + xmlOut.writeStatement( + new Statement(oldInstance, propDescriptors[i].getWriteMethod().getName(), new Object [] {beanMap.getProperty(pk)})); + } + } + } + if (found == false) + { + throw new ControlException("Unknown property in bean PropertyMap: " + pk); + } + } + + // + // Get the bean context associated with the bean, and persist any nested controls + // + ControlBeanContext cbc = control.getControlBeanContext(); + if (cbc.size() != 0) + { + xmlOut.setPersistenceDelegate(ControlBeanContext.class, + new ContextPersistenceDelegate()); + + Iterator nestedIter = cbc.iterator(); + while (nestedIter.hasNext()) + { + Object bean = nestedIter.next(); + if (bean instanceof ControlBean) + { + xmlOut.writeStatement( + new Statement(cbc, "add", new Object [] { bean } )); } } } - if (found == false) + + // + // Restore any listeners associated with the control + // NOTE: NOT YET READY FOR PRIME TIME - KWM + // +/* + EventSetDescriptor [] eventSetDescriptors = beanInfo.getEventSetDescriptors(); + for (int i = 0; i < eventSetDescriptors.length; i++) { - throw new ControlException("Unknown property in bean PropertyMap: " + pk); + EventSetDescriptor esd = eventSetDescriptors[i]; + Method listenersMethod = esd.getGetListenerMethod(); + String addListenerName = esd.getAddListenerMethod().getName(); + if (listenersMethod != null) + { + // + // Get the list of listeners, and then add statements to incrementally + // add them in the same order + // + try + { + Object [] lstnrs = (Object [])listenersMethod.invoke(control, + new Object []{}); + for (int j = 0; j < lstnrs.length; j++) + { + xmlOut.writeStatement( + new Statement(control, addListenerName, new Object [] {lstnrs[j]})); + } + } + catch (Exception iae) + { + throw new ControlException("Unable to initialize listeners", iae); + } + } + } +*/ + + // + // See if the control holds an implementation instance, if so, we need to include + // it (and any nested controls or state) in the encoding stream + // + Object impl = control.getImplementation(); + if (impl != null) + { + + // + // Set the persistence delegate for the impl class to the Impl delegate, + // set the current stream owner to the bean, and then write the implementation + // + xmlOut.setPersistenceDelegate(impl.getClass(), new ImplPersistenceDelegate()); + //xmlOut.writeStatement( + // new Statement(oldInstance, "decodeImpl", new Object [] {impl})); + xmlOut.writeStatement( + new Statement(impl, "toString", null)); } } + finally + { + // Restore the previous encoding stream owner + xmlOut.setOwner(owner); + } } /** @@ -175,6 +301,7 @@ */ public void writeObject(Object oldInstance, Encoder out) { + out.setPersistenceDelegate(Field.class, new FieldPersistenceDelegate()); super.writeObject(oldInstance, out); } } Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/EventNotifier.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/EventNotifier.java?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/EventNotifier.java&r1=124757&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/EventNotifier.java&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/EventNotifier.java (original) +++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/EventNotifier.java Sun Jan 9 19:19:32 2005 @@ -44,13 +44,29 @@ _listeners.remove(listener); } - + /** * Returns an iterator over the full set of listeners */ - public Iterator getListeners() + public Iterator listenerIterator() { return _listeners.iterator(); + } + + /** + * Returns the number of registered listeners + */ + public int getListenerCount() + { + return _listeners.size(); + } + + /** + * Returns the listener list in array form + */ + public void getListeners(Object [] listeners) + { + _listeners.toArray(listeners); } private ArrayList _listeners = new ArrayList(); Added: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ImplPersistenceDelegate.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ImplPersistenceDelegate.java?view=auto&rev=124758 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ImplPersistenceDelegate.java Sun Jan 9 19:19:32 2005 @@ -0,0 +1,70 @@ +package org.apache.beehive.controls.runtime.bean; +/* + * Copyright 2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * $Header:$ + */ + +import java.beans.BeanInfo; +import java.beans.DefaultPersistenceDelegate; +import java.beans.Encoder; +import java.beans.Expression; +import java.beans.IntrospectionException; +import java.beans.Introspector; +import java.beans.PersistenceDelegate; +import java.beans.PropertyDescriptor; +import java.beans.Statement; +import java.beans.XMLEncoder; +import java.util.Set; + +import org.apache.beehive.controls.api.ControlException; + +/** + * The ImplPersistenceDelegate class supports the XML persistance of Control Implementation + * instances by implementing the <code>java.beans.PersistenceDelegate</b> API, and overriding + * the default persistance algorithm based upon the runtime structure for Controls. + * <p> + */ +public class ImplPersistenceDelegate extends DefaultPersistenceDelegate +{ + /** + * PersistenceDelegate.instantiate() + */ + protected Expression instantiate(Object oldInstance, Encoder out) + { + // + // An implementation instance is actually constructed at decode time by calling + // ControlBean.ensureControl on the parent bean. This will create a new impl + // instance and run the impl initializer on it. + // + return new Expression(((XMLEncoder)out).getOwner(), "ensureControl", null); + } + + /** + * PersistenceDelegate.initialize() + */ + protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) + { + super.initialize(type, oldInstance, newInstance, out); + } + + /** + * PersistenceDelegate.writeObject() + */ + public void writeObject(Object oldInstance, Encoder out) + { + super.writeObject(oldInstance, out); + } +} Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/UnicastEventNotifier.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/UnicastEventNotifier.java?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/UnicastEventNotifier.java&r1=124757&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/UnicastEventNotifier.java&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/UnicastEventNotifier.java (original) +++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/UnicastEventNotifier.java Sun Jan 9 19:19:32 2005 @@ -58,5 +58,22 @@ return _listener; } - private Object _listener; + /** + * Returns the number of registered listeners + */ + public int getListenerCount() + { + return (_listener != null) ? 1 : 0; + } + + /** + * Returns the listener list in array form + */ + public void getListeners(Object [] listeners) + { + if (_listener != null) + listeners[0] = _listener; + } + + private Object _listener; } Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlClient.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlClient.java?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlClient.java&r1=124757&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlClient.java&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlClient.java (original) +++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlClient.java Sun Jan 9 19:19:32 2005 @@ -199,7 +199,8 @@ // // Do a quick check for the presence of the EventHandler annotation on methods // - if (clientMethod.getAnnotation(EventHandler.class) == null) + if (clientMethod.getAnnotation(EventHandler.class) == null || + clientMethod.toString().equals("<clinit>()")) continue; // Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlImplementation.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlImplementation.java?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlImplementation.java&r1=124757&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlImplementation.java&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlImplementation.java (original) +++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlImplementation.java Sun Jan 9 19:19:32 2005 @@ -296,7 +296,8 @@ // // Do a quick check for the presence of the EventHandler annotation on methods // - if (implMethod.getAnnotation(EventHandler.class) == null) + if (implMethod.getAnnotation(EventHandler.class) == null || + implMethod.toString().equals("<clinit>()")) continue; // Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java&r1=124757&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java (original) +++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java Sun Jan 9 19:19:32 2005 @@ -193,8 +193,10 @@ if ( intfDecl.getMethods() == null ) continue; + // Add all declared methods, but ignore the mystery <clinit> methods for (MethodDeclaration methodDecl : intfDecl.getMethods()) - operList.add(new AptOperation(this, methodDecl, _env)); + if (!methodDecl.toString().equals("<clinit>()")) + operList.add(new AptOperation(this, methodDecl, _env)); if ( intfDecl.getSuperinterfaces() == null ) continue; Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptEventSet.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptEventSet.java?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptEventSet.java&r1=124757&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptEventSet.java&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptEventSet.java (original) +++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptEventSet.java Sun Jan 9 19:19:32 2005 @@ -168,11 +168,10 @@ _superEventSet.getClassName().equals(intfDecl.getQualifiedName())) continue; - // - // Add all declared methods on the current interface - // + // Add all declared methods, but ignore the mystery <clinit> methods for (MethodDeclaration methodDecl : intfDecl.getMethods()) - events.add(new AptEvent(this, methodDecl, _env)); + if (!methodDecl.toString().equals("<clinit>()")) + events.add(new AptEvent(this, methodDecl, _env)); // // Add all superinterfaces of the target interface to the list @@ -288,9 +287,9 @@ /** * Returns the name of the method used to retrieve the (unicast) EventSet listener */ - public String getGetListenerMethod() + public String getGetListenersMethod() { - return "get" + getShortName() + "Listener"; + return "get" + getShortName() + "Listeners"; } /** Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptPropertySet.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptPropertySet.java?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptPropertySet.java&r1=124757&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptPropertySet.java&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptPropertySet.java (original) +++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptPropertySet.java Sun Jan 9 19:19:32 2005 @@ -69,8 +69,11 @@ if (_propertySet == null || _propertySet.getMethods() == null ) return properties; + // Add all declared method, but ignore the mystery <clinit> methods for (MethodDeclaration methodDecl : _propertySet.getMethods()) - properties.add(new AptProperty(this,(AnnotationTypeElementDeclaration)methodDecl,_env)); + if (!methodDecl.toString().equals("<clinit>()")) + properties.add( + new AptProperty(this,(AnnotationTypeElementDeclaration)methodDecl,_env)); return properties; } Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ClientInitializer.vm Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ClientInitializer.vm?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ClientInitializer.vm&r1=124757&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ClientInitializer.vm&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ClientInitializer.vm (original) +++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ClientInitializer.vm Sun Jan 9 19:19:32 2005 @@ -98,10 +98,14 @@ #end ## ## -## This macro defines the initialization of a declared control +## This macro defines the initialization of a declared control. A check is made first to see +## if an external initializer (like java.beans.XMLDecoder) has already instantiated a configured +## bean into the context. ## #macro (initControl $control) - $control.controlBean.className $control.localName = new ${control.controlBean.className}(cbc, "$control.name", getAnnotationMap(cbc, ${control.reflectField})); + $control.controlBean.className $control.localName = ($control.controlBean.className)cbc.getBean("$control.name"); + if ($control.localName == null) + $control.localName = new ${control.controlBean.className}(cbc, "$control.name", getAnnotationMap(cbc, ${control.reflectField})); #initEventAdaptors($control) #if ($init.needsReflection($control)) ${control.reflectField}.set(client, $control.localName); Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm&r1=124757&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm (original) +++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm Sun Jan 9 19:19:32 2005 @@ -344,10 +344,10 @@ return retval; #end #else - java.util.Iterator listenerIter = notifier.getListeners(); + java.util.Iterator listenerIter = notifier.listenerIterator(); while (listenerIter.hasNext()) { - $event.eventSet.formalShortName listener = ($event.eventSet.formalShortName)listenerIter.next(); + $event.eventSet.formalShortName listener = ($eventSet.formalShortName)listenerIter.next(); listener.${event.name}($event.argList); } #end @@ -397,17 +397,17 @@ notifier.removeListener(listener); } - #if ($eventSet.unicast) /** - * Returns the registered listener for ${eventSet.shortName} events on the bean, or null - * if no listener has been registered + * Returns the array of registered listeners for ${eventSet.shortName} events on the bean, or + * an empty array if no listener has been registered */ - public synchronized $eventSet.formalShortName ${eventSet.getListenerMethod}() + public synchronized $eventSet.formalShortName [] ${eventSet.getListenersMethod}() { $eventSet.notifierClass notifier = ($eventSet.notifierClass)getEventNotifier(${eventSet.shortName}.class); - return ($eventSet.formalShortName)notifier.getListener(); + $eventSet.formalShortName [] listeners = new ${eventSet.shortName}[notifier.getListenerCount()]; + notifier.getListeners(listeners); + return listeners; } - #end #end ## ## This macro declares the local (bean class) cache that is used for shared PropertyMaps Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBeanInfo.vm Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBeanInfo.vm?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBeanInfo.vm&r1=124757&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBeanInfo.vm&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBeanInfo.vm (original) +++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBeanInfo.vm Sun Jan 9 19:19:32 2005 @@ -64,6 +64,7 @@ import org.apache.beehive.controls.api.ControlException; import org.apache.beehive.controls.runtime.bean.ControlPersistenceDelegate; +import org.apache.beehive.controls.runtime.packaging.ControlEventSetDescriptor; public class ${bean.shortName}BeanInfo #if ($intf.superClass) @@ -255,7 +256,7 @@ int eventIndex = 0; MethodDescriptor [] eventDescriptors; EventSetDescriptor esd; - Method addListener, removeListener; + Method addListener, removeListener, getListeners; Class eventIntf; #foreach ($eventSet in $intf.eventSets) @@ -272,6 +273,9 @@ removeListener = ${bean.className}.class.getDeclaredMethod("$eventSet.removeListenerMethod", new Class [] { eventIntf }); + getListeners = + ${bean.className}.class.getDeclaredMethod("$eventSet.getListenersMethod", + new Class [] {}); } catch (NoSuchMethodException nsme) { @@ -289,8 +293,8 @@ try { - esd = new EventSetDescriptor("$eventSet.descriptorName", eventIntf, - eventDescriptors, addListener, removeListener); + esd = new ControlEventSetDescriptor("$eventSet.descriptorName", eventIntf, + eventDescriptors, addListener, removeListener, getListeners); #if ($eventSet.featureInfo) #initFeatureDescriptor("esd" $eventSet.featureInfo $eventSet.descriptorName) #end Added: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/packaging/ControlEventSetDescriptor.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/packaging/ControlEventSetDescriptor.java?view=auto&rev=124758 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/packaging/ControlEventSetDescriptor.java Sun Jan 9 19:19:32 2005 @@ -0,0 +1,50 @@ +package org.apache.beehive.controls.runtime.packaging; + +import java.beans.EventSetDescriptor; +import java.beans.IntrospectionException; +import java.beans.MethodDescriptor; +import java.lang.ref.Reference; +import java.lang.ref.SoftReference; +import java.lang.reflect.Method; + +/** + * The ControlEventSetDescriptor is a result of an infortunate evoluntary flaw in the + * java.beans.EventSetDescriptor class. The getListeners functionality for event sets was + * added after the initial implementation, and unfortunately, there is no constructor that + * let you specify <b>both</b> the MethodDescriptors for events <b>and</b> the getListener + * method. To compensate for this, we must subclass and provide our own getGetListenerMethod + * implementation. + */ +public class ControlEventSetDescriptor extends EventSetDescriptor +{ + /** + * This constructor adds the getListenerMethod argument that is missing from the JDK! + */ + public ControlEventSetDescriptor(String eventSetName, Class<?> listenerType, + MethodDescriptor[] listenerMethodDescriptors, + Method addListenerMethod, Method removeListenerMethod, + Method getListenerMethod) + throws IntrospectionException + { + super(eventSetName, listenerType, listenerMethodDescriptors, + addListenerMethod, removeListenerMethod); + + // Follow the same pattern as the JDK and store the method as a soft reference, so + // the introspector (alone) won't prevent Class garbage collection. + _getMethodRef = new SoftReference<Method>(getListenerMethod); + } + + /** + * Override the default implementation of getGetListenerMethod to return the method + * provided in the constructor. + */ + public Method getGetListenerMethod() + { + if (_getMethodRef == null) + return null; + + return _getMethodRef.get(); + } + + Reference<Method> _getMethodRef; +} Modified: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/NestProps.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/NestProps.java?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/NestProps.java&r1=124757&p2=incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/NestProps.java&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/NestProps.java (original) +++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/NestProps.java Sun Jan 9 19:19:32 2005 @@ -14,12 +14,12 @@ * A simple control that nests the Props control, for nested property testing. */ @ControlInterface -public interface NestProps +public interface NestProps extends Props { // // Returns a propertySet value for a simple nested control // - public Annotation getControlPropertySet(Class propertySet); + public Annotation getNestedPropertySet(Class propertySet); // // Returns a propertySet value for an extension nested control Modified: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/NestPropsImpl.jcs Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/NestPropsImpl.jcs?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/NestPropsImpl.jcs&r1=124757&p2=incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/NestPropsImpl.jcs&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/NestPropsImpl.jcs (original) +++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/NestPropsImpl.jcs Sun Jan 9 19:19:32 2005 @@ -1,8 +1,13 @@ package org.apache.beehive.controls.test.controls.property; +import java.beans.PropertyChangeEvent; + import java.lang.annotation.Annotation; import java.lang.reflect.Method; +import org.apache.beehive.controls.api.events.Client; +import org.apache.beehive.controls.api.events.EventHandler; + import org.apache.beehive.controls.api.bean.ControlImplementation; import org.apache.beehive.controls.api.bean.Control; import org.apache.beehive.controls.api.bean.Extensible; @@ -15,6 +20,9 @@ { static final long serialVersionUID = 1L; + @Context + ControlBeanContext context; + @Control @Props.SimpleProps(simpleString="A field annotation value") Props propControl; @@ -23,11 +31,23 @@ @PropsExtension.ArrayProps(arrayString={"One","Two","Three"}) private PropsExtension propExtControl; + @Client + PropertyEvents client; + + /** + * Provides a simple test API to externally query the PropertySet values on this + * control. + */ + public Annotation getControlPropertySet(Class propertySet) + { + return context.getControlPropertySet(propertySet); + } + /** * Provides a simple test API to externally query the PropertySet values on a * nested control. */ - public Annotation getControlPropertySet(Class propertySet) + public Annotation getNestedPropertySet(Class propertySet) { return propControl.getControlPropertySet(propertySet); } @@ -35,5 +55,30 @@ public Annotation getExtensionControlPropertySet(Class propertySet) { return propExtControl.getControlPropertySet(propertySet); + } + + // + // Expose PropertyEvents from three potential sources: local properties, or from either of + // the two nested controls + // + @EventHandler(field="context", eventSet=ControlBeanContext.LifeCycle.class, + eventName="onPropertyChange") + public void onContextChange(PropertyChangeEvent pce) + { + client.onChange(pce); + } + + @EventHandler(field="propControl", eventSet=Props.PropertyEvents.class, + eventName="onChange") + public void onPropsChange(PropertyChangeEvent pce) + { + client.onChange(pce); + } + + @EventHandler(field="propExtControl", eventSet=Props.PropertyEvents.class, + eventName="onChange") + public void onExtPropsChange(PropertyChangeEvent pce) + { + client.onChange(pce); } } Modified: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/Props.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/Props.java?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/Props.java&r1=124757&p2=incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/Props.java&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/Props.java (original) +++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/Props.java Sun Jan 9 19:19:32 2005 @@ -6,8 +6,12 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import java.beans.PropertyChangeEvent; + import org.apache.beehive.controls.api.bean.ControlInterface; import org.apache.beehive.controls.api.bean.ExternalPropertySets; +import org.apache.beehive.controls.api.events.EventSet; +import org.apache.beehive.controls.api.packaging.PropertyInfo; import org.apache.beehive.controls.api.properties.PropertyKey; import org.apache.beehive.controls.api.properties.PropertySet; @@ -85,6 +89,7 @@ @Target( {ElementType.TYPE, ElementType.FIELD, ElementType.METHOD} ) public @interface TestAnnot { + @PropertyInfo(bound=true) // will generate PropertyChange events SimpleProps simpleAnnot() default @SimpleProps( simpleInt = ANNOT_INT_DEFAULT, @@ -92,6 +97,15 @@ simpleClass = java.beans.Beans.class, simpleEnum = SimpleEnum.ChoiceC); ArrayProps arrayAnnot(); + } + + // + // Exposes PropertyChange events to an external client. + // + @EventSet + public interface PropertyEvents + { + public void onChange(PropertyChangeEvent pce); } // Modified: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/PropsImpl.jcs Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/PropsImpl.jcs?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/PropsImpl.jcs&r1=124757&p2=incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/PropsImpl.jcs&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/PropsImpl.jcs (original) +++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/PropsImpl.jcs Sun Jan 9 19:19:32 2005 @@ -1,5 +1,8 @@ package org.apache.beehive.controls.test.controls.property; + +import java.beans.PropertyChangeEvent; + import java.lang.annotation.Annotation; import java.lang.reflect.Method; @@ -7,6 +10,8 @@ import org.apache.beehive.controls.api.bean.Extensible; import org.apache.beehive.controls.api.context.Context; import org.apache.beehive.controls.api.context.ControlBeanContext; +import org.apache.beehive.controls.api.events.Client; +import org.apache.beehive.controls.api.events.EventHandler; import org.apache.beehive.controls.api.properties.PropertySet; @ControlImplementation @@ -17,6 +22,9 @@ @Context ControlBeanContext context; + @Client + PropertyEvents client; + /** * Provides a simple test API to externally query the control instance PropertySet values * returned by ControlBeanContext APIs @@ -24,6 +32,17 @@ public Annotation getControlPropertySet(Class propertySet) { return context.getControlPropertySet(propertySet); + } + + /** + * Set up a handler for context property change events, then expose them using the + * EventSet declared on the public interface. + */ + @EventHandler(field="context", eventSet=ControlBeanContext.LifeCycle.class, + eventName="onPropertyChange") + public void onContextChange(PropertyChangeEvent pce) + { + client.onChange(pce); } /** Modified: incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/property/DrivePropsBeans.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/property/DrivePropsBeans.java?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/property/DrivePropsBeans.java&r1=124757&p2=incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/property/DrivePropsBeans.java&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/property/DrivePropsBeans.java (original) +++ incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/property/DrivePropsBeans.java Sun Jan 9 19:19:32 2005 @@ -418,7 +418,7 @@ return report; } - simpleProps = (SimpleProps)nestBean.getControlPropertySet(SimpleProps.class); + simpleProps = (SimpleProps)nestBean.getNestedPropertySet(SimpleProps.class); if (!simpleProps.simpleString().equals("A field annotation value")){ report.setStatus(Report.FAIL); Modified: incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/beaninfo/InfoTestBean.beaninfo Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/beaninfo/InfoTestBean.beaninfo?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/beaninfo/InfoTestBean.beaninfo&r1=124757&p2=incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/beaninfo/InfoTestBean.beaninfo&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/beaninfo/InfoTestBean.beaninfo (original) +++ incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/beaninfo/InfoTestBean.beaninfo Sun Jan 9 19:19:32 2005 @@ -114,6 +114,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.beaninfo.InfoTestBean.removeTestEventsListener(org.apache.beehive.controls.test.controls.beaninfo.InfoTest$TestEvents) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.beaninfo.InfoTest$TestEvents[] org.apache.beehive.controls.test.controls.beaninfo.InfoTestBean.getTestEventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="InfoTest eventMethod1" <method> Modified: incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext1Bean.beaninfo Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext1Bean.beaninfo?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext1Bean.beaninfo&r1=124757&p2=incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext1Bean.beaninfo&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext1Bean.beaninfo (original) +++ incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext1Bean.beaninfo Sun Jan 9 19:19:32 2005 @@ -268,6 +268,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.removeIntf2NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents[] org.apache.beehive.controls.test.controls.inherit.Intf2Bean.getIntf2NewEventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="addInEvent1" <method> @@ -352,6 +355,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext1Bean.removeExt1NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1NewEvents) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1NewEvents[] org.apache.beehive.controls.test.controls.inherit.Ext1Bean.getExt1NewEventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="ext1NewEvent1" <method> @@ -406,6 +412,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.removeIntf1EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events[] org.apache.beehive.controls.test.controls.inherit.Intf1Bean.getIntf1EventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="intf1Event1" <method> @@ -490,6 +499,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext1Bean.removeExt1EventsListener(org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1Events) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1Events[] org.apache.beehive.controls.test.controls.inherit.Ext1Bean.getExt1EventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="addInEvent1" <method> @@ -664,6 +676,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.removeIntf1NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents[] org.apache.beehive.controls.test.controls.inherit.Intf1Bean.getIntf1NewEventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="intf1NewEvent1" <method> @@ -718,6 +733,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.removeIntf2EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events[] org.apache.beehive.controls.test.controls.inherit.Intf2Bean.getIntf2EventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="addInEvent1" <method> Modified: incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext2Bean.beaninfo Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext2Bean.beaninfo?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext2Bean.beaninfo&r1=124757&p2=incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext2Bean.beaninfo&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext2Bean.beaninfo (original) +++ incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext2Bean.beaninfo Sun Jan 9 19:19:32 2005 @@ -298,6 +298,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext2Bean.removeExt2SkipEventsListener(org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2SkipEvents) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2SkipEvents[] org.apache.beehive.controls.test.controls.inherit.Ext2Bean.getExt2SkipEventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="addInEvent1" <method> @@ -472,6 +475,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext2Bean.removeExt2NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2NewEvents) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2NewEvents[] org.apache.beehive.controls.test.controls.inherit.Ext2Bean.getExt2NewEventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="ext2NewEvent1" <method> @@ -526,6 +532,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.removeIntf2NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents[] org.apache.beehive.controls.test.controls.inherit.Intf2Bean.getIntf2NewEventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="addInEvent1" <method> @@ -610,6 +619,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext1Bean.removeExt1NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1NewEvents) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1NewEvents[] org.apache.beehive.controls.test.controls.inherit.Ext1Bean.getExt1NewEventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="ext1NewEvent1" <method> @@ -664,6 +676,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.removeIntf1EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events[] org.apache.beehive.controls.test.controls.inherit.Intf1Bean.getIntf1EventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="intf1Event1" <method> @@ -748,6 +763,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext1Bean.removeExt1EventsListener(org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1Events) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1Events[] org.apache.beehive.controls.test.controls.inherit.Ext1Bean.getExt1EventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="addInEvent1" <method> @@ -922,6 +940,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.removeIntf1NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents[] org.apache.beehive.controls.test.controls.inherit.Intf1Bean.getIntf1NewEventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="intf1NewEvent1" <method> @@ -976,6 +997,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.removeIntf2EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events[] org.apache.beehive.controls.test.controls.inherit.Intf2Bean.getIntf2EventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="addInEvent1" <method> @@ -1120,6 +1144,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext2Bean.removeExt2EventsListener(org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2Events) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2Events[] org.apache.beehive.controls.test.controls.inherit.Ext2Bean.getExt2EventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="addInEvent1" <method> Modified: incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf1Bean.beaninfo Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf1Bean.beaninfo?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf1Bean.beaninfo&r1=124757&p2=incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf1Bean.beaninfo&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf1Bean.beaninfo (original) +++ incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf1Bean.beaninfo Sun Jan 9 19:19:32 2005 @@ -136,6 +136,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.removeIntf1EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events[] org.apache.beehive.controls.test.controls.inherit.Intf1Bean.getIntf1EventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="intf1Event1" <method> @@ -220,6 +223,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.removeIntf1NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents[] org.apache.beehive.controls.test.controls.inherit.Intf1Bean.getIntf1NewEventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="intf1NewEvent1" <method> Modified: incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf2Bean.beaninfo Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf2Bean.beaninfo?view=diff&rev=124758&p1=incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf2Bean.beaninfo&r1=124757&p2=incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf2Bean.beaninfo&r2=124758 ============================================================================== --- incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf2Bean.beaninfo (original) +++ incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf2Bean.beaninfo Sun Jan 9 19:19:32 2005 @@ -238,6 +238,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.removeIntf2NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents[] org.apache.beehive.controls.test.controls.inherit.Intf2Bean.getIntf2NewEventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="addInEvent1" <method> @@ -322,6 +325,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.removeIntf1EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events[] org.apache.beehive.controls.test.controls.inherit.Intf1Bean.getIntf1EventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="intf1Event1" <method> @@ -406,6 +412,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.removeIntf1NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents[] org.apache.beehive.controls.test.controls.inherit.Intf1Bean.getIntf1NewEventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="intf1NewEvent1" <method> @@ -460,6 +469,9 @@ <remove-listener-method> public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.removeIntf2EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events) </remove-listener-method> + <get-listener-method> + public synchronized org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events[] org.apache.beehive.controls.test.controls.inherit.Intf2Bean.getIntf2EventsListeners() + </get-listener-method> <listener-method-descriptors> <method-descriptor name="addInEvent1" <method>
