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