JAV-181 kept original add child signature

Signed-off-by: seanyinx <sean.yin@huawei.com>
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/application/GraphBuilder.java b/saga-core/src/main/java/io/servicecomb/saga/core/application/GraphBuilder.java
index 0101748..9d7ec72 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/application/GraphBuilder.java
+++ b/saga-core/src/main/java/io/servicecomb/saga/core/application/GraphBuilder.java
@@ -24,7 +24,6 @@
 import io.servicecomb.saga.core.SagaException;
 import io.servicecomb.saga.core.SagaRequest;
 import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.dag.Edge;
 import io.servicecomb.saga.core.dag.GraphCycleDetector;
 import io.servicecomb.saga.core.dag.Node;
 import io.servicecomb.saga.core.dag.SingleLeafDirectedAcyclicGraph;
@@ -53,16 +52,14 @@
       SagaRequest[] sagaRequests,
       Map<String, Node<SagaResponse, SagaRequest>> requestNodes) {
 
-    Node<SagaResponse, SagaRequest> root = rootNode(0);
+    Node<SagaResponse, SagaRequest> root = rootNode();
     Node<SagaResponse, SagaRequest> leaf = leafNode(sagaRequests.length + 1);
 
     for (SagaRequest sagaRequest : sagaRequests) {
       if (isOrphan(sagaRequest)) {
-        new Edge<>((any) -> true, root, requestNodes.get(sagaRequest.id()));
         root.addChild(requestNodes.get(sagaRequest.id()));
       } else {
         for (String parent : sagaRequest.parents()) {
-          new Edge<>((any) -> true, requestNodes.get(parent), requestNodes.get(sagaRequest.id()));
           requestNodes.get(parent).addChild(requestNodes.get(sagaRequest.id()));
         }
       }
@@ -70,17 +67,14 @@
 
     requestNodes.values().stream()
         .filter((node) -> node.children().isEmpty())
-        .forEach(node -> {
-          new Edge<>((any) -> true, node, leaf);
-          node.addChild(leaf);
-        });
+        .forEach(node -> node.addChild(leaf));
 
     return new SingleLeafDirectedAcyclicGraph<>(root, leaf);
   }
 
-  private Node<SagaResponse, SagaRequest> rootNode(int id) {
+  private Node<SagaResponse, SagaRequest> rootNode() {
     return new Node<>(
-        id,
+        0,
         NoOpSagaRequest.SAGA_START_REQUEST);
   }
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/dag/Edge.java b/saga-core/src/main/java/io/servicecomb/saga/core/dag/Edge.java
index 59d5297..2fbcd3f 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/dag/Edge.java
+++ b/saga-core/src/main/java/io/servicecomb/saga/core/dag/Edge.java
@@ -18,12 +18,12 @@
 
 import java.util.function.Predicate;
 
-public class Edge<C, T> {
+class Edge<C, T> {
   private final Predicate<C> predicate;
   private final Node<C, T> parent;
   private final Node<C, T> child;
 
-  public Edge(Predicate<C> predicate, Node<C, T> parent, Node<C, T> child) {
+  Edge(Predicate<C> predicate, Node<C, T> parent, Node<C, T> child) {
     this.predicate = predicate;
     this.parent = parent;
     this.child = child;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/dag/Node.java b/saga-core/src/main/java/io/servicecomb/saga/core/dag/Node.java
index b79a417..5069dbb 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/dag/Node.java
+++ b/saga-core/src/main/java/io/servicecomb/saga/core/dag/Node.java
@@ -16,17 +16,15 @@
 
 package io.servicecomb.saga.core.dag;
 
-import java.util.Collection;
 import java.util.HashSet;
 import java.util.Objects;
 import java.util.Set;
+import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
 public class Node<C, T> {
   private final long id;
   private final T value;
-  private final Set<Node<C, T>> children = new HashSet<>();
-  private final Set<Node<C, T>> parents = new HashSet<>();
 
   private final Set<Edge<C, T>> childrenEdges = new HashSet<>();
   private final Set<Edge<C, T>> parentEdges = new HashSet<>();
@@ -45,39 +43,41 @@
   }
 
   Set<Node<C, T>> parents() {
-    return parents;
+    return parentEdges.stream()
+        .map(Edge::source)
+        .collect(Collectors.toSet());
   }
 
   public Set<Node<C, T>> children() {
-    return children;
+    return childrenEdges.stream()
+        .map(Edge::target)
+        .collect(Collectors.toSet());
   }
 
   public void addChild(Node<C, T> node) {
-    children.add(node);
-    node.parents.add(this);
+    addChild(any -> true, node);
   }
 
-  public void addChildren(Collection<Node<C, T>> nodes) {
-    children.addAll(nodes);
-    nodes.forEach(node -> node.parents.add(this));
+  public void addChild(Predicate<C> predicate, Node<C, T> node) {
+    new Edge<>(predicate, this, node);
   }
 
-  public void addChildEdge(Edge<C, T> edge) {
+  void addChildEdge(Edge<C, T> edge) {
     childrenEdges.add(edge);
   }
 
-  public void addParentEdge(Edge<C, T> edge) {
+  void addParentEdge(Edge<C, T> edge) {
     parentEdges.add(edge);
   }
 
-  public Set<Node<C, T>> parents(C condition) {
+  Set<Node<C, T>> parents(C condition) {
     return parentEdges.stream()
         .filter(edge -> edge.isSatisfied(condition))
         .map(Edge::source)
         .collect(Collectors.toSet());
   }
 
-  public Set<Node<C, T>> children(C condition) {
+  Set<Node<C, T>> children(C condition) {
     return childrenEdges.stream()
         .filter(edge -> edge.isSatisfied(condition))
         .map(Edge::target)
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/SagaIntegrationTest.java b/saga-core/src/test/java/io/servicecomb/saga/core/SagaIntegrationTest.java
index 17aebd4..fce7390 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/SagaIntegrationTest.java
+++ b/saga-core/src/test/java/io/servicecomb/saga/core/SagaIntegrationTest.java
@@ -36,21 +36,22 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import com.seanyinx.github.unit.scaffolding.Randomness;
-
-import io.servicecomb.saga.core.dag.Edge;
-import io.servicecomb.saga.core.dag.Node;
-import io.servicecomb.saga.core.dag.SingleLeafDirectedAcyclicGraph;
-import io.servicecomb.saga.infrastructure.EmbeddedEventStore;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.Callable;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.CyclicBarrier;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.stubbing.Answer;
 
+import com.seanyinx.github.unit.scaffolding.Randomness;
+
+import io.servicecomb.saga.core.dag.Node;
+import io.servicecomb.saga.core.dag.SingleLeafDirectedAcyclicGraph;
+import io.servicecomb.saga.infrastructure.EmbeddedEventStore;
+
 @SuppressWarnings("unchecked")
 public class SagaIntegrationTest {
   private static final String sagaId = Randomness.uniquify("sagaId");
@@ -93,9 +94,6 @@
     root.addChild(node1);
     node1.addChild(node2);
     node2.addChild(leaf);
-    new Edge<>((any) -> true, root, node1);
-    new Edge<>((any) -> true, node1, node2);
-    new Edge<>((any) -> true, node2, leaf);
 
     SagaStartTask sagaStartTask = new SagaStartTask(sagaId, requestJson, eventStore);
     SagaEndTask sagaEndTask = new SagaEndTask(sagaId, eventStore);
@@ -513,8 +511,6 @@
   private void addExtraChildToNode1() {
     node1.addChild(node3);
     node3.addChild(leaf);
-    new Edge<>((any) -> true, node1, node3);
-    new Edge<>((any) -> true, node3, leaf);
   }
 
   private SagaRequest request(String requestId,
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/dag/DirectedAcyclicGraphTraversalTest.java b/saga-core/src/test/java/io/servicecomb/saga/core/dag/DirectedAcyclicGraphTraversalTest.java
index e49db74..93e9885 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/dag/DirectedAcyclicGraphTraversalTest.java
+++ b/saga-core/src/test/java/io/servicecomb/saga/core/dag/DirectedAcyclicGraphTraversalTest.java
@@ -16,7 +16,6 @@
 
 package io.servicecomb.saga.core.dag;
 
-import static java.util.Arrays.asList;
 import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
@@ -66,21 +65,14 @@
   //        6
   @Before
   public void setUp() throws Exception {
-    root.addChildren(asList(node1, node2));
-    node1.addChildren(asList(node3, node4));
-    node3.addChild(node5);
-    node4.addChild(node5);
-    node5.addChild(leaf);
-    node2.addChild(leaf);
-
-    new Edge<>(predicate_p_1, root, node1);
-    new Edge<>(predicate_p_2, root, node2);
-    new Edge<>(predicate_1_3, node1, node3);
-    new Edge<>(predicate_1_4, node1, node4);
-    new Edge<>(predicate_3_5, node3, node5);
-    new Edge<>(predicate_4_5, node4, node5);
-    new Edge<>(predicate_2_6, node2, leaf);
-    new Edge<>(predicate_5_6, node5, leaf);
+    root.addChild(predicate_p_1, node1);
+    root.addChild(predicate_p_2, node2);
+    node1.addChild(predicate_1_3, node3);
+    node1.addChild(predicate_1_4, node4);
+    node3.addChild(predicate_3_5, node5);
+    node4.addChild(predicate_4_5, node5);
+    node2.addChild(predicate_2_6, leaf);
+    node5.addChild(predicate_5_6, leaf);
   }
 
   @Test
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/dag/NodeTest.java b/saga-core/src/test/java/io/servicecomb/saga/core/dag/NodeTest.java
index f09da46..3a87979 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/dag/NodeTest.java
+++ b/saga-core/src/test/java/io/servicecomb/saga/core/dag/NodeTest.java
@@ -16,14 +16,17 @@
 
 package io.servicecomb.saga.core.dag;
 
-import static java.util.Arrays.asList;
 import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+
+import java.util.function.Predicate;
 
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.Mockito;
 
 @SuppressWarnings("unchecked")
 public class NodeTest {
@@ -39,31 +42,16 @@
   private final Node<String, String> node5 = new Node<>(5, value);
   private final Node<String, String> node6 = new Node<>(6, value);
 
-  private final String condition = "";
+  private final String condition = "whatever it is";
 
-  private boolean satisfied_p_1;
-  private final Edge<String, String> edge1 = new Edge<>(any -> satisfied_p_1, parent, node1);
-
-  private boolean satisfied_p_2;
-  private final Edge<String, String> edge2 = new Edge<>(any -> satisfied_p_2, parent, node2);
-
-  private boolean satisfied_1_3;
-  private final Edge<String, String> edge3 = new Edge<>(any -> satisfied_1_3, node1, node3);
-
-  private boolean satisfied_1_4;
-  private final Edge<String, String> edge4 = new Edge<>(any -> satisfied_1_4, node1, node4);
-
-  private boolean satisfied_3_5;
-  private final Edge<String, String> edge51 = new Edge<>(any -> satisfied_3_5, node3, node5);
-
-  private boolean satisfied_4_5;
-  private final Edge<String, String> edge52 = new Edge<>(any -> satisfied_4_5, node4, node5);
-
-  private boolean satisfied_2_6;
-  private final Edge<String, String> edge61 = new Edge<>(any -> satisfied_2_6, node2, node6);
-
-  private boolean satisfied_5_6;
-  private final Edge<String, String> edge62 = new Edge<>(any -> satisfied_5_6, node5, node6);
+  private final Predicate<String> predicate_p_1 = Mockito.mock(Predicate.class);
+  private final Predicate<String> predicate_p_2 = Mockito.mock(Predicate.class);
+  private final Predicate<String> predicate_1_3 = Mockito.mock(Predicate.class);
+  private final Predicate<String> predicate_1_4 = Mockito.mock(Predicate.class);
+  private final Predicate<String> predicate_3_5 = Mockito.mock(Predicate.class);
+  private final Predicate<String> predicate_4_5 = Mockito.mock(Predicate.class);
+  private final Predicate<String> predicate_2_6 = Mockito.mock(Predicate.class);
+  private final Predicate<String> predicate_5_6 = Mockito.mock(Predicate.class);
 
   //        0
   //       / \
@@ -76,12 +64,14 @@
   //        6
   @Before
   public void setUp() throws Exception {
-    parent.addChildren(asList(node1, node2));
-    node1.addChildren(asList(node3, node4));
-    node3.addChild(node5);
-    node4.addChild(node5);
-    node5.addChild(node6);
-    node2.addChild(node6);
+    parent.addChild(predicate_p_1, node1);
+    parent.addChild(predicate_p_2, node2);
+    node1.addChild(predicate_1_3, node3);
+    node1.addChild(predicate_1_4, node4);
+    node3.addChild(predicate_3_5, node5);
+    node4.addChild(predicate_4_5, node5);
+    node2.addChild(predicate_2_6, node6);
+    node5.addChild(predicate_5_6, node6);
   }
 
   @Test
@@ -108,27 +98,27 @@
 
   @Test
   public void relativesContainsSatisfiedOnesOnly() throws Exception {
-    satisfied_p_1 = true;
+    when(predicate_p_1.test(condition)).thenReturn(true);
     assertThat(parent.children(condition), contains(node1));
     assertThat(node1.parents(condition), contains(parent));
     assertThat(node2.parents(condition).isEmpty(), is(true));
 
-    satisfied_1_3 = true;
-    satisfied_1_4 = true;
+    when(predicate_1_3.test(condition)).thenReturn(true);
+    when(predicate_1_4.test(condition)).thenReturn(true);
     assertThat(node1.children(condition), contains(node3, node4));
     assertThat(node3.parents(condition), contains(node1));
     assertThat(node4.parents(condition), contains(node1));
 
     assertThat(node2.children(condition).isEmpty(), is(true));
 
-    satisfied_3_5 = true;
+    when(predicate_3_5.test(condition)).thenReturn(true);
     assertThat(node3.children(condition), contains(node5));
 
-    satisfied_4_5 = true;
+    when(predicate_4_5.test(condition)).thenReturn(true);
     assertThat(node4.children(condition), contains(node5));
     assertThat(node5.parents(condition), contains(node3, node4));
 
-    satisfied_5_6 = true;
+    when(predicate_5_6.test(condition)).thenReturn(true);
     assertThat(node5.children(condition), contains(node6));
 
     assertThat(node6.children(condition).isEmpty(), is(true));