From 8cbbf76e1732113c07ef416874346f15b85ae34b Mon Sep 17 00:00:00 2001
From: Luca Keidel <info@lucakeidel.de>
Date: Tue, 14 Jun 2016 14:07:18 +0200
Subject: [PATCH] Implemented remote address selection dialog

---
 src/main/java/fucoin/Main.java                    |  2 +-
 src/main/java/fucoin/MainRemote.java              | 10 +++++++++-
 src/main/java/fucoin/actions/Action.java          |  4 +++-
 src/main/java/fucoin/actions/join/ActionJoin.java |  1 +
 .../java/fucoin/gui/WalletGuiControlImpl.java     |  8 +++++++-
 src/main/java/fucoin/wallet/WalletImpl.java       | 15 +++++++++++++++
 6 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/src/main/java/fucoin/Main.java b/src/main/java/fucoin/Main.java
index 2d9f6c3..36991ab 100644
--- a/src/main/java/fucoin/Main.java
+++ b/src/main/java/fucoin/Main.java
@@ -16,7 +16,7 @@ import java.util.List;
 
 public class Main {
 
-    private static int numberOfWallets = 2;
+    private static int numberOfWallets = 1;
 
     private static ActorSystem cSystem;
 
diff --git a/src/main/java/fucoin/MainRemote.java b/src/main/java/fucoin/MainRemote.java
index 3568dd0..9080f7b 100644
--- a/src/main/java/fucoin/MainRemote.java
+++ b/src/main/java/fucoin/MainRemote.java
@@ -15,9 +15,17 @@ public class MainRemote {
 
 	public static void main(String[] args) throws InterruptedException {
 
+		//Load configuration from current directory or from resources directory of jar
 		File file = new File("application.conf");
-		System.out.println("config found? " + file.exists());
 		Config config = ConfigFactory.parseFile(file);
+		if (!file.exists()) {
+			System.out.println("Load default application.conf");
+			config = ConfigFactory.parseResources("application.conf");
+		} else {
+			System.out.println("Load local application.conf");
+		}
+
+		//Init System Actor System
 		ActorSystem system = ActorSystem.create("Test", config);
 		
 		Address address = new Address("akka.tcp", "Core", "127.0.0.1", 1234);
diff --git a/src/main/java/fucoin/actions/Action.java b/src/main/java/fucoin/actions/Action.java
index 7bb94e8..cb4b42a 100644
--- a/src/main/java/fucoin/actions/Action.java
+++ b/src/main/java/fucoin/actions/Action.java
@@ -4,7 +4,9 @@ import akka.actor.ActorRef;
 import akka.actor.UntypedActorContext;
 import fucoin.AbstractNode;
 
-public abstract class Action<T extends AbstractNode> {
+import java.io.Serializable;
+
+public abstract class Action<T extends AbstractNode> implements Serializable{
     private ActorRef self;
 
     public final void doAction(T abstractNode) {
diff --git a/src/main/java/fucoin/actions/join/ActionJoin.java b/src/main/java/fucoin/actions/join/ActionJoin.java
index 8c1699f..e224ddb 100644
--- a/src/main/java/fucoin/actions/join/ActionJoin.java
+++ b/src/main/java/fucoin/actions/join/ActionJoin.java
@@ -12,6 +12,7 @@ public class ActionJoin extends GeneralAction {
                             UntypedActorContext context, AbstractNode node) {
         ActionJoinAnswer aja = new ActionJoinAnswer();
         aja.someNeighbors.putAll(node.getKnownNeighbors());
+        System.out.println("Answer to "+sender.path().name());
         sender.tell(aja, self);
     }
 
diff --git a/src/main/java/fucoin/gui/WalletGuiControlImpl.java b/src/main/java/fucoin/gui/WalletGuiControlImpl.java
index 3cf3fb4..518ee80 100644
--- a/src/main/java/fucoin/gui/WalletGuiControlImpl.java
+++ b/src/main/java/fucoin/gui/WalletGuiControlImpl.java
@@ -1,5 +1,6 @@
 package fucoin.gui;
 
+import akka.actor.ActorSelection;
 import fucoin.wallet.AbstractWallet;
 
 import javax.swing.*;
@@ -59,7 +60,12 @@ public class WalletGuiControlImpl implements WalletGuiControl {
         JTextField sendToNewEdt = new JTextField();
         centerup2.add(sendToNewEdt, BorderLayout.CENTER);
         JButton addNewButton = new JButton("Add");
-        addNewButton.addActionListener(e -> txtSendTo.addItem(sendToNewEdt.getText()));
+        addNewButton.addActionListener(e -> {
+            ActorSelection selection = wallet.getContext().actorSelection(sendToNewEdt.getText());
+            System.out.println(selection);
+            //selection.tell("Hallo!", self());
+            //txtSendTo.addItem();
+        });
         centerup2.add(addNewButton, BorderLayout.EAST);
         centerPanel.add(centerup2);
 
diff --git a/src/main/java/fucoin/wallet/WalletImpl.java b/src/main/java/fucoin/wallet/WalletImpl.java
index 5cb6e22..7efa22d 100644
--- a/src/main/java/fucoin/wallet/WalletImpl.java
+++ b/src/main/java/fucoin/wallet/WalletImpl.java
@@ -1,6 +1,7 @@
 package fucoin.wallet;
 
 import akka.actor.ActorRef;
+import akka.actor.ActorSelection;
 import akka.actor.Props;
 import fucoin.actions.ClientAction;
 import fucoin.actions.join.ActionJoin;
@@ -11,6 +12,8 @@ import fucoin.actions.transaction.ActionGetAmountAnswer;
 import fucoin.actions.transaction.ActionInvokeSentMoney;
 import fucoin.gui.WalletGuiControl;
 
+import javax.swing.*;
+
 public class WalletImpl extends AbstractWallet {
 
     private ActorRef preKnownNeighbour;
@@ -29,6 +32,14 @@ public class WalletImpl extends AbstractWallet {
         this.preKnownNeighbourName = preKnownNeighbourName;
         this.preKnownNeighbour = preKnownNeighbour;
         this.remoteSuperVisorActor = remoteSuperVisorActor;
+
+        if(remoteSuperVisorActor == null){
+            String path = JOptionPane.showInputDialog(null, "Enter a neighbour address: ");
+            System.out.println(path);
+            ActorSelection selection = getContext().actorSelection(path);
+            selection.tell(new ActionJoin(), self());
+            //selection.tell("Hallo!", self());
+        }
     }
 
     public static Props props(ActorRef preKnownNeighbour, String preKnownNeighbourName,
@@ -59,6 +70,10 @@ public class WalletImpl extends AbstractWallet {
             ((ClientAction) message).doAction(this);
         }
 
+        if (message instanceof ActionJoin){
+            ((ActionJoin) message).doAction(this);
+        }
+
     }
 
     @Override
-- 
GitLab