From b165a56849bf6bc65572b61895a30aa23195f07c Mon Sep 17 00:00:00 2001 From: David Bohn <davbohn@googlemail.com> Date: Wed, 13 Jul 2016 10:43:53 +0200 Subject: [PATCH] Added helper to handle cases, where label fields are not well-formed --- .../configurations/AbstractConfiguration.java | 13 ++++++++---- .../configurations/GephiConfiguration.java | 6 ++++-- .../configurations/internal/NodeHelper.java | 21 +++++++++++++++++++ 3 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 src/main/java/fucoin/configurations/internal/NodeHelper.java diff --git a/src/main/java/fucoin/configurations/AbstractConfiguration.java b/src/main/java/fucoin/configurations/AbstractConfiguration.java index f4e3e7d..eba6a5e 100644 --- a/src/main/java/fucoin/configurations/AbstractConfiguration.java +++ b/src/main/java/fucoin/configurations/AbstractConfiguration.java @@ -14,6 +14,7 @@ import fucoin.actions.transaction.ActionGetAmount; import fucoin.actions.transaction.ActionGetAmountAnswer; import fucoin.actions.transaction.ActionNotifyObserver; import fucoin.configurations.internal.ConfigurationCreator; +import fucoin.configurations.internal.NodeHelper; import fucoin.supervisor.SuperVisorImpl; import fucoin.wallet.WalletImpl; import org.gephi.graph.api.Edge; @@ -98,7 +99,7 @@ public abstract class AbstractConfiguration extends AbstractNode { public void spawnWalletsFromNodes(Collection<Node> nodes, boolean createGUI) throws Exception { Future<Object> future = Patterns.ask(superVisor, new ActionAnnounceWalletCreation(nodes.size(), self()), timeout); for (Node node : nodes) { - String nameOfTheWallet = node.getLabel(); + String nameOfTheWallet = NodeHelper.nameOfNode(node); createWallet(nameOfTheWallet, createGUI); } Await.result(future, timeout.duration()); @@ -108,7 +109,7 @@ public abstract class AbstractConfiguration extends AbstractNode { * Fetch a random wallet */ public ActorRef getRandomWallet() { - return activeActors.get(ThreadLocalRandom.current().nextInt(activeActors.size())); + return wallets().get(ThreadLocalRandom.current().nextInt(activeActors.size())); } public List<ActorRef> wallets() { @@ -218,7 +219,7 @@ public abstract class AbstractConfiguration extends AbstractNode { } nodes.stream().forEach(node -> { - ActorRef wallet = walletByName(node.getLabel()); + ActorRef wallet = getWalletForNode(node); Edge[] edges = g.getEdges(node).toArray(); // Search for all reachable neighbours of the node @@ -229,9 +230,13 @@ public abstract class AbstractConfiguration extends AbstractNode { return edge.getTarget(); } return edge.getSource(); - }).map(target -> walletByName(target.getLabel())).collect(Collectors.toList()); + }).map(this::getWalletForNode).collect(Collectors.toList()); wallet.tell(new ActionAddOverlayNeighbours(overlayNeighbours), self()); }); } + + protected ActorRef getWalletForNode(Node node) { + return walletByName(NodeHelper.nameOfNode(node)); + } } diff --git a/src/main/java/fucoin/configurations/GephiConfiguration.java b/src/main/java/fucoin/configurations/GephiConfiguration.java index 6347f78..bdf2360 100644 --- a/src/main/java/fucoin/configurations/GephiConfiguration.java +++ b/src/main/java/fucoin/configurations/GephiConfiguration.java @@ -8,9 +8,11 @@ import fucoin.actions.transaction.ActionGetAmount; import fucoin.actions.transaction.ActionGetAmountAnswer; import fucoin.configurations.internal.ConfigurationName; import fucoin.configurations.internal.GephiLoader; +import fucoin.configurations.internal.NodeHelper; import fucoin.gui.gephi.GephiFileSelector; import fucoin.gui.gephi.GraphWindow; import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; import scala.concurrent.Future; import scala.concurrent.duration.Duration; @@ -50,7 +52,7 @@ public class GephiConfiguration extends AbstractConfiguration { graphWindow.addNodeClickHandler((node, event) -> { // get associated wallet and ask for its amount - ActorRef wallet = walletByName(node.getLabel()); + ActorRef wallet = getWalletForNode(node); Future<Object> future = Patterns.ask(wallet, new ActionGetAmount(), timeout); future.onSuccess(new OnSuccess<Object>() { @@ -58,7 +60,7 @@ public class GephiConfiguration extends AbstractConfiguration { public void onSuccess(Object result) throws Throwable { // display the amount when an answer is received ActionGetAmountAnswer answer = (ActionGetAmountAnswer) result; - graphWindow.setInfobarText(node.getLabel()+" has "+answer.amount+" FUCs"); + graphWindow.setInfobarText(NodeHelper.nameOfNode(node)+" has "+answer.amount+" FUCs"); } }, context().dispatcher()); }); diff --git a/src/main/java/fucoin/configurations/internal/NodeHelper.java b/src/main/java/fucoin/configurations/internal/NodeHelper.java new file mode 100644 index 0000000..abb0280 --- /dev/null +++ b/src/main/java/fucoin/configurations/internal/NodeHelper.java @@ -0,0 +1,21 @@ +package fucoin.configurations.internal; + +import org.gephi.graph.api.Node; + +public class NodeHelper { + + public static String nameOfNode(Node n) { + String label = n.getLabel(); + + if (label == null || label.isEmpty()) { + return "Wallet" + n.getId(); + } + + if (Character.isDigit(label.charAt(0))) { + return "Wallet" + label; + } + + return label; + } + +} -- GitLab