diff options
Diffstat (limited to 'libjava/classpath/java/beans/beancontext/BeanContextServicesSupport.java')
-rw-r--r-- | libjava/classpath/java/beans/beancontext/BeanContextServicesSupport.java | 172 |
1 files changed, 135 insertions, 37 deletions
diff --git a/libjava/classpath/java/beans/beancontext/BeanContextServicesSupport.java b/libjava/classpath/java/beans/beancontext/BeanContextServicesSupport.java index 5455adbaec3..4da523eeb06 100644 --- a/libjava/classpath/java/beans/beancontext/BeanContextServicesSupport.java +++ b/libjava/classpath/java/beans/beancontext/BeanContextServicesSupport.java @@ -38,6 +38,8 @@ exception statement from your version. */ package java.beans.beancontext; +import gnu.classpath.NotImplementedException; + import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; @@ -62,6 +64,11 @@ public class BeanContextServicesSupport extends BeanContextSupport.BCSChild { private static final long serialVersionUID = -3263851306889194873L; + + BCSSChild(Object targetChild, Object peer) + { + super(targetChild, peer); + } } protected class BCSSProxyServiceProvider @@ -69,9 +76,14 @@ public class BeanContextServicesSupport BeanContextServiceRevokedListener { private static final long serialVersionUID = 7078212910685744490L; - + + private BCSSProxyServiceProvider() + { + } + public Iterator getCurrentServiceSelectors (BeanContextServices bcs, Class serviceClass) + throws NotImplementedException { throw new Error ("Not implemented"); } @@ -80,6 +92,7 @@ public class BeanContextServicesSupport Object requestor, Class serviceClass, Object serviceSelector) + throws NotImplementedException { throw new Error ("Not implemented"); } @@ -87,11 +100,13 @@ public class BeanContextServicesSupport public void releaseService (BeanContextServices bcs, Object requestor, Object service) + throws NotImplementedException { throw new Error ("Not implemented"); } public void serviceRevoked (BeanContextServiceRevokedEvent bcsre) + throws NotImplementedException { throw new Error ("Not implemented"); } @@ -104,6 +119,10 @@ public class BeanContextServicesSupport protected BeanContextServiceProvider serviceProvider; + private BCSSServiceProvider() + { + } + protected BeanContextServiceProvider getServiceProvider() { return serviceProvider; @@ -148,105 +167,154 @@ public class BeanContextServicesSupport 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) + 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) { - 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) - throws ClassNotFoundException, IOException + throws ClassNotFoundException, IOException, NotImplementedException { throw new Error ("Not implemented"); } protected void bcsPreSerializationHook (ObjectOutputStream oos) - throws IOException + throws IOException, NotImplementedException { throw new Error ("Not implemented"); } protected void childJustRemovedHook (Object child, BeanContextSupport.BCSChild bcsc) + throws NotImplementedException { throw new Error ("Not implemented"); } protected BeanContextSupport.BCSChild createBCSChild (Object targetChild, - Object peer) + Object peer) { - throw new Error ("Not implemented"); + return new BCSSChild(targetChild, peer); } protected BeanContextServicesSupport.BCSSServiceProvider createBCSSServiceProvider (Class sc, BeanContextServiceProvider bcsp) + throws NotImplementedException { throw new Error ("Not implemented"); } protected final void fireServiceAdded (BeanContextServiceAvailableEvent bcssae) { - 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) + protected final void fireServiceAdded (Class serviceClass) { - throw new Error ("Not implemented"); + fireServiceAdded(new BeanContextServiceAvailableEvent(this, + serviceClass)); } protected final void fireServiceRevoked(BeanContextServiceRevokedEvent event) { - 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) { - throw new Error ("Not implemented"); + fireServiceRevoked(new BeanContextServiceRevokedEvent(this, serviceClass, + revokeNow)); } public BeanContextServices getBeanContextServicesPeer () + throws NotImplementedException { throw new Error ("Not implemented"); } protected static final BeanContextServicesListener - getChildBeanContextServicesListener (Object child) + getChildBeanContextServicesListener (Object child) + throws NotImplementedException { throw new Error ("Not implemented"); } - public Iterator getCurrentServiceClasses () + public Iterator getCurrentServiceClasses () { - throw new Error ("Not implemented"); + synchronized (services) + { + return services.keySet().iterator(); + } } - public Iterator getCurrentServiceSelectors (Class serviceClass) + public Iterator getCurrentServiceSelectors (Class serviceClass) { - 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, Class serviceClass, Object serviceSelector, BeanContextServiceRevokedListener bcsrl) - throws TooManyListenersException + throws TooManyListenersException, NotImplementedException { throw new Error ("Not implemented"); } public boolean hasService (Class serviceClass) { - throw new Error ("Not implemented"); + synchronized (services) + { + return services.containsKey(serviceClass); + } } public void initialize () @@ -257,18 +325,21 @@ public class BeanContextServicesSupport services = new HashMap(); } - protected void initializeBeanContextResources () + protected void initializeBeanContextResources () + throws NotImplementedException { throw new Error ("Not implemented"); } - protected void releaseBeanContextResources () + protected void releaseBeanContextResources () + throws NotImplementedException { throw new Error ("Not implemented"); } public void releaseService (BeanContextChild child, Object requestor, Object service) + throws NotImplementedException { throw new Error ("Not implemented"); } @@ -276,25 +347,52 @@ public class BeanContextServicesSupport 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, - boolean revokeCurrentServicesNow) + boolean revokeCurrentServicesNow) + throws NotImplementedException { throw new Error ("Not implemented"); } - public void serviceAvailable (BeanContextServiceAvailableEvent bcssae) - { - throw new Error ("Not implemented"); - } - - public void serviceRevoked (BeanContextServiceRevokedEvent bcssre) - { - throw new Error ("Not implemented"); + public void serviceAvailable (BeanContextServiceAvailableEvent bcssae) + { + 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) + { + 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); + } + } } } |