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:37 UTC

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

Author: csierra
Date: Fri Sep 29 13:20:37 2017
New Revision: 1810096

URL: http://svn.apache.org/viewvc?rev=1810096&view=rev
Log:
[Component-DSL] allow just to generate several values

Modified:
    aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/OSGi.java
    aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/JustOSGiImpl.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=1810096&r1=1810095&r2=1810096&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:37 2017
@@ -41,6 +41,8 @@ import org.osgi.framework.ServiceObjects
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
 
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Dictionary;
 import java.util.Map;
 import java.util.function.Consumer;
@@ -92,10 +94,14 @@ public interface OSGi<T> extends OSGiRun
 		return new JustOSGiImpl<>(s);
 	}
 
-	static <S> OSGi<S> just(Supplier<S> s) {
+	static <S> OSGi<S> just(Collection<S> s) {
 		return new JustOSGiImpl<>(s);
 	}
 
+	static <S> OSGi<S> just(Supplier<S> s) {
+		return new JustOSGiImpl<>(() -> Collections.singletonList(s.get()));
+	}
+
 	static <S> OSGi<S> join(OSGi<OSGi<S>> program) {
 		return program.flatMap(x -> x);
 	}

Modified: aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/JustOSGiImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/JustOSGiImpl.java?rev=1810096&r1=1810095&r2=1810096&view=diff
==============================================================================
--- aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/JustOSGiImpl.java (original)
+++ aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/JustOSGiImpl.java Fri Sep 29 13:20:37 2017
@@ -21,33 +21,56 @@ package org.apache.aries.osgi.functional
 import org.apache.aries.osgi.functional.OSGi;
 import org.apache.aries.osgi.functional.OSGiResult;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Function;
 import java.util.function.Supplier;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @author Carlos Sierra Andrés
  */
 public class JustOSGiImpl<T> extends OSGiImpl<T> {
 
-	private Supplier<T> _t;
+	private Supplier<Collection<T>> _t;
 
-	public JustOSGiImpl(Supplier<T> t) {
+	public JustOSGiImpl(Collection<T> t) {
+		this(() -> t);
+	}
+
+	public JustOSGiImpl(Supplier<Collection<T>> t) {
 		super(((bundleContext) -> {
 
 			Pipe<Tuple<T>, Tuple<T>> added = Pipe.create();
 
-			Tuple<T> tuple = Tuple.create(t.get());
+			AtomicReference<Collection<Tuple<T>>> collectionAtomicReference =
+				new AtomicReference<>();
 
 			return new OSGiResultImpl<>(
-				added, () -> added.getSource().accept(tuple), tuple::terminate);
+				added,
+				() -> {
+					List<Tuple<T>> tuples =
+						t.get().stream().map(Tuple::create).collect(
+							Collectors.toList());
+
+					collectionAtomicReference.set(tuples);
+
+					tuples.forEach(tuple ->
+						added.getSource().accept(tuple));
+				},
+				() ->
+					collectionAtomicReference.get().forEach(Tuple::terminate));
 		}));
 
 		_t = t;
 	}
 
 	public JustOSGiImpl(T t) {
-		this(() -> t);
+		this(() -> Collections.singletonList(t));
 	}
 
 	@Override
@@ -61,18 +84,18 @@ public class JustOSGiImpl<T> extends OSG
 			return new OSGiResultImpl<>(
 				added,
 				() -> {
-					OSGiImpl<S> next = (OSGiImpl<S>) fun.apply(_t.get());
+					List<OSGiResultImpl<S>> results = _t.get().stream().map(
+						p -> (OSGiImpl<S>) fun.apply(p)
+					).map(
+						n -> n._operation.run(bundleContext)
+					).collect(Collectors.toList());
 
-					OSGiResultImpl<S> osGiResult = next._operation.run(
-						bundleContext);
+					atomicReference.set(
+						() -> results.forEach(OSGiResult::close));
 
-					atomicReference.set(osGiResult::close);
-
-					osGiResult.pipeTo(added.getSource());
+					results.forEach(result -> result.pipeTo(added.getSource()));
 				},
-				() -> {
-					atomicReference.get().run();
-				});
+				() -> atomicReference.get().run());
 		});
 	}