You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2014/11/20 22:05:47 UTC

svn commit: r1640812 - in /felix/sandbox/pderop/dependencymanager-prototype: org.apache.felix.dependencymanager.runtime/src/org/apache/felix/dm/runtime/ org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep...

Author: pderop
Date: Thu Nov 20 21:05:46 2014
New Revision: 1640812

URL: http://svn.apache.org/r1640812
Log:
Simplifed ComponentContext, DependencyContext and AbstractDependency:

- replaced ComponentContext handleAdded/handleChanged/handleRemoved/handleSwapped methods by a single
handleEvent(DependencyContext dc, EventType type, Event ... event) method.

- replaced DependencyContext invokeAdd/invokeChange/invokeRemove/invokeSwap methods by a single
invokeCallback(EventType type, Event ... events) method.


Added:
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/EventType.java
Modified:
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.runtime/src/org/apache/felix/dm/runtime/ToggleServiceDependency.java
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathDependencyImpl.java
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/AbstractDependency.java
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/ComponentContext.java
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/DependencyContext.java
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/Event.java
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/BundleDependencyImpl.java
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ComponentImpl.java
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ConfigurationDependencyImpl.java
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/FilterComponent.java
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ResourceDependencyImpl.java
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceDependencyImpl.java
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/TemporalServiceDependencyImpl.java
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/test/test/SimpleServiceDependency.java

Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.runtime/src/org/apache/felix/dm/runtime/ToggleServiceDependency.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.runtime/src/org/apache/felix/dm/runtime/ToggleServiceDependency.java?rev=1640812&r1=1640811&r2=1640812&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.runtime/src/org/apache/felix/dm/runtime/ToggleServiceDependency.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.runtime/src/org/apache/felix/dm/runtime/ToggleServiceDependency.java Thu Nov 20 21:05:46 2014
@@ -18,11 +18,10 @@
  */
 package org.apache.felix.dm.runtime;
 
-import java.util.Dictionary;
-
 import org.apache.felix.dm.context.AbstractDependency;
 import org.apache.felix.dm.context.DependencyContext;
 import org.apache.felix.dm.context.Event;
+import org.apache.felix.dm.context.EventType;
 
 /**
  * This is a custom DependencyManager Dependency, allowing to take control of
@@ -47,11 +46,7 @@ public class ToggleServiceDependency ext
     }
 
     public void activate(boolean active) {
-        if (active) {
-            m_component.handleAdded(this, new Event(active));
-        } else {
-            m_component.handleRemoved(this, new Event(active));
-        }
+        m_component.handleEvent(this, active ? EventType.ADDED : EventType.REMOVED, new Event(active));
     }
 
     @Override

Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathDependencyImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathDependencyImpl.java?rev=1640812&r1=1640811&r2=1640812&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathDependencyImpl.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathDependencyImpl.java Thu Nov 20 21:05:46 2014
@@ -12,6 +12,7 @@ import java.util.List;
 import org.apache.felix.dm.context.AbstractDependency;
 import org.apache.felix.dm.context.DependencyContext;
 import org.apache.felix.dm.context.Event;
+import org.apache.felix.dm.context.EventType;
 
 /**
  * This is our own "path" Dependency Manager Dependency, which can track the presence of files in a given path dir.
@@ -67,26 +68,29 @@ public class PathDependencyImpl extends 
     }
     
     @Override   
-    public void invokeAdd(Event e) {
-        if (m_add != null) {
-            invoke(m_add, e, getInstances());
-        }
-    }
-    
-    @Override   
-    public void invokeChange(Event e) {
-        if (m_change != null) {
-            invoke(m_change, e, getInstances());
-        }
-    }
-    
-    @Override   
-    public void invokeRemove(Event e) {
-        if (m_remove != null) {
-            invoke(m_remove, e, getInstances());
+    public void invokeCallback(EventType type, Event ...events) {
+        switch (type) {
+        case ADDED:        
+            if (m_add != null) {
+                invoke(m_add, events[0], getInstances());
+            }
+            break;
+        case CHANGED:
+            if (m_change != null) {
+                invoke(m_change, events[0], getInstances());
+            }
+            break;
+        case REMOVED:
+            if (m_remove != null) {
+                invoke(m_remove, events[0], getInstances());
+            }
+            break;
+        default:
+            // We don't support other kind of callbacks.
+            break;
         }
     }
-    
+        
     // ---------- ComponentDependencyDeclaration interface -----------
     
     /**
@@ -121,7 +125,7 @@ public class PathDependencyImpl extends 
 
 				List<WatchEvent<?>> events = watckKey.pollEvents();
 
-				for (WatchEvent event : events) {
+				for (@SuppressWarnings("rawtypes") WatchEvent event : events) {
 					final Kind<?> kind = event.kind();
 					if (StandardWatchEventKinds.OVERFLOW == kind) {
 						continue;
@@ -130,15 +134,15 @@ public class PathDependencyImpl extends 
 					    // Notify the component implementation context that a file has been created.
 					    // Later, the component will call our invokeAdd method in order to inject the file
 					    // in the component instance
-				        m_component.handleAdded(this, new Event(event.context().toString()));
+				        m_component.handleEvent(this, EventType.ADDED, new Event(event.context().toString()));
 					} else if (StandardWatchEventKinds.ENTRY_MODIFY == kind) {
 					    // Notify the component implementation context that a file has changed.
                         // Later, the component will call our invokeChange method in order to call our component "change" callback
-                        m_component.handleChanged(this, new Event(event.context().toString()));
+                        m_component.handleEvent(this, EventType.CHANGED, new Event(event.context().toString()));
                     } else if (StandardWatchEventKinds.ENTRY_DELETE == kind) {
 					    // Notify the component implementation context that a file has been removed.
 					    // Later, the component will call our invokeRemove method in order to call our component "remove" callback
-					    m_component.handleRemoved(this, new Event(event.context().toString()));
+					    m_component.handleEvent(this, EventType.REMOVED, new Event(event.context().toString()));
 					}
 				}
 				

Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/AbstractDependency.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/AbstractDependency.java?rev=1640812&r1=1640811&r2=1640812&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/AbstractDependency.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/AbstractDependency.java Thu Nov 20 21:05:46 2014
@@ -34,7 +34,6 @@ import org.apache.felix.dm.ServiceDepend
  *
  * @param <T> The type of the interface representing a Dependency Manager Dependency (must extends the Dependency interface).
  */
-@SuppressWarnings("rawtypes")
 public abstract class AbstractDependency<T extends Dependency> implements
     Dependency, DependencyContext, ComponentDependencyDeclaration {
 
@@ -214,36 +213,14 @@ public abstract class AbstractDependency
     }
 
     /**
-     * The Component "add" callback must be invoked with the added dependency event.
-     * @param Event the added dependency service event
+     * A Component callback must be invoked with dependency event(s).
+     * @param type the dependency event type
+     * @param events the dependency service event to inject in the component. 
+     * The number of events depends on the dependency event type: ADDED/CHANGED/REMOVED types only has one event parameter, 
+     * but the SWAPPED type has two event parameters: the first one is the old event which must be replaced by the second one.
      */
     @Override
-    public void invokeAdd(Event e) {
-    }
-
-    /**
-     * The Component "change" callback must be invoked with the changed dependency event.
-     * @param Event the changed dependency service event
-     */
-    @Override
-    public void invokeChange(Event e) {
-    }
-
-    /**
-     * The Component "remove" callback must be invoked with the removed dependency event.
-     * @param Event the removed dependency service event
-     */
-    @Override
-    public void invokeRemove(Event e) {
-    }
-
-    /**
-     * If the Dependency supports "swap" callback, then invoke the swap callback on the component instance
-     * @param event the previous dependency event that was injected in the component instance
-     * @param newEvent the new dependency event that has to replace the old one
-     */
-    @Override
-    public void invokeSwap(Event event, Event newEvent) {
+    public void invokeCallback(EventType type, Event ... events) {
     }
 
     /**
@@ -310,7 +287,6 @@ public abstract class AbstractDependency
     /**
      * TODO move this method elsewhere, to DependencyBase for example.
      */
-    @SuppressWarnings("unchecked")
     @Override
     public Event getService() {
         Event event = m_component.getDependencyEvent(this);
@@ -344,7 +320,6 @@ public abstract class AbstractDependency
     /**
      * Copy all dependency service instances to the given map (key = dependency service, value = dependency service properties.
      */
-    @SuppressWarnings("unchecked")
     @Override
     public void copyToMap(Map<Object, Dictionary<String, ?>> map) {
         Set<Event> events = m_component.getDependencyEvents(this);

Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/ComponentContext.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/ComponentContext.java?rev=1640812&r1=1640811&r2=1640812&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/ComponentContext.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/ComponentContext.java Thu Nov 20 21:05:46 2014
@@ -82,34 +82,21 @@ public interface ComponentContext extend
     public boolean isAvailable();
     
     /**
-     * Notifies the Component about a new available dependency service. 
+     * Notifies the Component about a dependency event.
+     * An event is for example fired when:<p>
+     * <ul>
+     * <li> a dependency service becomes available {@link EventType#ADDED}) 
+     * <li> a dependenc service has changed is changed {@link EventType#CHANGED}) 
+     * <li> a dependency service has been lost {@link EventType#REMOVED}) 
+     * <li> a dependency service has been swapped by another {@link EventType#SWAPPED}) 
+     * </ul> 
      * @param dc the dependency
-     * @param e the availabe dependency service event
+     * @param type the dependency event type
+     * @param e the dependency event
+     * @see EventType
      */
-    public void handleAdded(DependencyContext dc, Event e);
- 
-    /**
-     * Notifies the Component about a dependency change event 
-     * @param dc the dependency
-     * @param e the dependency change event
-     */
-    public void handleChanged(DependencyContext dc, Event e);
- 
-    /**
-     * Notifies the Component that a dependency service instance becomes unavailable.
-     * @param dc the dependency
-     * @param e the dependency service that becomes unavailable
-     */
-    public void handleRemoved(DependencyContext dc, Event e);
- 
-    /**
-     * Notifies the Component that a dependency service instance has been swapped by another one.
-     * @param dc the dependency
-     * @param event the dependency service to replace with the new event
-     * @param newEvent the new dependency service that is replacing the old one
-     */
-    public void handleSwapped(DependencyContext dc, Event event, Event newEvent);
-  
+    public void handleEvent(DependencyContext dc, EventType type, Event ... event);
+   
     /**
      * Returns the list of dependencies that has been registered on this component
      * @return the list of dependencies that has been registered on this component

Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/DependencyContext.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/DependencyContext.java?rev=1640812&r1=1640811&r2=1640812&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/DependencyContext.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/DependencyContext.java Thu Nov 20 21:05:46 2014
@@ -38,37 +38,16 @@ public interface DependencyContext exten
     public void setComponentContext(ComponentContext component);
     
     /**
-     * The Component implementation ask this dependency to invoke the component "add" callback for the given dependency service event.
-     * @param e the dependency service event, that has previously been submitted to the component implementation using
-     * the ComponentContext.handleAdded method.
-     * @see ComponentContext#handleAdded(DependencyContext, Event)
+     * The Component implementation ask this dependency to invoke a component callback for the given dependency service event(s).
+     * 
+     * @param type the type of the callback to invoke (add/change/remove/swap ...)
+     * @param events the dependency service event(s) that has previously been submitted to the component implementation using
+     * the ComponentContext.handleEvent method.
+     * @see ComponentContext#handleEvent(DependencyContext, EventType, Event...)
+     * @see EventType
      */
-	public void invokeAdd(Event e);
-	
-    /**
-     * The Component implementation ask this dependency to invoke the component "change" callback for the given dependency service event.
-     * @param e the dependency service event, that has previously been submitted to in the component implementation using
-     * the ComponentContext.handleChanged method.
-     * @see ComponentContext#handleChanged(DependencyContext, Event)
-     */
-	public void invokeChange(Event e);
-	
-    /**
-     * The Component implementation ask this dependency to invoke the component "remove" callback for the given dependency service event.
-     * @param e the dependency service event, that has previously been submitted to in the component implementation using
-     * the ComponentContext.handleRemoved method.
-     * @see ComponentContext#handleRemoved(DependencyContext, Event)
-     */
-	public void invokeRemove(Event e);
-	
-    /**
-     * The Component implementation ask this dependency to invoke the component "swap" callback for the given dependency service event.
-     * @param e the dependency service event, that has previously been submitted to in the component implementation using
-     * the ComponentContext.handleSwapped method.
-     * @see ComponentContext#handleSwapped(DependencyContext, Event, Event)
-     */
-	public void invokeSwap(Event event, Event newEvent);
-	
+	public void invokeCallback(EventType type, Event ... events);
+			
 	/**
 	 *  Invoked by the component when the dependency should start working. 
 	 **/

Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/Event.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/Event.java?rev=1640812&r1=1640811&r2=1640812&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/Event.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/Event.java Thu Nov 20 21:05:46 2014
@@ -32,6 +32,21 @@ public class Event implements Comparable
     public Event(Object event) {
         m_event = event;
     }
+    
+    /**
+     * Returns the actual event object wrapped by this event (a Service Dependency, a Bundle for Bundle Dependency, etc...).
+     */
+    @SuppressWarnings("unchecked")
+    public <T> T getEvent() {
+        return (T) m_event;
+    }
+    
+    /**
+     * Returns the properties of the actual event object wrapped by this event (Service Dependency properties, ...).
+     */
+    public Dictionary<String, Object> getProperties() {
+        return EMPTY_PROPERTIES;
+    }
 
     @Override
     public int hashCode() {
@@ -58,19 +73,4 @@ public class Event implements Comparable
      */
     public void close() {
     }
-    
-    /**
-     * Returns the actual event object wrapped by this event (a Service Dependency, a Bundle for Bundle Dependency, etc...).
-     */
-    @SuppressWarnings("unchecked")
-    public <T> T getEvent() {
-        return (T) m_event;
-    }
-    
-    /**
-     * Returns the properties of the actual event object wrapped by this event (Service Dependency properties, ...).
-     */
-    public Dictionary<String, Object> getProperties() {
-        return EMPTY_PROPERTIES;
-    }
 }

Added: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/EventType.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/EventType.java?rev=1640812&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/EventType.java (added)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/EventType.java Thu Nov 20 21:05:46 2014
@@ -0,0 +1,26 @@
+package org.apache.felix.dm.context;
+
+/**
+ * Types of dependency events
+ */
+public enum EventType {
+    /**
+     * A Dependency service becomes available.
+     */
+    ADDED, 
+    
+    /**
+     * A Dependency service has changed.    
+     */
+    CHANGED, 
+    
+    /**
+     * A Dependency service becomes unavailable.
+     */
+    REMOVED,
+    
+    /**
+     * A Dependency service has been swapped by another one.
+     */
+    SWAPPED
+}

Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/BundleDependencyImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/BundleDependencyImpl.java?rev=1640812&r1=1640811&r2=1640812&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/BundleDependencyImpl.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/BundleDependencyImpl.java Thu Nov 20 21:05:46 2014
@@ -27,6 +27,7 @@ import org.apache.felix.dm.ComponentDepe
 import org.apache.felix.dm.context.AbstractDependency;
 import org.apache.felix.dm.context.DependencyContext;
 import org.apache.felix.dm.context.Event;
+import org.apache.felix.dm.context.EventType;
 import org.apache.felix.dm.tracker.BundleTracker;
 import org.apache.felix.dm.tracker.BundleTrackerCustomizer;
 import org.osgi.framework.Bundle;
@@ -157,42 +158,40 @@ public class BundleDependencyImpl extend
     }
     
     public void addedBundle(Bundle bundle, BundleEvent event, Object object) {
-        m_component.handleAdded(this, new BundleEventImpl(bundle, event));
+        m_component.handleEvent(this, EventType.ADDED, new BundleEventImpl(bundle, event));
     }
         
     public void modifiedBundle(Bundle bundle, BundleEvent event, Object object) {
-        m_component.handleChanged(this, new BundleEventImpl(bundle, event));
+        m_component.handleEvent(this, EventType.CHANGED, new BundleEventImpl(bundle, event));
     }
 
     public void removedBundle(Bundle bundle, BundleEvent event, Object object) {
-        m_component.handleRemoved(this, new BundleEventImpl(bundle, event));
+        m_component.handleEvent(this, EventType.REMOVED, new BundleEventImpl(bundle, event));
     }
     
-    @SuppressWarnings("rawtypes")
     @Override
-    public void invokeAdd(Event e) {
-        if (m_add != null) {
-            invoke(m_add, e);
-        }
-    }
-    
-    @SuppressWarnings("rawtypes")
-    @Override
-    public void invokeChange(Event e) {
-        if (m_change != null) {
-            invoke (m_change, e);
-        }
-    }
-
-    @SuppressWarnings("rawtypes")
-    @Override
-    public void invokeRemove(Event e) {
-        if (m_remove != null) {
-            invoke (m_remove, e);
+    public void invokeCallback(EventType type, Event ... e) {
+        switch (type) {
+        case ADDED:
+            if (m_add != null) {
+                invoke(m_add, e[0]);
+            }
+            break;
+        case CHANGED:
+            if (m_change != null) {
+                invoke (m_change, e[0]);
+            }
+            break;
+        case REMOVED:
+            if (m_remove != null) {
+                invoke (m_remove, e[0]);
+            }
+            break;
+        default:
+            break;
         }
     }
-        
-    @SuppressWarnings("rawtypes")
+            
     private void invoke(String method, Event e) {
         BundleEventImpl be = (BundleEventImpl) e;
         m_component.invokeCallbackMethod(getInstances(), method,
@@ -227,7 +226,7 @@ public class BundleDependencyImpl extend
         return Bundle.class;
     }
         
-    @SuppressWarnings({ "unchecked", "rawtypes" })
+    @SuppressWarnings("unchecked")
     @Override
     public Dictionary<String, Object> getProperties() {
         Event event = getService();

Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ComponentImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ComponentImpl.java?rev=1640812&r1=1640811&r2=1640812&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ComponentImpl.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ComponentImpl.java Thu Nov 20 21:05:46 2014
@@ -50,9 +50,9 @@ import org.apache.felix.dm.ComponentStat
 import org.apache.felix.dm.ComponentStateListener;
 import org.apache.felix.dm.Dependency;
 import org.apache.felix.dm.DependencyManager;
-import org.apache.felix.dm.context.AbstractDependency;
 import org.apache.felix.dm.context.ComponentContext;
 import org.apache.felix.dm.context.DependencyContext;
+import org.apache.felix.dm.context.EventType;
 import org.apache.felix.dm.context.Event;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -249,43 +249,87 @@ public class ComponentImpl implements Co
 	    m_serviceProperties = properties;
 	    return this;
 	}
-
+	
 	@Override
-	public void handleAdded(final DependencyContext dc, final Event e) {
+    public void handleEvent(final DependencyContext dc, final EventType type, final Event... event) {
         // since this method can be invoked by anyone from any thread, we need to
         // pass on the event to a runnable that we execute using the component's
         // executor
-	    getExecutor().execute(new Runnable() {
+        getExecutor().execute(new Runnable() {
             @Override
             public void run() {
-                doHandleAdded(dc, e);
+                switch (type) {
+                case ADDED:
+                    handleAdded(dc, event[0]);
+                    break;
+                case CHANGED:
+                    handleChanged(dc, event[0]);
+                    break;
+                case REMOVED:
+                    handleRemoved(dc, event[0]);
+                    break;
+                case SWAPPED:
+                    handleSwapped(dc, event[0], event[1]);
+                    break;
+                }
             }
         });
 	}
-	
-	private void doHandleAdded(DependencyContext dc, Event e) {
-	    if (! m_isStarted) {
-	        return;
-	    }
-	    if (debug) {
-	          System.out.println("*" + debugKey + " T" + Thread.currentThread().getId() + " handleAdded " + e);
-		}
-		
-		Set<Event> dependencyEvents = m_dependencyEvents.get(dc);
-		dependencyEvents.add(e);		
-		dc.setAvailable(true);
-		
-		// Recalculate state changes. We only do this if the dependency is started. If the dependency is not started,
-		// it means it is actually starting. And in this case, we don't recalculate state changes now. We'll do it 
-		// once all currently available services are found, and then after, we'll recalculate state change 
-		// (see the startDependencies method).
-		// All this is done for two reasons:
-		// 1- optimization: it is preferable to recalculate state changes once we know about all currently available dependency services
-		//    (after the tracker has returned from its open method).
-		// 2- This also allows to determine the list of currently available dependency services from within the component start method callback
-		//    (this will be extremely useful when porting the Felix SCR on top of DM4).
-		
-		if (dc.isStarted()) {
+
+    @Override
+    public Event getDependencyEvent(DependencyContext dc) {
+        ConcurrentSkipListSet<Event> events = m_dependencyEvents.get(dc);
+        return events.size() > 0 ? events.last() : null;
+    }
+    
+    @Override
+    public Set<Event> getDependencyEvents(DependencyContext dc) {
+        return m_dependencyEvents.get(dc);
+    }
+
+    public Component setAutoConfig(Class<?> clazz, boolean autoConfig) {
+        m_autoConfig.put(clazz, Boolean.valueOf(autoConfig));
+        return this;
+    }
+    
+    public Component setAutoConfig(Class<?> clazz, String instanceName) {
+        m_autoConfig.put(clazz, Boolean.valueOf(instanceName != null));
+        m_autoConfigInstance.put(clazz, instanceName);
+        return this;
+    }
+    
+    public boolean getAutoConfig(Class<?> clazz) {
+        Boolean result = (Boolean) m_autoConfig.get(clazz);
+        return (result != null && result.booleanValue());
+    }
+    
+    public String getAutoConfigInstance(Class<?> clazz) {
+        return (String) m_autoConfigInstance.get(clazz);
+    }
+
+    private void handleAdded(DependencyContext dc, Event e) {
+        if (! m_isStarted) {
+            return;
+        }
+        if (debug) {
+              System.out.println("*" + debugKey + " T" + Thread.currentThread().getId() + " handleAdded " + e);
+        }
+        
+        Set<Event> dependencyEvents = m_dependencyEvents.get(dc);
+        dependencyEvents.add(e);        
+        dc.setAvailable(true);
+        
+        // Recalculate state changes. We only do this if the dependency is started. If the dependency is not started,
+        // it means it is actually starting. And in this case, we don't recalculate state changes now. We'll do it 
+        // once all currently available services are found, and then after, we'll recalculate state change 
+        // (see the startDependencies method).
+        // All this is done for two reasons:
+        // 1- optimization: it is preferable to recalculate state changes once we know about all currently available dependency services
+        //    (after the tracker has returned from its open method).
+        // 2- This also allows to determine the list of currently available dependency services from within the component start method callback
+        //    (this will be extremely useful when porting the Felix SCR on top of DM4).
+        
+        if (dc.isStarted()) {
             switch (m_state) {
             case WAITING_FOR_REQUIRED:
                 if (dc.isRequired())
@@ -294,7 +338,7 @@ public class ComponentImpl implements Co
             case INSTANTIATED_AND_WAITING_FOR_REQUIRED:
                 if (!dc.isInstanceBound()) {
                     if (dc.isRequired()) {
-                        dc.invokeAdd(e);
+                        dc.invokeCallback(EventType.ADDED, e);
                     }
                     updateInstance(dc, e, false, true);
                 }
@@ -304,28 +348,15 @@ public class ComponentImpl implements Co
                 }
                 break;
             case TRACKING_OPTIONAL:
-                dc.invokeAdd(e);
+                dc.invokeCallback(EventType.ADDED, e);
                 updateInstance(dc, e, false, true);
                 break;
             default:
             }
-		}
-	}
-		
-    @Override
-    public void handleChanged(final DependencyContext dc, final Event e) {
-        // since this method can be invoked by anyone from any thread, we need to
-        // pass on the event to a runnable that we execute using the component's
-        // executor
-        getExecutor().execute(new Runnable() {
-            @Override
-            public void run() {
-                doHandleChanged(dc, e);
-            }
-        });  
+        }
     }
         
-    private void doHandleChanged(DependencyContext dc, Event e) {
+    private void handleChanged(final DependencyContext dc, final Event e) {
         if (! m_isStarted) {
             return;
         }
@@ -336,13 +367,13 @@ public class ComponentImpl implements Co
         if (dc.isStarted()) {
             switch (m_state) {
             case TRACKING_OPTIONAL:
-                dc.invokeChange(e);
+                dc.invokeCallback(EventType.CHANGED, e);
                 updateInstance(dc, e, true, false);
                 break;
 
             case INSTANTIATED_AND_WAITING_FOR_REQUIRED:
                 if (!dc.isInstanceBound()) {
-                    dc.invokeChange(e);
+                    dc.invokeCallback(EventType.CHANGED, e);
                     updateInstance(dc, e, true, false);
                 }
                 break;
@@ -351,25 +382,8 @@ public class ComponentImpl implements Co
             }
         }
     }
-
-    @Override
-    public void handleRemoved(final DependencyContext dc, final Event e) {
-        // since this method can be invoked by anyone from any thread, we need to
-        // pass on the event to a runnable that we execute using the component's
-        // executor
-        getExecutor().execute(new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    doHandleRemoved(dc, e);
-                } finally {
-                    e.close();
-                }
-            }
-        });
-    }
     
-    private void doHandleRemoved(DependencyContext dc, Event e) {
+    private void handleRemoved(DependencyContext dc, Event e) {
         if (! m_isStarted) {
             return;
         }
@@ -399,43 +413,26 @@ public class ComponentImpl implements Co
             case INSTANTIATED_AND_WAITING_FOR_REQUIRED:
                 if (!dc.isInstanceBound()) {
                     if (dc.isRequired()) {
-                        dc.invokeRemove(e);
+                        dc.invokeCallback(EventType.REMOVED, e);
                     }
                     updateInstance(dc, e, false, false);
                 }
                 break;
             case TRACKING_OPTIONAL:
-                dc.invokeRemove(e);
+                dc.invokeCallback(EventType.REMOVED, e);
                 updateInstance(dc, e, false, false);
                 break;
             default:
             }
         }
     }
-
-    @Override
-    public void handleSwapped(final DependencyContext dc, final Event event, final Event newEvent) {
-        // since this method can be invoked by anyone from any thread, we need to
-        // pass on the event to a runnable that we execute using the component's
-        // executor
-        getExecutor().execute(new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    doHandleSwapped(dc, event, newEvent);
-                } finally {
-                    event.close();
-                }
-            }
-        });  
-    }
     
-    private void doHandleSwapped(DependencyContext dc, Event event, Event newEvent) {
+    private void handleSwapped(DependencyContext dc, Event oldEvent, Event newEvent) {
         if (! m_isStarted) {
             return;
         }
         Set<Event> dependencyEvents = m_dependencyEvents.get(dc);        
-        dependencyEvents.remove(event);
+        dependencyEvents.remove(oldEvent);
         dependencyEvents.add(newEvent);
                 
         if (dc.isStarted()) {
@@ -448,49 +445,18 @@ public class ComponentImpl implements Co
                 // Only swap *non* instance-bound dependencies
                 if (!dc.isInstanceBound()) {
                     if (dc.isRequired()) {
-                        dc.invokeSwap(event, newEvent);
+                        dc.invokeCallback(EventType.SWAPPED, oldEvent, newEvent); 
                     }
                 }
                 break;
             case TRACKING_OPTIONAL:
-                dc.invokeSwap(event, newEvent);
+                dc.invokeCallback(EventType.SWAPPED, oldEvent, newEvent);
                 break;
             default:
             }
         }
     }
     
-    @Override
-    public Event getDependencyEvent(DependencyContext dc) {
-        ConcurrentSkipListSet<Event> events = m_dependencyEvents.get(dc);
-        return events.size() > 0 ? events.last() : null;
-    }
-    
-    @Override
-    public Set<Event> getDependencyEvents(DependencyContext dc) {
-        return m_dependencyEvents.get(dc);
-    }
-
-    public Component setAutoConfig(Class<?> clazz, boolean autoConfig) {
-        m_autoConfig.put(clazz, Boolean.valueOf(autoConfig));
-        return this;
-    }
-    
-    public Component setAutoConfig(Class<?> clazz, String instanceName) {
-        m_autoConfig.put(clazz, Boolean.valueOf(instanceName != null));
-        m_autoConfigInstance.put(clazz, instanceName);
-        return this;
-    }
-    
-    public boolean getAutoConfig(Class<?> clazz) {
-        Boolean result = (Boolean) m_autoConfig.get(clazz);
-        return (result != null && result.booleanValue());
-    }
-    
-    public String getAutoConfigInstance(Class<?> clazz) {
-        return (String) m_autoConfigInstance.get(clazz);
-    }
-
 	private void handleChange() {
 		if (debug) {
 			System.out.println("*" + debugKey + " T" + Thread.currentThread().getId() + " handleChange");
@@ -830,7 +796,7 @@ public class ComponentImpl implements Co
 		for (DependencyContext d : m_dependencies) {
 			if (d.isRequired() && !d.isInstanceBound()) {
 			    for (Event e : m_dependencyEvents.get(d)) {
-			        d.invokeAdd(e);
+			        d.invokeCallback(EventType.ADDED, e);
 			    }
 			}
 		}
@@ -856,7 +822,7 @@ public class ComponentImpl implements Co
 		for (DependencyContext d : m_dependencies) {
 			if (d.isRequired() && d.isInstanceBound()) {
 	             for (Event e : m_dependencyEvents.get(d)) {
-	                 d.invokeAdd(e);
+	                 d.invokeCallback(EventType.ADDED, e);
 	             }
 			}
 		}
@@ -866,7 +832,7 @@ public class ComponentImpl implements Co
         for (DependencyContext d : m_dependencies) {
             if (! d.isRequired()) {
                 for (Event e : m_dependencyEvents.get(d)) {
-                    d.invokeAdd(e);
+                    d.invokeCallback(EventType.ADDED, e);
                 }
             }
         }
@@ -876,7 +842,7 @@ public class ComponentImpl implements Co
 		for (DependencyContext d : m_dependencies) {
 			if (!d.isInstanceBound() && d.isRequired()) {
                 for (Event e : m_dependencyEvents.get(d)) {
-                    d.invokeRemove(e);
+                    d.invokeCallback(EventType.REMOVED, e);
                 }
 			}
 		}
@@ -886,7 +852,7 @@ public class ComponentImpl implements Co
         for (DependencyContext d : m_dependencies) {
             if (! d.isRequired()) {
                 for (Event e : m_dependencyEvents.get(d)) {
-                    d.invokeRemove(e);
+                    d.invokeCallback(EventType.REMOVED, e);
                 }
             }
         }
@@ -896,7 +862,7 @@ public class ComponentImpl implements Co
 		for (DependencyContext d : m_dependencies) {
 			if (d.isInstanceBound()) {
                 for (Event e : m_dependencyEvents.get(d)) {
-                    d.invokeRemove(e);
+                    d.invokeCallback(EventType.REMOVED, e);
                 }
 			}
 		}

Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ConfigurationDependencyImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ConfigurationDependencyImpl.java?rev=1640812&r1=1640811&r2=1640812&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ConfigurationDependencyImpl.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ConfigurationDependencyImpl.java Thu Nov 20 21:05:46 2014
@@ -19,16 +19,16 @@
 package org.apache.felix.dm.impl;
 
 import java.lang.reflect.InvocationTargetException;
-import java.net.URL;
 import java.util.Dictionary;
 import java.util.Properties;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.felix.dm.ConfigurationDependency;
 import org.apache.felix.dm.PropertyMetaData;
-import org.apache.felix.dm.context.DependencyContext;
 import org.apache.felix.dm.context.AbstractDependency;
+import org.apache.felix.dm.context.DependencyContext;
 import org.apache.felix.dm.context.Event;
+import org.apache.felix.dm.context.EventType;
 import org.apache.felix.dm.impl.metatype.MetaTypeProviderImpl;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
@@ -211,48 +211,47 @@ public class ConfigurationDependencyImpl
 
         if ((oldSettings == null) && (settings != null)) {
             // Notify the component that our dependency is available.
-            m_component.handleAdded(this, new ConfigurationEventImpl(m_pid, settings));
+            m_component.handleEvent(this, EventType.ADDED, new ConfigurationEventImpl(m_pid, settings));
         }
         else if ((oldSettings != null) && (settings != null)) {
             // Notify the component that our dependency has changed.
-            m_component.handleChanged(this, new ConfigurationEventImpl(m_pid, settings));
+            m_component.handleEvent(this, EventType.CHANGED, new ConfigurationEventImpl(m_pid, settings));
         }
         else if ((oldSettings != null) && (settings == null)) {
             // Notify the component that our dependency has been removed.
             // Notice that the component will be stopped, and then all required dependencies will be unbound
             // (including our configuration dependency).
-            m_component.handleRemoved(this, new ConfigurationEventImpl(m_pid, oldSettings));
+            m_component.handleEvent(this, EventType.REMOVED, new ConfigurationEventImpl(m_pid, oldSettings));
         }
     }
 
-    @SuppressWarnings("rawtypes")
     @Override
-    public void invokeAdd(Event event) {
-		try {
-			invokeUpdated(m_settings);
-		} catch (ConfigurationException e) {
-            logConfigurationException(e);
-		}
-    }
-
-    @SuppressWarnings("rawtypes")
-    @Override
-    public void invokeChange(Event event) {
-        // We already did that synchronously, from our updated method
-    }
-
-    @SuppressWarnings("rawtypes")
-    @Override
-    public void invokeRemove(Event event) {
-        // The state machine is stopping us. We have to invoke updated(null).
-        try {
-        	m_updateInvokedCache.set(false);
-            invokeUpdated(null);
-        } catch (ConfigurationException e) {
-            logConfigurationException(e);
-        } finally {
-        	// Reset for the next time the state machine calls invokeAdd
-        	m_updateInvokedCache.set(false);
+    public void invokeCallback(EventType type, Event ... event) {
+        switch (type) {
+        case ADDED:
+            try {
+                invokeUpdated(m_settings);
+            } catch (ConfigurationException e) {
+                logConfigurationException(e);
+            }
+            break;
+        case CHANGED:
+            // We already did that synchronously, from our updated method
+            break;
+        case REMOVED:
+            // The state machine is stopping us. We have to invoke updated(null).
+            try {
+                m_updateInvokedCache.set(false);
+                invokeUpdated(null);
+            } catch (ConfigurationException e) {
+                logConfigurationException(e);
+            } finally {
+                // Reset for the next time the state machine calls invokeAdd
+                m_updateInvokedCache.set(false);
+            }
+            break;
+        default:
+            break;
         }
     }
     

Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/FilterComponent.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/FilterComponent.java?rev=1640812&r1=1640811&r2=1640812&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/FilterComponent.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/FilterComponent.java Thu Nov 20 21:05:46 2014
@@ -34,6 +34,7 @@ import org.apache.felix.dm.DependencyMan
 import org.apache.felix.dm.context.ComponentContext;
 import org.apache.felix.dm.context.DependencyContext;
 import org.apache.felix.dm.context.Event;
+import org.apache.felix.dm.context.EventType;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
@@ -290,22 +291,8 @@ public class FilterComponent implements 
     }
 
     @Override
-    public void handleAdded(DependencyContext dc, Event e) {
-        m_component.handleAdded(dc, e);
-    }
-
-    @Override
-    public void handleChanged(DependencyContext dc, Event e) {
-        m_component.handleChanged(dc, e);
-    }
-
-    @Override
-    public void handleRemoved(DependencyContext dc, Event e) {
-        m_component.handleRemoved(dc, e);
-    }
-
-    public void handleSwapped(DependencyContext dc, Event event, Event newEvent) {
-        m_component.handleSwapped(dc, event, newEvent);
+    public void handleEvent(DependencyContext dc, EventType type, Event ... e) {
+        m_component.handleEvent(dc, type, e);
     }
     
     @Override

Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ResourceDependencyImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ResourceDependencyImpl.java?rev=1640812&r1=1640811&r2=1640812&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ResourceDependencyImpl.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ResourceDependencyImpl.java Thu Nov 20 21:05:46 2014
@@ -31,6 +31,7 @@ import org.apache.felix.dm.ResourceHandl
 import org.apache.felix.dm.context.AbstractDependency;
 import org.apache.felix.dm.context.DependencyContext;
 import org.apache.felix.dm.context.Event;
+import org.apache.felix.dm.context.EventType;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.log.LogService;
 
@@ -81,65 +82,63 @@ public class ResourceDependencyImpl exte
 
     public void added(URL resource) {
         if (m_trackedResource == null || m_trackedResource.equals(resource)) {
-            getComponentContext().handleAdded(this, new ResourceEventImpl(resource, null));
+            getComponentContext().handleEvent(this, EventType.ADDED, new ResourceEventImpl(resource, null));
         }
     }
     
     public void added(URL resource, Dictionary<String, ?> resourceProperties) {
         if (m_trackedResource == null || m_trackedResource.equals(resource)) {
-            getComponentContext().handleAdded(this, new ResourceEventImpl(resource, resourceProperties));
+            getComponentContext().handleEvent(this, EventType.ADDED, new ResourceEventImpl(resource, resourceProperties));
         }
     }
         
     public void changed(URL resource) {
         if (m_trackedResource == null || m_trackedResource.equals(resource)) {
-            m_component.handleChanged(this, new ResourceEventImpl(resource, null));
+            m_component.handleEvent(this, EventType.CHANGED, new ResourceEventImpl(resource, null));
         }
     }
     
     public void changed(URL resource, Dictionary<String, ?> resourceProperties) {
         if (m_trackedResource == null || m_trackedResource.equals(resource)) {
-            m_component.handleChanged(this, new ResourceEventImpl(resource, resourceProperties));
+            m_component.handleEvent(this, EventType.CHANGED, new ResourceEventImpl(resource, resourceProperties));
         }
     }
 
     public void removed(URL resource) {
         if (m_trackedResource == null || m_trackedResource.equals(resource)) {
-            m_component.handleRemoved(this, new ResourceEventImpl(resource, null));
+            m_component.handleEvent(this, EventType.REMOVED, new ResourceEventImpl(resource, null));
         }
     }
     
     public void removed(URL resource, Dictionary<String, ?> resourceProperties) {
         if (m_trackedResource == null || m_trackedResource.equals(resource)) {
-            m_component.handleRemoved(this, new ResourceEventImpl(resource, resourceProperties));
+            m_component.handleEvent(this, EventType.REMOVED, new ResourceEventImpl(resource, resourceProperties));
         }
     }
     
-    @SuppressWarnings("rawtypes")
     @Override
-    public void invokeAdd(Event e) {
-        if (m_add != null) {
-            invoke(m_add, e);
-        }
-    }
-
-    @SuppressWarnings("rawtypes")
-    @Override
-    public void invokeChange(Event e) {
-        if (m_change != null) {
-            invoke (m_change, e);
-        }
-    }
-
-    @SuppressWarnings("rawtypes")
-    @Override
-    public void invokeRemove(Event e) {
-        if (m_remove != null) {
-            invoke (m_remove, e);
+    public void invokeCallback(EventType type, Event ... e) {
+        switch (type) {
+        case ADDED:
+            if (m_add != null) {
+                invoke(m_add, e[0]);
+            }
+            break;
+        case CHANGED:
+            if (m_change != null) {
+                invoke (m_change, e[0]);
+            }
+            break;
+        case REMOVED:
+            if (m_remove != null) {
+                invoke (m_remove, e[0]);
+            }
+            break;
+        default:
+            break;
         }
     }
     
-    @SuppressWarnings("rawtypes")
     private void invoke(String method, Event e) {
         ResourceEventImpl re = (ResourceEventImpl) e;
         URL serviceInstance = re.getResource();

Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceDependencyImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceDependencyImpl.java?rev=1640812&r1=1640811&r2=1640812&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceDependencyImpl.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceDependencyImpl.java Thu Nov 20 21:05:46 2014
@@ -35,6 +35,7 @@ import org.apache.felix.dm.context.Abstr
 import org.apache.felix.dm.context.ComponentContext;
 import org.apache.felix.dm.context.DependencyContext;
 import org.apache.felix.dm.context.Event;
+import org.apache.felix.dm.context.EventType;
 import org.apache.felix.dm.tracker.ServiceTracker;
 import org.apache.felix.dm.tracker.ServiceTrackerCustomizer;
 import org.osgi.framework.BundleContext;
@@ -251,48 +252,48 @@ public class ServiceDependencyImpl exten
 		if (debug) {
 			System.out.println(debugKey + " addedService: ref=" + reference + ", service=" + service);
 		}
-		m_component.handleAdded(this, new ServiceEventImpl(m_component.getBundle(), m_component.getBundleContext(), 
-		    reference, service));
+        m_component.handleEvent(this, EventType.ADDED,
+            new ServiceEventImpl(m_component.getBundle(), m_component.getBundleContext(), reference, service));
 	}
 
 	@Override
 	public void modifiedService(ServiceReference reference, Object service) {
-	    m_component.handleChanged(this, new ServiceEventImpl(m_component.getBundle(), m_component.getBundleContext(), 
-	        reference, service));
+        m_component.handleEvent(this, EventType.CHANGED,
+            new ServiceEventImpl(m_component.getBundle(), m_component.getBundleContext(), reference, service));
 	}
 
 	@Override
 	public void removedService(ServiceReference reference, Object service) {
-	    m_component.handleRemoved(this, new ServiceEventImpl(m_component.getBundle(), m_component.getBundleContext(), reference, service));
+        m_component.handleEvent(this, EventType.REMOVED,
+            new ServiceEventImpl(m_component.getBundle(), m_component.getBundleContext(), reference, service));
 	}
 	
     @Override
-    public void invokeAdd(Event e) {
-        if (m_add != null) {
-            invoke (m_add, e, getInstances());
-        }
-    }
-	
-	@Override
-	public void invokeChange(Event e) {
-	    if (m_change != null) {
-	        invoke (m_change, e, getInstances());
-	    }
-	}
-
-	@Override
-	public void invokeRemove(Event e) {
-	    if (m_remove != null) {
-	        invoke (m_remove, e, getInstances());
-	    }
-	}
-	
-    @Override   
-    public void invokeSwap(Event event, Event newEvent) {
-        if (m_swap != null) {
-            ServiceEventImpl oldE = (ServiceEventImpl) event;
-            ServiceEventImpl newE = (ServiceEventImpl) newEvent;
-            invokeSwap(m_swap, oldE.getReference(), oldE.getEvent(), newE.getReference(), newE.getEvent(), getInstances());
+    public void invokeCallback(EventType type, Event ... events) {
+        switch (type) {
+        case ADDED:
+            if (m_add != null) {
+                invoke (m_add, events[0], getInstances());
+            }
+            break;
+        case CHANGED:
+            if (m_change != null) {
+                invoke (m_change, events[0], getInstances());
+            }
+            break;
+        case REMOVED:
+            if (m_remove != null) {
+                invoke (m_remove, events[0], getInstances());
+            }
+            break;
+        case SWAPPED:
+            if (m_swap != null) {
+                ServiceEventImpl oldE = (ServiceEventImpl) events[0];
+                ServiceEventImpl newE = (ServiceEventImpl) events[1];
+                invokeSwap(m_swap, oldE.getReference(), oldE.getEvent(), newE.getReference(), newE.getEvent(),
+                    getInstances());
+            }
+            break;
         }
     }
 
@@ -548,8 +549,9 @@ public class ServiceDependencyImpl exten
 			// getting out of order.		    		    
 		    // We delegate the swap handling to the ComponentImpl, which is the class responsible for state management.
 		    // The ComponentImpl will first check if the component is in the proper state so the swap method can be invoked.		    
-		    m_component.handleSwapped(this, new ServiceEventImpl(m_component.getBundle(), m_component.getBundleContext(), reference, service), 
-		        new ServiceEventImpl(m_component.getBundle(), m_component.getBundleContext(), newReference, newService));
+            m_component.handleEvent(this, EventType.SWAPPED,
+                new ServiceEventImpl(m_component.getBundle(), m_component.getBundleContext(), reference, service),
+                new ServiceEventImpl(m_component.getBundle(), m_component.getBundleContext(), newReference, newService));
 		} else {
 			addedService(newReference, newService);
 			removedService(reference, service);

Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/TemporalServiceDependencyImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/TemporalServiceDependencyImpl.java?rev=1640812&r1=1640811&r2=1640812&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/TemporalServiceDependencyImpl.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/TemporalServiceDependencyImpl.java Thu Nov 20 21:05:46 2014
@@ -25,6 +25,7 @@ import java.lang.reflect.Proxy;
 
 import org.apache.felix.dm.DependencyActivatorBase;
 import org.apache.felix.dm.ServiceDependency;
+import org.apache.felix.dm.context.EventType;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
@@ -94,7 +95,8 @@ public class TemporalServiceDependencyIm
             }
         }
         if (makeAvailable) {
-            getComponentContext().handleAdded(this, new ServiceEventImpl(m_component.getBundle(), m_component.getBundleContext(), ref, m_serviceInstance));
+            getComponentContext().handleEvent(this, EventType.ADDED,
+                new ServiceEventImpl(m_component.getBundle(), m_component.getBundleContext(), ref, m_serviceInstance));
         } else {
             // This added will possibly unblock our invoke() method (if it's blocked in m_tracker.waitForService method).
         }
@@ -130,8 +132,8 @@ public class TemporalServiceDependencyIm
             }
             if (makeUnavailable) {
                 // the event.close method will unget the service.
-                m_component.handleRemoved(this, 
-                    new ServiceEventImpl(m_component.getBundle(), m_component.getBundleContext(), ref, m_serviceInstance)); 
+                m_component.handleEvent(this, EventType.REMOVED, new ServiceEventImpl(m_component.getBundle(),
+                    m_component.getBundleContext(), ref, m_serviceInstance));
             }
         } else {
             // Unget what we got in addingService (see ServiceTracker 701.4.1)

Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/test/test/SimpleServiceDependency.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/test/test/SimpleServiceDependency.java?rev=1640812&r1=1640811&r2=1640812&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/test/test/SimpleServiceDependency.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/test/test/SimpleServiceDependency.java Thu Nov 20 21:05:46 2014
@@ -4,6 +4,7 @@ import org.apache.felix.dm.Dependency;
 import org.apache.felix.dm.context.AbstractDependency;
 import org.apache.felix.dm.context.DependencyContext;
 import org.apache.felix.dm.context.Event;
+import org.apache.felix.dm.context.EventType;
 
 public class SimpleServiceDependency extends AbstractDependency<Dependency> {
     @Override
@@ -22,23 +23,25 @@ public class SimpleServiceDependency ext
     }
     
     @Override
-    public void invokeAdd(Event e) {
-        if (m_add != null) {
-            invoke (m_add, e, getInstances());
-        }
-    }
-    
-    @Override
-    public void invokeChange(Event e) {
-        if (m_change != null) {
-            invoke (m_change, e, getInstances());
-        }
-    }
-
-    @Override
-    public void invokeRemove(Event e) {
-        if (m_remove != null) {
-            invoke (m_remove, e, getInstances());
+    public void invokeCallback(EventType type, Event ... e) {
+        switch (type) {
+        case ADDED:
+            if (m_add != null) {
+                invoke (m_add, e[0], getInstances());
+            }
+            break;
+        case CHANGED:
+            if (m_change != null) {
+                invoke (m_change, e[0], getInstances());
+            }
+            break;
+        case REMOVED:
+            if (m_remove != null) {
+                invoke (m_remove, e[0], getInstances());
+            }
+            break;
+        default:
+            break;
         }
     }
 
@@ -48,19 +51,19 @@ public class SimpleServiceDependency ext
     }
 
     public void add(final Event e) {
-        m_component.handleAdded(this, e);
+        m_component.handleEvent(this, EventType.ADDED, e);
     }
     
     public void change(final Event e) {
-        m_component.handleChanged(this, e);
+        m_component.handleEvent(this, EventType.CHANGED, e);
     }
 
     public void remove(final Event e) {
-        m_component.handleRemoved(this, e);
+        m_component.handleEvent(this, EventType.REMOVED, e);
     }
     
     public void swap(final Event event, final Event newEvent) {
-        m_component.handleSwapped(this, event, newEvent);
+        m_component.handleEvent(this, EventType.SWAPPED, event, newEvent);
     }
 
     @Override