You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pa...@apache.org on 2006/06/24 17:03:18 UTC

svn commit: r416925 - in /incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/felix/ src/main/java/org/apache/felix/eventadmin/ s...

Author: pauls
Date: Sat Jun 24 08:03:17 2006
New Revision: 416925

URL: http://svn.apache.org/viewvc?rev=416925&view=rev
Log:
Implement mappings from ConfigurationEvents (FELIX-86)

Added:
    incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/   (with props)
    incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/pom.xml   (with props)
    incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/
    incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/
    incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/
    incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/org/
    incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/org/apache/
    incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/org/apache/felix/
    incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/org/apache/felix/eventadmin/
    incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/org/apache/felix/eventadmin/bridge/
    incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/org/apache/felix/eventadmin/bridge/configuration/
    incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/org/apache/felix/eventadmin/bridge/configuration/Activator.java   (with props)
    incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/org/apache/felix/eventadmin/bridge/configuration/ConfigurationEventToEventAdminBridge.java   (with props)

Propchange: incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Sat Jun 24 08:03:17 2006
@@ -0,0 +1,16 @@
+classes
+target
+*.log
+*.ipr
+*.iws
+*.iml
+lib
+bundle
+dist
+.project
+.classpath
+bin
+build
+.settings
+.wtpmodules
+.deployables

Added: incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/pom.xml
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/pom.xml?rev=416925&view=auto
==============================================================================
--- incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/pom.xml (added)
+++ incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/pom.xml Sat Jun 24 08:03:17 2006
@@ -0,0 +1,46 @@
+<project>
+  <parent>
+    <groupId>org.apache.felix</groupId>
+    <artifactId>felix</artifactId>
+    <version>0.8.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <packaging>osgi-bundle</packaging>
+  <name>Apache Felix EventAdmin Bridge Configuration</name>
+  <artifactId>org.apache.felix.eventadmin.bridge.configuration</artifactId>
+  <dependencies>
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>org.osgi.core</artifactId>
+      <version>${pom.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>org.osgi.compendium</artifactId>
+      <version>${pom.version}</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix.plugins</groupId>
+        <artifactId>maven-osgi-plugin</artifactId>
+        <version>${pom.version}</version>
+        <extensions>true</extensions>
+        <configuration>
+          <osgiManifest>
+            <bundleName>EventAdmin Bridge Configuration</bundleName>
+            <bundleVendor>Apache Software Foundation</bundleVendor>
+            <bundleDescription>
+              This bundle provides a bridge between Configuration and EventAdmin events.
+            </bundleDescription>
+            <bundleActivator>auto-detect</bundleActivator>
+            <bundleSymbolicName>${pom.artifactId}</bundleSymbolicName>
+          </osgiManifest>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Propchange: incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/org/apache/felix/eventadmin/bridge/configuration/Activator.java
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/org/apache/felix/eventadmin/bridge/configuration/Activator.java?rev=416925&view=auto
==============================================================================
--- incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/org/apache/felix/eventadmin/bridge/configuration/Activator.java (added)
+++ incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/org/apache/felix/eventadmin/bridge/configuration/Activator.java Sat Jun 24 08:03:17 2006
@@ -0,0 +1,54 @@
+/*
+ *   Copyright 2006 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.felix.eventadmin.bridge.configuration;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The BundleActivator that will register an ConfigurationEventListener service
+ * with the framework on start. Subsequently, ConfigurationEvents will be
+ * bridged to available EventAdmin services (as per spec).
+ * 
+ * @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+ */
+public class Activator implements BundleActivator
+{
+    /**
+     * This registers an ConfigurationEventListener service with the framework
+     * that bridges ConfigurationEvents to the EventAdmin.
+     * 
+     * @param context
+     *            The context to use
+     * 
+     * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+     */
+    public void start(final BundleContext context) throws Exception
+    {
+        new ConfigurationEventToEventAdminBridge(context);
+    }
+
+    /**
+     * Stop the bridging of ConfigurationEvents to the EventAdmin.
+     * 
+     * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+     */
+    public void stop(final BundleContext context) throws Exception
+    {
+        // Services are unregistered by the framework
+    }
+}

Propchange: incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/org/apache/felix/eventadmin/bridge/configuration/Activator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/org/apache/felix/eventadmin/bridge/configuration/ConfigurationEventToEventAdminBridge.java
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/org/apache/felix/eventadmin/bridge/configuration/ConfigurationEventToEventAdminBridge.java?rev=416925&view=auto
==============================================================================
--- incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/org/apache/felix/eventadmin/bridge/configuration/ConfigurationEventToEventAdminBridge.java (added)
+++ incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/org/apache/felix/eventadmin/bridge/configuration/ConfigurationEventToEventAdminBridge.java Sat Jun 24 08:03:17 2006
@@ -0,0 +1,120 @@
+/*
+ *   Copyright 2006 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.felix.eventadmin.bridge.configuration;
+
+import java.util.Arrays;
+import java.util.Hashtable;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.cm.ConfigurationEvent;
+import org.osgi.service.cm.ConfigurationListener;
+import org.osgi.service.event.Event;
+import org.osgi.service.event.EventAdmin;
+import org.osgi.service.event.EventConstants;
+
+/**
+ * @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+ */
+public class ConfigurationEventToEventAdminBridge implements
+    ConfigurationListener
+{
+    private final BundleContext m_context;
+
+    public ConfigurationEventToEventAdminBridge(final BundleContext context)
+    {
+        m_context = context;
+
+        m_context.registerService(ConfigurationListener.class.getName(), this,
+            null);
+    }
+
+    public void configurationEvent(final ConfigurationEvent event)
+    {
+        final ServiceReference ref = m_context
+            .getServiceReference(EventAdmin.class.getName());
+
+        if(null != ref)
+        {
+            final EventAdmin eventAdmin = (EventAdmin) m_context
+                .getService(ref);
+
+            if(null != eventAdmin)
+            {
+                final String topic;
+
+                switch(event.getType())
+                {
+                    case ConfigurationEvent.CM_UPDATED:
+                        topic = "org/osgi/service/cm/ConfigurationEvent/CM_UPDATED";
+                        break;
+                    case ConfigurationEvent.CM_DELETED:
+                        topic = "org/osgi/service/cm/ConfigurationEvent/CM_DELETED";
+                        break;
+                    default:
+                        m_context.ungetService(ref);
+                        return;
+                }
+
+                eventAdmin.postEvent(new Event(topic, new Hashtable()
+                {
+                    {
+                        if(null != event.getFactoryPid())
+                        {
+                            put("cm.factoryPid", event.getFactoryPid());
+                        }
+                        
+                        put("cm.pid", event.getPid());
+                        
+                        final ServiceReference ref = event.getReference();
+
+                        if(null == ref)
+                        {
+                            throw new IllegalArgumentException(
+                                "ConfigurationEvent.getReference() may not be null");
+                        }
+
+                        put(EventConstants.SERVICE, ref);
+
+                        put(EventConstants.SERVICE_ID, ref
+                            .getProperty(EventConstants.SERVICE_ID));
+
+                        final Object objectClass = ref
+                            .getProperty(Constants.OBJECTCLASS);
+
+                        if(!(objectClass instanceof String[])
+                            || !Arrays.asList((String[]) objectClass).contains(
+                                ConfigurationAdmin.class.getName()))
+                        {
+                            throw new IllegalArgumentException(
+                                "Bad objectclass: " + objectClass);
+                        }
+
+                        put(EventConstants.SERVICE_OBJECTCLASS, objectClass);
+
+                        put(EventConstants.SERVICE_PID, ref
+                            .getProperty(EventConstants.SERVICE_PID));
+                    }
+                }));
+
+                m_context.ungetService(ref);
+            }
+        }
+    }
+}

Propchange: incubator/felix/trunk/org.apache.felix.eventadmin.bridge.configuration/src/main/java/org/apache/felix/eventadmin/bridge/configuration/ConfigurationEventToEventAdminBridge.java
------------------------------------------------------------------------------
    svn:eol-style = native