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/14 07:24:49 UTC

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

Author: csierra
Date: Thu Sep 14 07:24:49 2017
New Revision: 1808316

URL: http://svn.apache.org/viewvc?rev=1808316&view=rev
Log:
Allow just to be lazy

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=1808316&r1=1808315&r2=1808316&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 Thu Sep 14 07:24:49 2017
@@ -48,6 +48,7 @@ import java.util.Map;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.Predicate;
+import java.util.function.Supplier;
 
 /**
  * @author Carlos Sierra Andrés
@@ -93,6 +94,10 @@ public interface OSGi<T> extends OSGiRun
 		return new JustOSGiImpl<>(s);
 	}
 
+	static <S> OSGi<S> just(Supplier<S> s) {
+		return new JustOSGiImpl<>(s);
+	}
+
 	static <S> OSGi<S> nothing() {
 		return new NothingOSGiImpl<>();
 	}

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=1808316&r1=1808315&r2=1808316&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 Thu Sep 14 07:24:49 2017
@@ -26,47 +26,44 @@ import java.util.IdentityHashMap;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Consumer;
 import java.util.function.Function;
+import java.util.function.Supplier;
 
 /**
  * @author Carlos Sierra Andrés
  */
 public class JustOSGiImpl<T> extends OSGiImpl<T> {
 
-	private T _t;
+	private Supplier<T> _t;
 
-	public JustOSGiImpl(T t) {
+	public JustOSGiImpl(Supplier<T> t) {
 		super(((bundleContext) -> {
 
 			Pipe<Tuple<T>, Tuple<T>> added = Pipe.create();
 
-			Consumer<Tuple<T>> source = added.getSource();
-
 			Pipe<Tuple<T>, Tuple<T>> removed = Pipe.create();
 
-			Consumer<Tuple<T>> removedSource = removed.getSource();
-
-			Tuple<T> tuple = Tuple.create(t);
+			Tuple<T> tuple = Tuple.create(t.get());
 
 			return new OSGiResultImpl<>(
 				added, removed,
-				() -> source.accept(tuple),
-				() -> removedSource.accept(tuple));
+				() -> added.getSource().accept(tuple),
+				() -> removed.getSource().accept(tuple));
 		}));
 
 		_t = t;
 	}
 
+	public JustOSGiImpl(T t) {
+		this(() -> t);
+	}
+
 	@Override
 	public <S> OSGiImpl<S> flatMap(Function<? super T, OSGi<? extends S>> fun) {
 		return new OSGiImpl<>(bundleContext -> {
 			Pipe<Tuple<S>, Tuple<S>> added = Pipe.create();
 
-			Consumer<Tuple<S>> addedSource = added.getSource();
-
 			Pipe<Tuple<S>, Tuple<S>> removed = Pipe.create();
 
-			Consumer<Tuple<S>> removedSource = removed.getSource();
-
 			AtomicReference<OSGiResult<? extends S>> atomicReference =
 				new AtomicReference<>(null);
 			AtomicReference<Tuple<S>> tupleReference =
@@ -75,7 +72,7 @@ public class JustOSGiImpl<T> extends OSG
 			return new OSGiResultImpl<>(
 				added, removed,
 				() -> {
-					OSGi<? extends S> next = fun.apply(_t);
+					OSGi<? extends S> next = fun.apply(_t.get());
 
 					atomicReference.set(
 						next.run(
@@ -85,7 +82,7 @@ public class JustOSGiImpl<T> extends OSG
 
 								tupleReference.set(tuple);
 
-								addedSource.accept(tuple);
+								added.getSource().accept(tuple);
 							}));
 
 				},
@@ -93,7 +90,7 @@ public class JustOSGiImpl<T> extends OSG
 					Tuple<S> s = tupleReference.get();
 
 					if (s != null) {
-						removedSource.accept(s);
+						removed.getSource().accept(s);
 					}
 
 					OSGiResult<? extends S> osGiResult = atomicReference.get();