Wrap upnp events in an immutable object (FELIX-68)

git-svn-id: https://svn.apache.org/repos/asf/incubator/felix/trunk@406354 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/org.apache.felix.eventadmin.bridge.upnp/src/main/java/org/apache/felix/eventadmin/bridge/upnp/UPnPEventToEventAdminBridge.java b/org.apache.felix.eventadmin.bridge.upnp/src/main/java/org/apache/felix/eventadmin/bridge/upnp/UPnPEventToEventAdminBridge.java
index 5a35eba..3438206 100644
--- a/org.apache.felix.eventadmin.bridge.upnp/src/main/java/org/apache/felix/eventadmin/bridge/upnp/UPnPEventToEventAdminBridge.java
+++ b/org.apache.felix.eventadmin.bridge.upnp/src/main/java/org/apache/felix/eventadmin/bridge/upnp/UPnPEventToEventAdminBridge.java
@@ -17,6 +17,7 @@
 package org.apache.felix.eventadmin.bridge.upnp;
 
 import java.util.Dictionary;
+import java.util.Enumeration;
 import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.Iterator;
@@ -122,13 +123,65 @@
                 
                 if(null != eventAdmin)
                 {
+                    final Dictionary immutableEvents = new Dictionary(){
+
+                        public int size()
+                        {
+                            return events.size();
+                        }
+
+                        public boolean isEmpty()
+                        {
+                            return events.isEmpty();
+                        }
+
+                        public Enumeration keys()
+                        {
+                            return events.keys();
+                        }
+
+                        public Enumeration elements()
+                        {
+                            return events.elements();
+                        }
+
+                        public Object get(Object arg0)
+                        {
+                            return events.get(arg0);
+                        }
+
+                        public Object put(Object arg0, Object arg1)
+                        {
+                            throw new IllegalStateException("Event Properties may not be changed");
+                        }
+
+                        public Object remove(Object arg0)
+                        {
+                            throw new IllegalStateException("Event Properties may not be changed");
+                        }
+                        
+                        public boolean equals(Object arg0)
+                        {
+                            return events.equals(arg0);
+                        }
+                        
+                        public int hashCode()
+                        {
+                            return events.hashCode();
+                        }
+                        
+                        public String toString()
+                        {
+                            return events.toString();
+                        }
+                    };
+                    
                     eventAdmin.postEvent(new Event("org/osgi/service/upnp/UPnPEvent",
                         new Hashtable(){{
                             put("upnp.deviceId", deviceId);
                             put("upnp.serviceId", serviceId);
-                            put("upnp.events", events);
+                            put("upnp.events", immutableEvents);
                         }}));
-// TODO: See 113.3.2 
                     
                     m_context.ungetService(ref);
                 }