Author: csierra
Date: Tue Oct 10 15:51:30 2017
New Revision: 1811724

URL: http://svn.apache.org/viewvc?rev=1811724&view=rev
Log:
[Component-DSL] Eliminate mutable setter

Modified:
    
aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/RouteOsgiImpl.java
    
aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/Tuple.java

Modified: 
aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/RouteOsgiImpl.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/RouteOsgiImpl.java?rev=1811724&r1=1811723&r2=1811724&view=diff
==============================================================================
--- 
aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/RouteOsgiImpl.java
 (original)
+++ 
aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/RouteOsgiImpl.java
 Tue Oct 10 15:51:30 2017
@@ -55,8 +55,8 @@ public class RouteOsgiImpl<T> extends OS
 
     static class RouterImpl<T> implements Router<T> {
 
-        RouterImpl(Consumer<Tuple<T>> signalAdding) {
-            _signalAdding = signalAdding;
+        RouterImpl(Consumer<Tuple<T>> op) {
+            this.op = op;
         }
 
         @Override
@@ -83,13 +83,9 @@ public class RouteOsgiImpl<T> extends OS
         public SentEvent<T> signalAdd(Event<T> event) {
             Tuple<T> tuple = (Tuple<T>) event;
 
-            Tuple<T> copy = Tuple.create(tuple._t);
+            Tuple<T> copy = tuple.copy();
 
-            tuple.addRelatedTuple(copy);
-
-            copy.setEvent(tuple);
-
-            _signalAdding.accept(copy);
+            op.accept(copy);
 
             return copy;
         }
@@ -98,7 +94,7 @@ public class RouteOsgiImpl<T> extends OS
         Consumer<Event<T>> _leaving = (ign) -> {};
 
         private Runnable _close = NOOP;
-        private final Consumer<Tuple<T>> _signalAdding;
+        private final Consumer<Tuple<T>> op;
         private Runnable _start = NOOP;
 
     }

Modified: 
aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/Tuple.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/Tuple.java?rev=1811724&r1=1811723&r2=1811724&view=diff
==============================================================================
--- 
aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/Tuple.java
 (original)
+++ 
aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/Tuple.java
 Tue Oct 10 15:51:30 2017
@@ -36,7 +36,7 @@ class Tuple<T> implements Event<T>, Sent
        private final Deque<Runnable> _closingHandlers;
        private final DoublyLinkedList<Tuple<?>> _relatedTuples;
        private final AtomicBoolean closed = new AtomicBoolean(false);
-       private Event<T> cause = this;
+       private Tuple<T> _cause = this;
 
        private Tuple(T t) {
                this(t, new LinkedList<>(), new DoublyLinkedList<>());
@@ -51,6 +51,16 @@ class Tuple<T> implements Event<T>, Sent
                _relatedTuples = relatedTuples;
        }
 
+       private Tuple(
+               T t, Deque<Runnable> closingHandlers,
+               DoublyLinkedList<Tuple<?>> relatedTuples,
+               Tuple<T> cause) {
+
+               this(t, closingHandlers, relatedTuples);
+
+               _cause = cause;
+       }
+
        public void addRelatedTuple(Tuple<?> tuple) {
                if (closed.get()) {
                        return;
@@ -97,13 +107,18 @@ class Tuple<T> implements Event<T>, Sent
                _closingHandlers.push(terminator);
        }
 
-       public void setEvent(Event<T> event) {
-               this.cause = event;
-       }
-
        @Override
        public Event<T> getEvent() {
-               return cause;
+               return _cause;
+       }
+
+       public Tuple<T> copy() {
+               Tuple<T> copy = new Tuple<>(
+                       _t, new LinkedList<>(), new DoublyLinkedList<>(), this);
+
+               addRelatedTuple(copy);
+
+               return copy;
        }
 
        public void terminate() {


Reply via email to