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 + ")";