FELIX-4578 : [Core R6] Support new Framework.init(FrameworkListener ... listeners) override
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1614626 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/main/java/org/apache/felix/framework/BundleContextImpl.java b/framework/src/main/java/org/apache/felix/framework/BundleContextImpl.java
index 2004bb8..c731253 100644
--- a/framework/src/main/java/org/apache/felix/framework/BundleContextImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/BundleContextImpl.java
@@ -529,8 +529,11 @@
/**
* @see org.osgi.framework.BundleContext#getServiceObjects(org.osgi.framework.ServiceReference)
*/
- public <S> ServiceObjects<S> getServiceObjects(ServiceReference<S> reference)
+ public <S> ServiceObjects<S> getServiceObjects(final ServiceReference<S> ref)
{
- throw new UnsupportedOperationException(); // TODO
+ // Get the service registration.
+ final ServiceRegistrationImpl reg =
+ ((ServiceRegistrationImpl.ServiceReferenceImpl) ref).getRegistration();
+ return reg.getServiceObjects(m_bundle);
}
}
\ No newline at end of file
diff --git a/framework/src/main/java/org/apache/felix/framework/Felix.java b/framework/src/main/java/org/apache/felix/framework/Felix.java
index 4ca089e..cf3d073 100644
--- a/framework/src/main/java/org/apache/felix/framework/Felix.java
+++ b/framework/src/main/java/org/apache/felix/framework/Felix.java
@@ -5297,11 +5297,36 @@
return m_urlHandlersActivator.getContentHandlerService(mimeType);
}
- /* (non-Javadoc)
+ /**
* @see org.osgi.framework.launch.Framework#init(org.osgi.framework.FrameworkListener[])
*/
- public void init(FrameworkListener... listeners) throws BundleException {
- this.init(); // TODO
- }
+ public void init(final FrameworkListener... listeners) throws BundleException
+ {
+ // add framework listeners
+ if ( listeners != null )
+ {
+ for(final FrameworkListener fl : listeners)
+ {
+ addFrameworkListener(this, fl);
+ }
+ }
+ // call init
+ try
+ {
+ this.init();
+ }
+
+ // remove framework listeners
+ finally
+ {
+ if ( listeners != null )
+ {
+ for(final FrameworkListener fl : listeners)
+ {
+ removeFrameworkListener(this, fl);
+ }
+ }
+ }
+ }
}
diff --git a/framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java b/framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java
index e539ebd..93eab8a 100644
--- a/framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java
@@ -38,6 +38,7 @@
import org.osgi.framework.Constants;
import org.osgi.framework.ServiceException;
import org.osgi.framework.ServiceFactory;
+import org.osgi.framework.ServiceObjects;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
import org.osgi.framework.wiring.BundleCapability;
@@ -403,6 +404,14 @@
}
}
+ /**
+ * Get the service objects for the provided bundle
+ */
+ public ServiceObjects getServiceObjects(Bundle bundle)
+ {
+ throw new UnsupportedOperationException();
+ }
+
//
// ServiceReference implementation
//