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