Implemented ServiceEvent.MODIFIED for tracking UPnPEventListeners in the UPnP examples (Felix-68)
git-svn-id: https://svn.apache.org/repos/asf/incubator/felix/trunk@416694 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/org.apache.felix.upnp.sample.binaryLight/src/main/java/org/apache/felix/upnp/sample/binaryLight/UPnPEventNotifier.java b/org.apache.felix.upnp.sample.binaryLight/src/main/java/org/apache/felix/upnp/sample/binaryLight/UPnPEventNotifier.java
index 65c771e..8039657 100644
--- a/org.apache.felix.upnp.sample.binaryLight/src/main/java/org/apache/felix/upnp/sample/binaryLight/UPnPEventNotifier.java
+++ b/org.apache.felix.upnp.sample.binaryLight/src/main/java/org/apache/felix/upnp/sample/binaryLight/UPnPEventNotifier.java
@@ -47,13 +47,17 @@
Properties UPnPTargetListener;
String serviceId;
Vector upnpListeners = new Vector();
+ private String serviceType;
+ private String deviceType;
public UPnPEventNotifier(BundleContext context,String deviceId,UPnPService service,EventSource source){
this.context=context;
- this.deviceId=deviceId;
this.service=service;
this.source=source;
+ this.deviceId=deviceId;
+ this.deviceType = "urn:schemas-upnp-org:device:BinaryLight:1";
this.serviceId=service.getId();
+ this.serviceType = service.getType();
setupUPnPListenerHouseKeeping(deviceId);
}
@@ -64,6 +68,8 @@
UPnPTargetListener = new Properties();
UPnPTargetListener.put(UPnPDevice.ID,deviceId);
UPnPTargetListener.put(UPnPService.ID,serviceId);
+ UPnPTargetListener.put(UPnPService.TYPE,serviceType);
+ UPnPTargetListener.put(UPnPDevice.TYPE,deviceType);
String ANY_UPnPEventListener = "("+Constants.OBJECTCLASS+"="+UPnPEventListener.class.getName()+")";
ServiceReference[] listeners = null;
@@ -150,6 +156,15 @@
};break;
case ServiceEvent.MODIFIED:{
+ ServiceReference sr = e.getServiceReference();
+ Filter filter = (Filter) sr.getProperty(UPnPEventListener.UPNP_FILTER);
+ removeListener(sr);
+ if (filter == null)
+ addNewListener(sr);
+ else {
+ if (filter.match(UPnPTargetListener))
+ addNewListener(sr);
+ }
};break;
case ServiceEvent.UNREGISTERING:{
diff --git a/org.apache.felix.upnp.sample.clock/src/main/java/org/apache/felix/upnp/sample/clock/UPnPEventNotifier.java b/org.apache.felix.upnp.sample.clock/src/main/java/org/apache/felix/upnp/sample/clock/UPnPEventNotifier.java
index b7c41df..fe6ce2c 100644
--- a/org.apache.felix.upnp.sample.clock/src/main/java/org/apache/felix/upnp/sample/clock/UPnPEventNotifier.java
+++ b/org.apache.felix.upnp.sample.clock/src/main/java/org/apache/felix/upnp/sample/clock/UPnPEventNotifier.java
@@ -156,6 +156,15 @@
};break;
case ServiceEvent.MODIFIED:{
+ ServiceReference sr = e.getServiceReference();
+ Filter filter = (Filter) sr.getProperty(UPnPEventListener.UPNP_FILTER);
+ removeListener(sr);
+ if (filter == null)
+ addNewListener(sr);
+ else {
+ if (filter.match(UPnPTargetListener))
+ addNewListener(sr);
+ }
};break;
case ServiceEvent.UNREGISTERING:{
diff --git a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/UPnPEventNotifier.java b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/UPnPEventNotifier.java
index 58a48a5..398d67b 100644
--- a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/UPnPEventNotifier.java
+++ b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/UPnPEventNotifier.java
@@ -156,6 +156,15 @@
};break;
case ServiceEvent.MODIFIED:{
+ ServiceReference sr = e.getServiceReference();
+ Filter filter = (Filter) sr.getProperty(UPnPEventListener.UPNP_FILTER);
+ removeListener(sr);
+ if (filter == null)
+ addNewListener(sr);
+ else {
+ if (filter.match(UPnPTargetListener))
+ addNewListener(sr);
+ }
};break;
case ServiceEvent.UNREGISTERING:{