From cd591a05e28f730006b138028bac99387bdd865b Mon Sep 17 00:00:00 2001
From: Kim Kern <kim.kern@fu-berlin.de>
Date: Thu, 14 Jul 2016 17:07:55 +0200
Subject: [PATCH] refactor builder pattern AggregationContext

---
 .../fucoin/actions/aggregation/AggregationMethod.java  | 10 +++++-----
 src/main/java/fucoin/supervisor/SuperVisorImpl.java    |  5 ++++-
 src/main/java/fucoin/wallet/WalletImpl.java            |  4 ++--
 3 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/src/main/java/fucoin/actions/aggregation/AggregationMethod.java b/src/main/java/fucoin/actions/aggregation/AggregationMethod.java
index 460498e..29f0fb4 100644
--- a/src/main/java/fucoin/actions/aggregation/AggregationMethod.java
+++ b/src/main/java/fucoin/actions/aggregation/AggregationMethod.java
@@ -5,9 +5,9 @@ import java.util.function.Function;
 import fucoin.wallet.AbstractWallet;
 
 public enum AggregationMethod {
-	Average(x -> new double[]{x.getAmount()}, (x, y) -> new double[]{(x[0] + y[0]) / 2}),
-	Maximum(x -> new double[]{x.getAmount()}, (x, y) -> new double[]{Math.max(x[0], y[0])}),
-	Minimum(x -> new double[]{x.getAmount()}, (x, y) -> new double[]{Math.min(x[0], y[0])}),
+	Average((x, y) -> new double[]{(x[0] + y[0]) / 2}),
+	Maximum((x, y) -> new double[]{Math.max(x[0], y[0])}),
+	Minimum((x, y) -> new double[]{Math.min(x[0], y[0])}),
 	Count(x -> new double[]{0}, (x, y) -> new double[]{(x[0] + y[0]) / 2}, x -> (1 / x[0]), false, x -> new double[]{1}),
 	Sum(x -> new double[]{x.getAmount(), 0}, (x, y) -> new double[]{(x[0] + y[0]) / 2, (x[1] + y[1]) / 2}, x -> x[0]*(1 / x[1]), false, x -> new double[]{x.getAmount(), 1});
 
@@ -18,8 +18,8 @@ public enum AggregationMethod {
 	private double[] values;
 	private final Function<double[], Double> resultExtractor;
 	
-	AggregationMethod(Function<AbstractWallet, double[]> valueExtractor, AggregationFunction function) {
-		this.valueExtractor = valueExtractor;
+	AggregationMethod(AggregationFunction function) {
+		this.valueExtractor = x -> new double[]{x.getAmount()};
 		this.function = function;
 		this.useValueExtractor = true;
 		this.values = new double[]{ 0 };
diff --git a/src/main/java/fucoin/supervisor/SuperVisorImpl.java b/src/main/java/fucoin/supervisor/SuperVisorImpl.java
index 409f99b..0458fe0 100644
--- a/src/main/java/fucoin/supervisor/SuperVisorImpl.java
+++ b/src/main/java/fucoin/supervisor/SuperVisorImpl.java
@@ -185,7 +185,10 @@ public class SuperVisorImpl extends AbstractNode implements TransactionLogger {
 		AggregationFunction function = method.getFunction();
 		double[] values = method.getValues();
 		Function<double[], Double> resultExtractor = method.getResultExtractor();
-		AggregationContext context = new AggregationContextBuilder(function, valueExtractor, valueAltExtractor, values, resultExtractor)
+		AggregationContext context = new AggregationContextBuilder(function, values)
+				.setValueExtractor(valueExtractor)
+				.setValueAltExtractor(valueAltExtractor)
+				.setResultExtractor(resultExtractor)
 				.setMaxExchanges(exchanges)
 				.build();
 		ActorRef randomNode = getRandomNeighbor();
diff --git a/src/main/java/fucoin/wallet/WalletImpl.java b/src/main/java/fucoin/wallet/WalletImpl.java
index 62a4ba4..9ee74ac 100644
--- a/src/main/java/fucoin/wallet/WalletImpl.java
+++ b/src/main/java/fucoin/wallet/WalletImpl.java
@@ -30,8 +30,8 @@ public class WalletImpl extends AbstractWallet {
     private transient WalletGuiControl gui;
     private String preKnownNeighbourName;
     private boolean isActive;
-	private AggregationContext aggregationContext = new AggregationContextBuilder(null, null, null, new double[] { -1 },
-			x -> x[0]).build();
+	private AggregationContext aggregationContext = new AggregationContextBuilder((x, y) -> x, new double[] { -1 })
+			.build();
 	private boolean hasPendingAggregationRequest = false;
     private ConcurrentLinkedQueue<ActorRef> deferedSupervisorReceivers = new ConcurrentLinkedQueue<>();
 	private transient final EvictingQueue<UUID> handledAggregationRequests = EvictingQueue.create(10);
-- 
GitLab