You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2016/12/21 15:52:28 UTC

svn commit: r1775477 - /felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java

Author: cziegeler
Date: Wed Dec 21 15:52:27 2016
New Revision: 1775477

URL: http://svn.apache.org/viewvc?rev=1775477&view=rev
Log:
FELIX-5458 : [R7] Improved ConfigurationPlugin Support

Modified:
    felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java

Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java?rev=1775477&r1=1775476&r2=1775477&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java Wed Dec 21 15:52:27 2016
@@ -40,8 +40,10 @@ import org.osgi.framework.ServiceRegistr
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 import org.osgi.service.cm.ConfigurationEvent;
+import org.osgi.service.cm.ConfigurationException;
 import org.osgi.service.cm.ConfigurationListener;
 import org.osgi.service.cm.ConfigurationPermission;
+import org.osgi.service.cm.ManagedService;
 import org.osgi.service.log.LogService;
 
 public abstract class RegionConfigurationSupport implements ConfigurationListener
@@ -142,9 +144,9 @@ public abstract class RegionConfiguratio
                             if ( checkBundleLocation( config, bundleContext.getBundle() ) )
                             {
                                 long changeCount = config.getChangeCount();
-                                // TODO - service reference
+                                ServiceReference<ManagedService> ref = getManagedServiceReference(bundleContext);
                                 created |= holder.configurationUpdated( new TargetedPID( config.getPid() ),
-                                    new TargetedPID( config.getFactoryPid() ), config.getProcessedProperties(null), changeCount );
+                                    new TargetedPID( config.getFactoryPid() ), config.getProcessedProperties(ref), changeCount );
                             }
                         }
                         if ( !created )
@@ -164,9 +166,9 @@ public abstract class RegionConfiguratio
                             if ( singleton != null && checkBundleLocation( singleton, bundleContext.getBundle() ) )
                             {
                                 long changeCount = singleton.getChangeCount();
-                                // TODO service reference
+                                ServiceReference<ManagedService> ref = getManagedServiceReference(bundleContext);
                                 holder.configurationUpdated( new TargetedPID( singleton.getPid() ), null,
-                                    singleton.getProcessedProperties(null), changeCount );
+                                    singleton.getProcessedProperties(ref), changeCount );
                             }
                             else
                             {
@@ -448,8 +450,8 @@ public abstract class RegionConfiguratio
                 if ( configs != null && configs.length > 0 )
                 {
                     Configuration config = configs[0];
-                    // TODO - service reference
-                    return new ConfigurationInfo( config.getProcessedProperties(null), config.getBundleLocation(),
+                    ServiceReference<ManagedService> ref = getManagedServiceReference(bundleContext);
+                    return new ConfigurationInfo( config.getProcessedProperties(ref), config.getBundleLocation(),
                         config.getChangeCount() );
                 }
             }
@@ -476,6 +478,26 @@ public abstract class RegionConfiguratio
         return null;
     }
 
+    private ServiceReference<ManagedService> getManagedServiceReference(BundleContext bundleContext)
+    {
+        try {
+            Collection<ServiceReference<ManagedService>> refs = bundleContext.getServiceReferences(ManagedService.class,
+                    "(&(service.bundleid=" + String.valueOf(bundleContext.getBundle().getBundleId()) + ")(!(service.pid=*)))");
+            if ( !refs.isEmpty() ) {
+                return refs.iterator().next();
+            }
+        } catch (InvalidSyntaxException e) {
+            // this should never happen,
+        }
+        return bundleContext.registerService(ManagedService.class, new ManagedService() {
+
+            public void updated(Dictionary<String, ?> properties) throws ConfigurationException {
+                // nothing to do
+
+            }
+        }, null).getReference();
+    }
+
     private String filter(String rawPid)
     {
         return "(service.pid=" + rawPid + ")";