Author: furfari
Date: Thu Aug 14 10:57:52 2008
New Revision: 685978

URL: http://svn.apache.org/viewvc?rev=685978&view=rev
Log:
Factorized different methods of MyCtrlPoint.java
Improved searchForListenrs()
cleaned some parts of code

Modified:
    
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/MyCtrlPoint.java

Modified: 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/MyCtrlPoint.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/MyCtrlPoint.java?rev=685978&r1=685977&r2=685978&view=diff
==============================================================================
--- 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/MyCtrlPoint.java
 (original)
+++ 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/MyCtrlPoint.java
 Thu Aug 14 10:57:52 2008
@@ -23,7 +23,6 @@
 import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.Hashtable;
-import java.util.Iterator;
 import java.util.Vector;
 
 import org.osgi.framework.BundleContext;
@@ -37,16 +36,12 @@
 import org.osgi.service.upnp.UPnPDevice;
 import org.osgi.service.upnp.UPnPEventListener;
 import org.osgi.service.upnp.UPnPService;
-import org.osgi.service.upnp.UPnPStateVariable;
 
 import org.cybergarage.http.HTTPRequest;
 import org.cybergarage.upnp.ControlPoint;
 import org.cybergarage.upnp.Device;
 import org.cybergarage.upnp.DeviceList;
 import org.cybergarage.upnp.Service;
-import org.cybergarage.upnp.ServiceList;
-import org.cybergarage.upnp.ServiceStateTable;
-import org.cybergarage.upnp.StateVariable;
 import org.cybergarage.upnp.device.DeviceChangeListener;
 import org.cybergarage.upnp.event.NotifyRequest;
 import org.cybergarage.upnp.event.Property;
@@ -93,19 +88,9 @@
                super();
                this.context = context;
                
-               Vector test = new Vector();
-               String[] test2 = (String[]) test.toArray(new String[]{});
-               if (test == null)
-                       System.out.println((" test2 is null"));
-               else
-                       System.out.println("test2 size is " + test2.length);
-               
-               
-               
-               
         devices = new Hashtable();
         addDeviceChangeListener(this);
-//        waitingEvents = new Hashtable();
+//      waitingEvents = new Hashtable();
 //      sidServices = new Hashtable();
                try {
                        context.addServiceListener(this, 
UPNP_EVENT_LISTENER_FLTR);
@@ -116,169 +101,130 @@
                this.notifierQueue = notifierQueue;
        }
 
-       synchronized public void httpRequestRecieved(HTTPRequest httpReq) {
-        Activator.logger.DEBUG("[Importer] httpRequestRecieved event");
-        Activator.logger.PACKET(httpReq.toString());
-
-        if (httpReq.isNotifyRequest() == true) {
-            Activator.logger.DEBUG("[Importer] Notify Request");
-                       NotifyRequest notifyReq = new NotifyRequest(httpReq);
-            newEventArrived(notifyReq);
-                       httpReq.returnOK();
-                       return;
-               }
 
-        Activator.logger.DEBUG("BAD Request");
-               httpReq.returnBadRequest();
-
-       }
-
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see org.cybergarage.upnp.ControlPoint#removeExpiredDevices()
-        *  
-        */
-       public void removeExpiredDevices() {
-               DeviceList devList = getDeviceList();
-               int devCnt = devList.size();
-               for (int n = 0; n < devCnt; n++) {
-                       Device dev = devList.getDevice(n);
-                       if (dev.isExpired() == true) {
-                Activator.logger.DEBUG("[Importer] Expired device:"+ 
dev.getFriendlyName());
-                               removeDevice(dev);
-                               removeOSGiExpireDevice(dev);
-                       }
-               }
+    /***************************************
+    *
+    *  Device Discovery
+    *
+    ****************************************/
+       
+       public void deviceAdded(Device cyberDevice) {
+               String udn = cyberDevice.getUDN();
+               String friendlyName = cyberDevice.getFriendlyName();
+               
+               if (isExportedDevice(udn)) {
+            Activator.logger.INFO("[Importer] discoverded Exported Device 
:"+friendlyName+"("+udn+")" );
+               }
+               else {// a real device to import
+            Activator.logger.INFO("[Importer] registering 
UPnPDevice:"+friendlyName+"("+udn+")" );
+            registerUPnPDevice(cyberDevice);
+        }              
        }
        
-       public void deviceAdded(Device dev) {
-               String udn = dev.getUDN();
-               ServiceReference[] refs = null;
-               String filter = "(&" + UPNP_DEVICE_FLTR + EXPORT_FLTR+ ")";
+       private boolean isExportedDevice(String udn) {
                try {
-                       refs = 
context.getServiceReferences(UPnPDevice.class.getName(), filter);
-               } catch (InvalidSyntaxException e) {
-                       e.printStackTrace();
-               }
-               if (refs != null) {
-                       for (int i = 0; i < refs.length; i++) {
-                               UPnPDevice osgidev = (UPnPDevice) 
context.getService(refs[i]);
-                               Dictionary dic = osgidev.getDescriptions(null);
-                               if (((String) 
dic.get(UPnPDevice.UDN)).equals(udn)) {
-                                       return;
+                       String filter = "(&" + UPNP_DEVICE_FLTR + EXPORT_FLTR+ 
")";
+                       ServiceReference[] refs = 
context.getServiceReferences(UPnPDevice.class.getName(),      filter);
+                       if (refs != null) {
+                               for (int i = 0; i < refs.length; i++) {
+                                       UPnPDevice osgidev = (UPnPDevice) 
context.getService(refs[i]);
+                                       Dictionary dic = 
osgidev.getDescriptions(null);
+                                       if (((String) 
dic.get(UPnPDevice.UDN)).equals(udn)) {
+                                               return true;
+                                       }
                                }
                        }
+               } catch (InvalidSyntaxException e) {
+                       e.printStackTrace();
                }
-               if(devices.containsKey(udn) == false) {
-            Activator.logger.INFO("[Importer] registering 
UPnPDevice:"+dev.getFriendlyName()+"("+dev.getUDN()+")" );
-            registerUPnPDevice(dev, null, null);
-            //new SearchForListenerThread(dev).start();
-            searchForListener(dev);
-            
-            for (Iterator i = dev.getDeviceList().iterator(); i.hasNext();) {
-                               Device d = (Device) i.next();
-                               if (isDeviceRegistered(udn) == false)
-                                       doEmbeddedRegistration(d); 
-                       }
-        }else if(devices.containsKey(udn) == true) {
-               Activator.logger.INFO("[Importer] UPnPDevice 
UDN::"+dev.getFriendlyName()+"("+dev.getUDN()+") already registered Skipping");
-        }              
+               return false;
        }
+               
+    public synchronized void registerUPnPDevice(Device cyberDevice){
+       
+               UPnPDeviceImpl osgiDevice = new UPnPDeviceImpl(cyberDevice, 
context);
+               ServiceRegistration registration = 
+            context.registerService(UPnPDevice.class.getName(), 
+                                    osgiDevice, 
+                                    osgiDevice.getDescriptions(null));
+               OSGiDeviceInfo deviceInfo = new 
OSGiDeviceInfo(osgiDevice,registration);
+        
+        String udn = cyberDevice.getUDN();
+        
+        synchronized (devices) {
+               devices.put(udn, deviceInfo);           
+               }
+        
+        /*
+                * Check if any UPnPEvent Listener is already registered for 
such a device
+                */       
+        searchForListener(osgiDevice);
 
-       public void deviceRemoved(Device cyberdevice) {
-               String udn = cyberdevice.getUDN();
-               synchronized (devices) {
-                       
-               if (devices.containsKey(udn)) {
-
-                Activator.logger.DEBUG("[Importer] parseUSN.isDevice 
...unregistering all the children devices ");
-                
-                               //unregistering all the children devices 
-                               UPnPDeviceImpl dev = ((OSGiDeviceInfo) 
devices.get(udn)).getOSGiDevice();
-                               removeOSGiandUPnPDeviceHierarchy(dev);
-
-                       }               
+        
+        /*
+                * registering the embedded devices if any 
+                */       
+               DeviceList devList = cyberDevice.getDeviceList();
+               int size = devList.size();
+               for (int n=0; n<size; n++) {
+                       Device embeddedDevice= devList.getDevice(n);
+                       registerUPnPDevice(embeddedDevice);
                }
-       }
+    }
 
     
-       public synchronized void removeOSGiandUPnPDeviceHierarchy(final 
UPnPDeviceImpl dev) 
-    {
-               /*
-                * remove all the UPnPDevice from the struct of local device 
recursively
-                */
-               final String udn = (String) 
dev.getDescriptions(null).get(UPnPDevice.UDN);
-               
-               if(devices.containsKey(udn) == false){
-                       Activator.logger.INFO("Device 
"+dev.getDescriptions(null).get(UPnPDevice.FRIENDLY_NAME)+"("+udn+") already 
removed");
-                       return;
-               }               
+       public void deviceRemoved(Device cyberDevice) {
+               String udn = cyberDevice.getUDN();
+               String friendlyName = cyberDevice.getFriendlyName();
                
-               String[] childrenUDN = (String[]) dev.getDescriptions(null).get(
-                               UPnPDevice.CHILDREN_UDN);
+               Activator.logger.DEBUG("[Importer] unregistering UPnPDevice: " 
+ friendlyName + " (" +udn+ ")");
+               removeOSGiDevices(udn);
+       }
 
-               if (childrenUDN == null) {
-                       //no children                   
-                       unregisterUPnPDevice(((OSGiDeviceInfo) 
devices.get(udn)).getRegistration());
-                       Activator.logger.INFO("Device 
"+dev.getDescriptions(null).get(UPnPDevice.FRIENDLY_NAME)+"("+udn+") deleted");
-                       devices.remove(udn);
-                       return;
-               } else {
-                       for (int i = 0; i < childrenUDN.length; i++) {
-                               if (devices.get(childrenUDN[i]) != null) {
-                                       
removeOSGiandUPnPDeviceHierarchy(((OSGiDeviceInfo) 
devices.get(childrenUDN[i])).getOSGiDevice());
+       private void removeOSGiDevices(String  udn) {
+               synchronized (devices) {
+                       try{
+                               OSGiDeviceInfo info = (OSGiDeviceInfo) 
devices.remove(udn);
+                               if (info != null){
+                                       info.getRegistration().unregister();
+
+                                       UPnPDeviceImpl osgiDevice = 
info.getOSGiDevice();
+                                       String[] childrenUDN = (String[]) 
osgiDevice.getDescriptions(null).get(UPnPDevice.CHILDREN_UDN);
+                                       if (childrenUDN != null){
+                                               for (int i = 0; i < 
childrenUDN.length; i++) {
+                                                       
removeOSGiDevices(childrenUDN[i]);
+                                               }
+                                       }
                                }
+                       }catch (Exception ex){
+                               System.out.println(ex);
                        }
-                       unregisterUPnPDevice(((OSGiDeviceInfo) 
devices.get(udn)).getRegistration());
-                       Activator.logger.INFO("Device 
"+dev.getDescriptions(null).get(UPnPDevice.FRIENDLY_NAME)+"("+udn+") deleted");
-                       devices.remove(udn);
                }
-       }
-
-       public synchronized void removeOSGiExpireDevice(Device dev) {
-               /*
-                * unregistering root device with all its children device from 
OSGi 
-                * deleting root device and all its children from struct that 
conatin 
-                * a list of local device
-                */
-               removeOSGiandUPnPDeviceHierarchy(((OSGiDeviceInfo) 
devices.get(dev
-                               .getUDN())).getOSGiDevice());
-       }
-
-       public void registerUPnPDevice(Device dev, UPnPDeviceImpl upnpDev,
-                       Dictionary prop) {
-               /*
-                * registering the new Device as OSGi UPnPDevice and then add 
-                * ServiceRegistration and UPnPDevice reference to the hashtable
-                * that contains local devices
-                */
-               if (prop == null && upnpDev == null) {
-                       UPnPDeviceImpl newDevice = new UPnPDeviceImpl(dev, 
context);
-                       ServiceRegistration registration = 
-                context.registerService(UPnPDevice.class.getName(), 
-                                        newDevice, 
-                                        newDevice.getDescriptions(null));
-                       OSGiDeviceInfo deviceInfo = 
-                new OSGiDeviceInfo(newDevice,registration);
-            
-            String udn = (String) 
((newDevice.getDescriptions(null)).get(UPnPDevice.UDN));
-                       devices.put(udn, deviceInfo);
-               } else {
-                       ServiceRegistration registration = 
-                context.registerService(UPnPDevice.class.getName(), upnpDev, 
prop);
-                       OSGiDeviceInfo deviceInfo = 
-                new OSGiDeviceInfo(upnpDev,    registration);
-                       
devices.put(upnpDev.getDescriptions(null).get(UPnPDevice.UDN),deviceInfo);
+       } 
+       
+       public void removeExpiredDevices() {
+               DeviceList devList = getDeviceList();
+               int devCnt = devList.size();
+               for (int n = 0; n < devCnt; n++) {
+                       Device dev = devList.getDevice(n);
+                       if (dev.isExpired() == true) {
+                               removeDevice(dev);
+                               String udn = dev.getUDN();
+                Activator.logger.DEBUG("[Importer] Expired device: "+ 
dev.getFriendlyName() + "(" + udn +")");
+                               removeOSGiDevices(udn);
+                       }
                }
        }
-    
-    
-       public void unregisterUPnPDevice(ServiceRegistration registration) {
-               registration.unregister();
 
-       }
+       
+       
+       
+       
+    /***************************************
+    *
+    *  UPnP Event Listeners and Subscription 
+    *
+    ****************************************/
 
        /*
         * (non-Javadoc)
@@ -297,18 +243,9 @@
                Filter filter = (Filter) 
upnpEventListenerReference.getProperty(UPnPEventListener.UPNP_FILTER);
                
                if (event.getType() == ServiceEvent.REGISTERED) {
-                       ServiceReference[] devicesRefs = null;
+                       
                        if (filter != null) {
-                               System.out.println("new UPnPEvent Listners 
registered ....");
-
-                               try {
-                                       String filterString = filter.toString();
-                                       String filter4ImportedDevices = "(&" + 
filterString +  IMPORT_FLTR + ")";
-                                       devicesRefs = 
context.getServiceReferences(UPnPDevice.class.getName(),filter4ImportedDevices);
-                               } catch (InvalidSyntaxException e) {
-                                       e.printStackTrace();
-                               }
-
+                               ServiceReference[] devicesRefs = 
getFilteredImportedDevices(filter);
                                if (devicesRefs != null) {
                                        for (int i = 0; i < devicesRefs.length; 
i++) {
                                                UPnPDeviceImpl device = 
(UPnPDeviceImpl) context.getService(devicesRefs[i]);
@@ -329,12 +266,7 @@
                                }
 
                        } else {/* filter == null (interested in all devices) */
-                               try {
-                                       devicesRefs = 
context.getServiceReferences(UPnPDevice.class.getName(), IMPORT_FLTR);
-                               } catch (InvalidSyntaxException e) {
-                                       e.printStackTrace();
-                               }
-
+                               ServiceReference[] devicesRefs = 
getAllImportedDevices();
                                if (devicesRefs != null) {
                                        for (int i = 0; i < devicesRefs.length; 
i++) {
                                                UPnPDeviceImpl device = 
(UPnPDeviceImpl) context.getService(devicesRefs[i]);
@@ -350,19 +282,12 @@
                                        }
                                }
                        }
-               } 
+               } // ServiceEvent.REGISTERED
+               
                else if (event.getType() == ServiceEvent.MODIFIED) {
-                       ServiceReference[] devicesRefs = null;
 
                        if (filter != null) {
-                               try {
-                                       String filtra = filter.toString();
-                    String newfilter = "(&" + filtra + IMPORT_FLTR + ")";
-                                       devicesRefs = 
context.getServiceReferences(UPnPDevice.class.getName(), newfilter);
-                               } catch (InvalidSyntaxException e) {
-                                       e.printStackTrace();
-                               }
-                               
+                               ServiceReference[] devicesRefs = 
getFilteredImportedDevices(filter);                            
                                if (devicesRefs != null) {
                                        for (int i = 0; i < devicesRefs.length; 
i++) {
                                                Vector newServices = new 
Vector();
@@ -383,13 +308,7 @@
                                }
                        } 
                        else { //interrested in all devices
-                               try {
-                                       devicesRefs = 
context.getServiceReferences(UPnPDevice.class
-                                                       .getName(), 
IMPORT_FLTR);
-                               } catch (InvalidSyntaxException e) {
-                                       e.printStackTrace();
-                               }
-                               
+                               ServiceReference[] devicesRefs = 
getAllImportedDevices();                               
                                if (devicesRefs != null) {
                                        for (int i = 0; i < devicesRefs.length; 
i++) {
                                                Vector newServices = new 
Vector();
@@ -402,10 +321,9 @@
                                                ListenerModified msg = new 
ListenerModified(newServices,upnpEventListenerService);
                                                subQueue.enqueue(msg);
                                        }
-                               }
-                       
-                       } //end interrested in all devices              
-               } 
+                               }                       
+                       }       
+               } // ServiceEvent.MODIFIED      
                
                else if (event.getType() == ServiceEvent.UNREGISTERING) {
                        if (upnpEventListenerService != null) {
@@ -420,48 +338,96 @@
        } 
        
        
-       public Service serviceFromSid(String sid) {
-               
-//             synchronized (sidServices) {
-//                     return (Service) sidServices.get(sid);
-//             }
-               
-               
-               synchronized (devices) {
-                       
-               Enumeration e = devices.elements();
-               //System.out.println("#### DEVICES SIZE" +devices.size());
-               Service cyberService = null;
-               while (e.hasMoreElements()) {
-                       OSGiDeviceInfo deviceinfo = (OSGiDeviceInfo) 
e.nextElement();
-                       UPnPDevice device = deviceinfo.getOSGiDevice();
-                       UPnPService[] services = (UPnPService[]) 
device.getServices();
-                       UPnPServiceImpl[] servicesImpl = new 
UPnPServiceImpl[services.length];
-                       for (int i = 0; i < servicesImpl.length; i++) {
-                               servicesImpl[i] = (UPnPServiceImpl) services[i];
-                       }
-                       for (int i = 0; i < servicesImpl.length; i++) {
-                               cyberService = 
servicesImpl[i].getCyberService();
-                               boolean bool = cyberService.isSubscribed();
-                               if (bool) {
-                                       if (cyberService.getSID().equals(sid)) {
-                                               return cyberService;
-                                       }
-                               }
-                       }
-                       //System.out.println("Device NOT MATCHED " 
+device.getDescriptions(null).get(UPnPDevice.ID));
+       private ServiceReference[] getFilteredImportedDevices(Filter filter) {
+               try {
+                       String filterString = filter.toString();
+                       String filter4ImportedDevices = "(&" + IMPORT_FLTR  + 
filterString  + ")";
+                       return 
context.getServiceReferences(UPnPDevice.class.getName(),filter4ImportedDevices);
+               } catch (InvalidSyntaxException e) {
+                       e.printStackTrace();
+                       return null;
                }
+               
+       }
+       private ServiceReference[] getAllImportedDevices() {
+               try {
+                       return 
context.getServiceReferences(UPnPDevice.class.getName(),IMPORT_FLTR);
+               } catch (InvalidSyntaxException e) {
+                       e.printStackTrace();
+                       return null;
                }
                
-               return null;
        }
+       
+    public void searchForListener(UPnPDeviceImpl device) {
+       System.out.println("searching for UPnPEvent Listners already 
registered");
+       
+       Activator.logger.DEBUG("[Importer] searching for UPnPEventListener");
+       ServiceReference[] listeners = null;
+       try {
+               listeners = 
context.getServiceReferences(UPnPEventListener.class.getName(), null);
+       } catch (InvalidSyntaxException e) {
+               e.printStackTrace();
+       }
+       if (listeners != null) {
 
+               for (int i = 0; i < listeners.length; i++) {
+                       UPnPEventListener listener = (UPnPEventListener) 
context.getService(listeners[i]);
+                       Filter filter = (Filter) 
listeners[i].getProperty(UPnPEventListener.UPNP_FILTER);
+                       if (filter == null) {
+                               UPnPServiceImpl[] eventedServices = 
device.getEventedServices();
+                               for (int j = 0; j < eventedServices.length; 
j++) {
+                                       FirstMessage msg = new FirstMessage(
+                                                       
eventedServices[j].getCyberService(),
+                                                       listener);
+                                       subQueue.enqueue(msg);
+                               }
+                       } else {
+                               Dictionary[] filters = 
device.getEventedServicesFilters();
+                               for (int j = 0; j < filters.length; j++) {
+                                       if( filter.match(filters[j])){
+                                               String serviceId = (String) 
filters[j].get(UPnPService.ID);
+                                               UPnPServiceImpl service = 
(UPnPServiceImpl) device.getService(serviceId);                                 
                      
+                                               subQueue.enqueue(new 
FirstMessage(service.getCyberService(), listener));
+                                       }
+                               }
+                       }
+               }
+       }
+    }
+       
+       
+       
+    /***************************************
+    *
+    *  Eventing
+    *
+    ****************************************/
+       
        /*
-        * (non-Javadoc)
         * 
-        * @see 
org.apache.felix.upnpbase.importer.MyEventListener#newEventArrived(java.lang.String,
-        *      long, java.util.Dictionary)
+        *      Override Cyber dispatching of state variables changes because 
we have to cache and deliver them all together
+        * 
+        * @see 
org.osgi.framework.ServiceListener#serviceChanged(org.osgi.framework.ServiceEvent)
         */
+       
+       synchronized public void httpRequestRecieved(HTTPRequest httpReq) {
+        Activator.logger.DEBUG("[Importer] httpRequestRecieved event");
+        Activator.logger.PACKET(httpReq.toString());
+
+        if (httpReq.isNotifyRequest() == true) {
+            Activator.logger.DEBUG("[Importer] Notify Request");
+                       NotifyRequest notifyReq = new NotifyRequest(httpReq);
+            newEventArrived(notifyReq);
+                       httpReq.returnOK();
+                       return;
+               }
+
+        Activator.logger.DEBUG("BAD Request");
+               httpReq.returnBadRequest();
+
+       }
+
 
        public void newEventArrived(NotifyRequest notifyReq) {
         Activator.logger.DEBUG("[Importer] newEventArrived");
@@ -504,110 +470,45 @@
        }
     
 
-    
-    public boolean isDeviceRegistered(String udn){
+       public Service serviceFromSid(String sid) {
                
-               try {
-                       ServiceReference[] refs =
-                               Activator.bc.getServiceReferences(
-                                       UPnPDevice.class.getName(),
-                                       "(" + UPnPDevice.UDN + "=" + udn + ")"
-                               );
-                       if(refs!= null)
-                               return true;
-                       else
-                               return false;
-               } catch (InvalidSyntaxException ignored) {
-                       return false;
-               }
-    }
-    
-    public synchronized void doEmbeddedRegistration(Device device){
-        registerUPnPDevice(device, null, null);
-        //new SearchForListenerThread(device).start();
-        searchForListener(device);
-        
-               DeviceList devList = device.getDeviceList();
-               int size = devList.size();
-               for (int n=0; n<size; n++) {
-                       Device dev = devList.getDevice(n);
-                       doEmbeddedRegistration(dev);
-               }
-    }
-
-    
-    class SearchForListenerThread extends Thread{ 
-       private Device device;
-       public SearchForListenerThread(Device device) {
-                       this.device= device;
-               }
-       public void run(){
-               searchForListener(device);
-       }
-    }
-    
-       public void searchForListener(Device device) {
-               System.out.println("searching for UPnPEvent Listners already 
registered");
-        Activator.logger.DEBUG("[Importer] searching for UPnPEventListener");
-               ServiceReference[] listeners = null;
-               try {
-                       listeners = 
context.getServiceReferences(UPnPEventListener.class.getName(), null);
-               } catch (InvalidSyntaxException e) {
-                       // TODO Auto-generated catch block
-                       e.printStackTrace();
-               }
-               if (listeners != null) {
-                       String deviceID = device.getUDN();
-                       String serviceID;
-                       String deviceType = device.getDeviceType();
-                       String serviceType;
-                       Hashtable hash = new Hashtable();
-                       hash.put(UPnPDevice.ID, deviceID);
-                       hash.put(UPnPDevice.TYPE, deviceType);
-                       ServiceList services = device.getServiceList();
-                       Vector eventedSers = new Vector();
-
-                       for (int i = 0; i < services.size(); i++) {
-                               Service service = (Service) 
services.elementAt(i);
-                               ServiceStateTable vars = 
service.getServiceStateTable();
-                               for (int j = 0; j < vars.size(); j++) {
-                                       StateVariable var = (StateVariable) 
vars.elementAt(j);
-                                       if (var.isSendEvents()) {
-                                               eventedSers.add(service);
-                                               break;
-                                       }
-                               }
+//             synchronized (sidServices) {
+//                     return (Service) sidServices.get(sid);
+//             }
+               
+               
+               synchronized (devices) {
+                       
+               Enumeration e = devices.elements();
+               //System.out.println("#### DEVICES SIZE" +devices.size());
+               Service cyberService = null;
+               while (e.hasMoreElements()) {
+                       OSGiDeviceInfo deviceinfo = (OSGiDeviceInfo) 
e.nextElement();
+                       UPnPDevice device = deviceinfo.getOSGiDevice();
+                       UPnPService[] services = (UPnPService[]) 
device.getServices();
+                       UPnPServiceImpl[] servicesImpl = new 
UPnPServiceImpl[services.length];
+                       for (int i = 0; i < servicesImpl.length; i++) {
+                               servicesImpl[i] = (UPnPServiceImpl) services[i];
                        }
-
-                       for (int i = 0; i < listeners.length; i++) {
-                               UPnPEventListener listener = 
(UPnPEventListener) context
-                                               .getService(listeners[i]);
-                               Filter filter = (Filter) listeners[i]
-                                               
.getProperty(UPnPEventListener.UPNP_FILTER);
-                               if (filter == null) {
-                                       for (int j = 0; j < eventedSers.size(); 
j++) {
-                                               Service ser = (Service) 
eventedSers.elementAt(j);
-                                               subQueue.enqueue(new 
FirstMessage(ser, listener));
-                                       }
-                               } else {
-                                       for (int j = 0; j < eventedSers.size(); 
j++) {
-                                               Service ser = (Service) 
eventedSers.elementAt(j);
-                                               serviceID = ser.getServiceID();
-                                               serviceType = 
ser.getServiceType();
-                                               hash.put(UPnPService.ID, 
serviceID);
-                                               hash.put(UPnPService.TYPE, 
serviceType);
-                                               boolean bool = 
filter.match(hash);
-                                               if (bool) {
-                                                       subQueue.enqueue(new 
FirstMessage(ser, listener));
-                                               }
-
+                       for (int i = 0; i < servicesImpl.length; i++) {
+                               cyberService = 
servicesImpl[i].getCyberService();
+                               boolean bool = cyberService.isSubscribed();
+                               if (bool) {
+                                       if (cyberService.getSID().equals(sid)) {
+                                               return cyberService;
                                        }
                                }
-
                        }
-
+                       //System.out.println("Device NOT MATCHED " 
+device.getDescriptions(null).get(UPnPDevice.ID));
+               }
                }
+               
+               return null;
        }
+         
+    
+
+     
 
 //     public Hashtable getWaitingEvents() {
 //             return waitingEvents;
@@ -647,6 +548,14 @@
 //             service.clearSID();
 //             return false;
        }
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.cybergarage.upnp.ControlPoint#removeExpiredDevices()
+        *  
+        */
+       
+       
 
 
 }


Reply via email to