I've had this in my tree since the weekend and I wanted to get rid of
it. So, I'm checking it in.
This implements some of the missing methods from beancontext. I stuck
to the easier ones. I must say, this particular package has just
about the worst documentation I've seen in the JDK.
Tom
2006-04-07 Tom Tromey <[EMAIL PROTECTED]>
* java/beans/beancontext/BeanContextMembershipEvent.java
(serialVersionUID): New field.
* java/beans/beancontext/BeanContextServicesSupport.java
(addBeanContextServicesListener): Synchronize.
(addService): Implemented.
(createBCSChild): Implemented.
(BCSSChild): Added arguments.
(fireServiceAdded): Implemented.
(fireServiceRevoked): Implemented.
(getCurrentServiceSelectors): Implemented.
(hasService): Implemented.
(removeBeanContextServicesListener): Implemented.
(serviceAvailable): Implemented.
(serviceRevoked): Implemented.
* java/beans/beancontext/BeanContextSupport.java (BCSChild): Added
arguments.
(createBCSChild): Implemented.
(BeanContextSupport):
(addBeanContextMembershipListener): Synchronize.
(fireChildrenAdded): Implemented.
(fireChildrenRemoved): Implemented.
(BeanContextSupport): Use default locale.
(isEmpty): Implemented.
(isDesignTime): Implemented.
(size): Implemented.
(toArray): Synchronized.
(toArray): Likewise.
(iterator): Likewise.
(BCSIterator): Implemented.
(bcsChildren): Implemented.
(validatePendingAdd): Implemented.
(validatePendingRemove): Likewise.
(childJustAddedHook): Implemented.
(childJustRemovedHook): Likewise.
(classEquals): Likewise.
(toArray): Mark as stub.
(setDesignTime): Implemented.
(copyChildren): Implemented.
(containsKey): Implemented.
(contains): Likewise.
(containsAll): Likewise.
(getResource): Implemented.
(getResourceAsStream): Likewise.
(removeBeanContextMembershipListener): Likewise.
* java/beans/beancontext/BeanContextServiceRevokedEvent.java
(serialVersionUID): New field.
* java/beans/beancontext/BeanContextServiceAvailableEvent.java
(serialVersionUID): New field.
* java/beans/beancontext/BeanContext.java (instantiateChild): Javadoc
fix.
Index: java/beans/beancontext/BeanContext.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/beans/beancontext/BeanContext.java,v
retrieving revision 1.7
diff -u -r1.7 BeanContext.java
--- java/beans/beancontext/BeanContext.java 2 Jul 2005 20:32:37 -0000
1.7
+++ java/beans/beancontext/BeanContext.java 7 Apr 2006 16:22:18 -0000
@@ -198,7 +198,7 @@
* @return the created Bean
*
* @see
java.beans.Beans#instantiate(java.lang.ClassLoader,java.lang.String)
- * @see
java.beans.Beans#instantiate(java.lang.ClassLoader,java.lang.String,java.lang.BeanContext)
+ * @see
java.beans.Beans#instantiate(java.lang.ClassLoader,java.lang.String,java.beans.beancontext.BeanContext)
* @exception IOException if there is an I/O problem during
* instantiation.
* @exception ClassNotFoundException if a serialized Bean's class
Index: java/beans/beancontext/BeanContextMembershipEvent.java
===================================================================
RCS file:
/cvsroot/classpath/classpath/java/beans/beancontext/BeanContextMembershipEvent.java,v
retrieving revision 1.6
diff -u -r1.6 BeanContextMembershipEvent.java
--- java/beans/beancontext/BeanContextMembershipEvent.java 2 Jul 2005
20:32:37 -0000 1.6
+++ java/beans/beancontext/BeanContextMembershipEvent.java 7 Apr 2006
16:22:18 -0000
@@ -52,7 +52,9 @@
* @see java.beans.beancontext.BeanContextMembershipListener
*/
public class BeanContextMembershipEvent extends BeanContextEvent {
- /**
+ private static final long serialVersionUID = 3499346510334590959L;
+
+ /**
* The children that were added or removed.
*/
protected Collection children;
Index: java/beans/beancontext/BeanContextServiceAvailableEvent.java
===================================================================
RCS file:
/cvsroot/classpath/classpath/java/beans/beancontext/BeanContextServiceAvailableEvent.java,v
retrieving revision 1.5
diff -u -r1.5 BeanContextServiceAvailableEvent.java
--- java/beans/beancontext/BeanContextServiceAvailableEvent.java 2 Jul
2005 20:32:37 -0000 1.5
+++ java/beans/beancontext/BeanContextServiceAvailableEvent.java 7 Apr
2006 16:22:18 -0000
@@ -49,7 +49,9 @@
*/
public class BeanContextServiceAvailableEvent extends BeanContextEvent {
- /**
+ private static final long serialVersionUID = -5333985775656400778L;
+
+ /**
* The <code>Class</code> representing the service which is now
* available.
*/
Index: java/beans/beancontext/BeanContextServiceRevokedEvent.java
===================================================================
RCS file:
/cvsroot/classpath/classpath/java/beans/beancontext/BeanContextServiceRevokedEvent.java,v
retrieving revision 1.6
diff -u -r1.6 BeanContextServiceRevokedEvent.java
--- java/beans/beancontext/BeanContextServiceRevokedEvent.java 2 Jul 2005
20:32:37 -0000 1.6
+++ java/beans/beancontext/BeanContextServiceRevokedEvent.java 7 Apr 2006
16:22:18 -0000
@@ -47,7 +47,9 @@
*/
public class BeanContextServiceRevokedEvent extends BeanContextEvent {
- /**
+ private static final long serialVersionUID = -1295543154724961754L;
+
+ /**
* The <code>Class</code> representing the service which is now
* available.
*/
Index: java/beans/beancontext/BeanContextServicesSupport.java
===================================================================
RCS file:
/cvsroot/classpath/classpath/java/beans/beancontext/BeanContextServicesSupport.java,v
retrieving revision 1.9
diff -u -r1.9 BeanContextServicesSupport.java
--- java/beans/beancontext/BeanContextServicesSupport.java 23 Mar 2006
00:30:14 -0000 1.9
+++ java/beans/beancontext/BeanContextServicesSupport.java 7 Apr 2006
16:22:18 -0000
@@ -65,8 +65,9 @@
{
private static final long serialVersionUID = -3263851306889194873L;
- private BCSSChild()
+ BCSSChild(Object targetChild, Object peer)
{
+ super(targetChild, peer);
}
}
@@ -166,22 +167,33 @@
public void addBeanContextServicesListener
(BeanContextServicesListener listener)
{
- if (! bcsListeners.contains(listener))
- bcsListeners.add(listener);
+ synchronized (bcsListeners)
+ {
+ if (! bcsListeners.contains(listener))
+ bcsListeners.add(listener);
+ }
}
- public boolean addService (Class serviceClass, BeanContextServiceProvider
bcsp)
- throws NotImplementedException
+ public boolean addService (Class serviceClass,
+ BeanContextServiceProvider bcsp)
{
- throw new Error ("Not implemented");
+ return addService(serviceClass, bcsp, true);
}
protected boolean addService (Class serviceClass,
BeanContextServiceProvider bcsp,
boolean fireEvent)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ synchronized (services)
+ {
+ if (services.containsKey(serviceClass))
+ return false;
+ services.put(serviceClass, bcsp);
+ if (bcsp instanceof Serializable)
+ ++serializable;
+ fireServiceAdded(serviceClass);
+ return true;
+ }
}
protected void bcsPreDeserializationHook (ObjectInputStream ois)
@@ -205,9 +217,8 @@
protected BeanContextSupport.BCSChild createBCSChild (Object targetChild,
Object peer)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ return new BCSSChild(targetChild, peer);
}
protected BeanContextServicesSupport.BCSSServiceProvider
@@ -218,28 +229,44 @@
}
protected final void fireServiceAdded (BeanContextServiceAvailableEvent
bcssae)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ synchronized (bcsListeners)
+ {
+ int size = bcsListeners.size();
+ for (int i = 0; i < size; ++i)
+ {
+ BeanContextServicesListener bcsl
+ = (BeanContextServicesListener) bcsListeners.get(i);
+ bcsl.serviceAvailable(bcssae);
+ }
+ }
}
protected final void fireServiceAdded (Class serviceClass)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ fireServiceAdded(new BeanContextServiceAvailableEvent(this,
+ serviceClass));
}
protected final void fireServiceRevoked(BeanContextServiceRevokedEvent event)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ synchronized (bcsListeners)
+ {
+ int size = bcsListeners.size();
+ for (int i = 0; i < size; ++i)
+ {
+ BeanContextServicesListener bcsl
+ = (BeanContextServicesListener) bcsListeners.get(i);
+ bcsl.serviceRevoked(event);
+ }
+ }
}
protected final void fireServiceRevoked (Class serviceClass,
boolean revokeNow)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ fireServiceRevoked(new BeanContextServiceRevokedEvent(this, serviceClass,
+ revokeNow));
}
public BeanContextServices getBeanContextServicesPeer ()
@@ -256,15 +283,22 @@
}
public Iterator getCurrentServiceClasses ()
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ synchronized (services)
+ {
+ return services.keySet().iterator();
+ }
}
public Iterator getCurrentServiceSelectors (Class serviceClass)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ synchronized (services)
+ {
+ // FIXME: what if service does not exist? Must write a test.
+ BeanContextServiceProvider bcsp
+ = (BeanContextServiceProvider) services.get(serviceClass);
+ return bcsp.getCurrentServiceSelectors(this, serviceClass);
+ }
}
public Object getService (BeanContextChild child, Object requestor,
@@ -276,9 +310,11 @@
}
public boolean hasService (Class serviceClass)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ synchronized (services)
+ {
+ return services.containsKey(serviceClass);
+ }
}
public void initialize ()
@@ -311,10 +347,12 @@
public void removeBeanContextServicesListener
(BeanContextServicesListener listener)
{
- int index = bcsListeners.indexOf(listener);
-
- if (index > -1)
- bcsListeners.remove(index);
+ synchronized (bcsListeners)
+ {
+ int index = bcsListeners.indexOf(listener);
+ if (index > -1)
+ bcsListeners.remove(index);
+ }
}
public void revokeService (Class serviceClass, BeanContextServiceProvider
bcsp,
@@ -325,14 +363,36 @@
}
public void serviceAvailable (BeanContextServiceAvailableEvent bcssae)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ synchronized (services)
+ {
+ Class klass = bcssae.getServiceClass();
+ if (services.containsKey(klass))
+ return;
+ Iterator it = bcsChildren();
+ while (it.hasNext())
+ {
+ Object obj = it.next();
+ if (obj instanceof BeanContextServices)
+ ((BeanContextServices) obj).serviceAvailable(bcssae);
+ }
+ }
}
public void serviceRevoked (BeanContextServiceRevokedEvent bcssre)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ synchronized (services)
+ {
+ Class klass = bcssre.getServiceClass();
+ if (services.containsKey(klass))
+ return;
+ Iterator it = bcsChildren();
+ while (it.hasNext())
+ {
+ Object obj = it.next();
+ if (obj instanceof BeanContextServices)
+ ((BeanContextServices) obj).serviceRevoked(bcssre);
+ }
+ }
}
}
Index: java/beans/beancontext/BeanContextSupport.java
===================================================================
RCS file:
/cvsroot/classpath/classpath/java/beans/beancontext/BeanContextSupport.java,v
retrieving revision 1.8
diff -u -r1.8 BeanContextSupport.java
--- java/beans/beancontext/BeanContextSupport.java 23 Mar 2006 00:30:14
-0000 1.8
+++ java/beans/beancontext/BeanContextSupport.java 7 Apr 2006 16:22:18
-0000
@@ -40,6 +40,7 @@
import gnu.classpath.NotImplementedException;
+import java.beans.DesignMode;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyVetoException;
@@ -87,27 +88,35 @@
{
private static final long serialVersionUID = -5815286101609939109L;
- BCSChild()
+ private Object targetChild;
+ private Object peer;
+
+ BCSChild(Object targetChild, Object peer)
{
+ this.targetChild = targetChild;
+ this.peer = peer;
}
}
protected static final class BCSIterator implements Iterator
{
- BCSIterator()
+ private Iterator child;
+
+ BCSIterator(Iterator child)
{
+ this.child = child;
}
public boolean hasNext ()
throws NotImplementedException
{
- throw new Error ("Not implemented");
+ return child.hasNext();
}
public Object next ()
throws NotImplementedException
{
- throw new Error ("Not implemented");
+ return child.next();
}
public void remove ()
@@ -164,7 +173,9 @@
public BeanContextSupport (BeanContext peer, Locale lcle, boolean dtime,
boolean visible)
{
- locale = lcle;
+ super(peer);
+
+ locale = lcle == null ? Locale.getDefault() : lcle;
designTime = dtime;
okToUseGui = visible;
@@ -176,24 +187,38 @@
if (targetChild == null)
throw new IllegalArgumentException();
- if (children.containsKey(targetChild))
- return false;
-
- // FIXME: The second argument is surely wrong.
- children.put(targetChild, targetChild);
+ BCSChild child;
+ synchronized (children)
+ {
+ if (children.containsKey(targetChild)
+ || ! validatePendingAdd(targetChild))
+ return false;
+ child = createBCSChild(targetChild, beanContextChildPeer);
+ children.put(targetChild, child);
+ }
+ synchronized (targetChild)
+ {
+ childJustAddedHook(targetChild, child);
+ }
+ fireChildrenAdded(new BeanContextMembershipEvent(this,
+ new Object[] {
targetChild }));
return true;
}
public boolean addAll (Collection c)
{
+ // Intentionally throws an exception.
throw new UnsupportedOperationException();
}
public void addBeanContextMembershipListener
(BeanContextMembershipListener listener)
{
- if (! bcmListeners.contains(listener))
- bcmListeners.add(listener);
+ synchronized (bcmListeners)
+ {
+ if (! bcmListeners.contains(listener))
+ bcmListeners.add(listener);
+ }
}
public boolean avoidingGui ()
@@ -203,9 +228,11 @@
}
protected Iterator bcsChildren ()
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ synchronized (children)
+ {
+ return new BCSIterator(children.values().iterator());
+ }
}
protected void bcsPreDeserializationHook (ObjectInputStream ois)
@@ -227,58 +254,67 @@
}
protected void childJustAddedHook (Object child, BeanContextSupport.BCSChild
bcsc)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ // Do nothing in the base class.
}
protected void childJustRemovedHook (Object child,
BeanContextSupport.BCSChild bcsc)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ // Do nothing in the base class.
}
protected static final boolean classEquals (Class first, Class second)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ // Lame function!
+ return (first == second || first.getName().equals(second.getName()));
}
public void clear ()
{
- // This is probably the right thing to do.
+ // This is the right thing to do.
// The JDK docs are really bad here.
throw new UnsupportedOperationException();
}
public boolean contains (Object o)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ synchronized (children)
+ {
+ return children.containsKey(o);
+ }
}
public boolean containsAll (Collection c)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ synchronized (children)
+ {
+ Iterator it = c.iterator();
+ while (it.hasNext())
+ if (! children.containsKey(it.next()))
+ return false;
+ }
+ return true;
}
public boolean containsKey (Object o)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ synchronized (children)
+ {
+ return children.containsKey(o);
+ }
}
protected final Object[] copyChildren ()
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ synchronized (children)
+ {
+ return children.keySet().toArray();
+ }
}
protected BeanContextSupport.BCSChild createBCSChild (Object targetChild,
Object peer)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ return new BCSChild(targetChild, peer);
}
protected final void deserialize (ObjectInputStream ois, Collection coll)
@@ -294,15 +330,31 @@
}
protected final void fireChildrenAdded (BeanContextMembershipEvent bcme)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ synchronized (bcmListeners)
+ {
+ Iterator it = bcmListeners.iterator();
+ while (it.hasNext())
+ {
+ BeanContextMembershipListener l
+ = (BeanContextMembershipListener) it.next();
+ l.childrenAdded(bcme);
+ }
+ }
}
protected final void fireChildrenRemoved (BeanContextMembershipEvent bcme)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ synchronized (bcmListeners)
+ {
+ Iterator it = bcmListeners.iterator();
+ while (it.hasNext())
+ {
+ BeanContextMembershipListener l
+ = (BeanContextMembershipListener) it.next();
+ l.childrenRemoved(bcme);
+ }
+ }
}
public BeanContext getBeanContextPeer ()
@@ -353,15 +405,21 @@
}
public URL getResource (String name, BeanContextChild bcc)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ if (! contains(bcc))
+ throw new IllegalArgumentException("argument not a child");
+ ClassLoader loader = bcc.getClass().getClassLoader();
+ return (loader == null ? ClassLoader.getSystemResource(name)
+ : loader.getResource(name));
}
public InputStream getResourceAsStream (String name, BeanContextChild bcc)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ if (! contains(bcc))
+ throw new IllegalArgumentException("argument not a child");
+ ClassLoader loader = bcc.getClass().getClassLoader();
+ return (loader == null ? ClassLoader.getSystemResourceAsStream(name)
+ : loader.getResourceAsStream(name));
}
protected void initialize ()
@@ -377,15 +435,16 @@
}
public boolean isDesignTime ()
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ return designTime;
}
public boolean isEmpty ()
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ synchronized (children)
+ {
+ return children.isEmpty();
+ }
}
public boolean isSerializing ()
@@ -396,7 +455,10 @@
public Iterator iterator ()
{
- return children.keySet().iterator();
+ synchronized (children)
+ {
+ return children.keySet().iterator();
+ }
}
public boolean needsGui ()
@@ -439,17 +501,21 @@
public boolean removeAll (Collection c)
{
+ // Intentionally throws an exception.
throw new UnsupportedOperationException();
}
public void removeBeanContextMembershipListener
(BeanContextMembershipListener bcml)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ synchronized (bcmListeners)
+ {
+ bcmListeners.remove(bcml);
+ }
}
public boolean retainAll (Collection c)
{
+ // Intentionally throws an exception.
throw new UnsupportedOperationException();
}
@@ -460,43 +526,58 @@
}
public void setDesignTime (boolean dtime)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ boolean save = designTime;
+ designTime = dtime;
+ firePropertyChange(DesignMode.PROPERTYNAME, Boolean.valueOf(save),
+ Boolean.valueOf(dtime));
}
public void setLocale (Locale newLocale)
- throws PropertyVetoException, NotImplementedException
+ throws PropertyVetoException
{
- throw new Error ("Not implemented");
+ if (newLocale == null || locale == newLocale)
+ return;
+ fireVetoableChange("locale", locale, newLocale);
+ Locale oldLocale = locale;
+ locale = newLocale;
+ firePropertyChange("locale", oldLocale, newLocale);
}
public int size ()
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ synchronized (children)
+ {
+ return children.size();
+ }
}
public Object[] toArray ()
{
- return children.keySet().toArray();
+ synchronized (children)
+ {
+ return children.keySet().toArray();
+ }
}
public Object[] toArray(Object[] array)
+ throws NotImplementedException
{
- return children.keySet().toArray(array);
+ // This implementation is incorrect, I think.
+ synchronized (children)
+ {
+ return children.keySet().toArray(array);
+ }
}
protected boolean validatePendingAdd (Object targetChild)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ return true;
}
protected boolean validatePendingRemove (Object targetChild)
- throws NotImplementedException
{
- throw new Error ("Not implemented");
+ return true;
}
public void vetoableChange (PropertyChangeEvent pce)