You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2017/09/29 13:20:23 UTC

svn commit: r1810094 - in /aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional: OSGi.java internal/PrototypesOSGi.java internal/ServicesOSGi.java

Author: csierra
Date: Fri Sep 29 13:20:23 2017
New Revision: 1810094

URL: http://svn.apache.org/viewvc?rev=1810094&view=rev
Log:
[Component-DSL] Reimplement in terms of service references

Removed:
    aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/PrototypesOSGi.java
    aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/ServicesOSGi.java
Modified:
    aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/OSGi.java

Modified: aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/OSGi.java
URL: http://svn.apache.org/viewvc/aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/OSGi.java?rev=1810094&r1=1810093&r2=1810094&view=diff
==============================================================================
--- aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/OSGi.java (original)
+++ aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/OSGi.java Fri Sep 29 13:20:23 2017
@@ -32,10 +32,8 @@ import org.apache.aries.osgi.functional.
 import org.apache.aries.osgi.functional.internal.JustOSGiImpl;
 import org.apache.aries.osgi.functional.internal.NothingOSGiImpl;
 import org.apache.aries.osgi.functional.internal.OnCloseOSGiImpl;
-import org.apache.aries.osgi.functional.internal.PrototypesOSGi;
 import org.apache.aries.osgi.functional.internal.ServiceReferenceOSGi;
 import org.apache.aries.osgi.functional.internal.ServiceRegistrationOSGiImpl;
-import org.apache.aries.osgi.functional.internal.ServicesOSGi;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceFactory;
@@ -121,7 +119,12 @@ public interface OSGi<T> extends OSGiRun
 	static <T> OSGi<ServiceObjects<T>> prototypes(
 		Class<T> clazz, String filterString) {
 
-		return new PrototypesOSGi<>(clazz, filterString);
+		return
+		bundleContext().flatMap(
+		bundleContext ->
+
+		serviceReferences(clazz, filterString).map(
+			bundleContext::getServiceObjects));
 	}
 
 	static <T> OSGi<ServiceRegistration<T>> register(
@@ -151,7 +154,20 @@ public interface OSGi<T> extends OSGiRun
 	}
 
 	static <T> OSGi<T> services(Class<T> clazz, String filterString) {
-		return new ServicesOSGi<>(clazz, filterString);
+		return
+			bundleContext().flatMap(
+			bundleContext ->
+
+			serviceReferences(clazz, filterString).flatMap(
+			sr -> {
+				T service = bundleContext.getService(sr);
+
+				return
+					onClose(() -> bundleContext.ungetService(sr)).then(
+					just(service)
+				);
+			}
+		));
 	}
 
 	static <T> OSGi<ServiceReference<T>> serviceReferences(