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());
});
}