From a138bfc0285da01b0f8aedeea644db59663376f3 Mon Sep 17 00:00:00 2001 From: Luca Keidel <info@lucakeidel.de> Date: Wed, 15 Jun 2016 19:10:44 +0200 Subject: [PATCH] Implemented colors for log messages and a log message for failed transactions --- .DS_Store | Bin 0 -> 6148 bytes ...ionCommitDistributedCommittedTransfer.java | 11 ++++-- ...ionInvokeDistributedCommittedTransfer.java | 2 +- ...areDistributedCommittedTransferAnswer.java | 1 + src/main/java/fucoin/gui/LogCellRenderer.java | 33 ++++++++++++++++++ src/main/java/fucoin/gui/LogMessage.java | 18 +++++++--- .../java/fucoin/gui/WalletGuiControl.java | 4 ++- .../java/fucoin/gui/WalletGuiControlImpl.java | 16 ++++++--- .../DistributedCommittedTransferRequest.java | 11 +++++- .../java/fucoin/wallet/AbstractWallet.java | 11 ++++-- src/main/java/fucoin/wallet/WalletImpl.java | 16 ++++++--- 11 files changed, 102 insertions(+), 21 deletions(-) create mode 100644 .DS_Store create mode 100644 src/main/java/fucoin/gui/LogCellRenderer.java diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**<q8>++&mCkOWA81W14cNZ<zv;LbK1Poaz?KmsK2CSc!( z0ynLxE!0092;Krf2c+FF_Fe*7ECH>lEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0<F0fCPF1$Cyrb|F7^5{eNG?83~ZUUlGt@xh*qZDeu<Z%US-OSsOPv j)R!Z4KLME7ReXlK;d!wEw5GODWMKRea10D2@KpjYNUI8I literal 0 HcmV?d00001 diff --git a/src/main/java/fucoin/actions/transaction/ActionCommitDistributedCommittedTransfer.java b/src/main/java/fucoin/actions/transaction/ActionCommitDistributedCommittedTransfer.java index 92df3ff..085dd2a 100644 --- a/src/main/java/fucoin/actions/transaction/ActionCommitDistributedCommittedTransfer.java +++ b/src/main/java/fucoin/actions/transaction/ActionCommitDistributedCommittedTransfer.java @@ -30,7 +30,7 @@ public class ActionCommitDistributedCommittedTransfer extends ClientAction { DistributedCommittedTransferRequest outdatedRequest) { this.source = outdatedRequest.getSource(); this.target = outdatedRequest.getTarget(); - this.amount = 0; + this.amount = outdatedRequest.getAmount(); this.granted = false; this.timestamp = outdatedRequest.getTimeout(); this.id = outdatedRequest.getId(); @@ -49,14 +49,19 @@ public class ActionCommitDistributedCommittedTransfer extends ClientAction { if (source.compareTo(self) == 0) { wallet.setAmount(wallet.getAmount() - amount); - wallet.logTransaction("Sent " + amount + " FUC to " + target.path().name()); + wallet.logTransactionSuccess("Sent " + amount + " FUC to " + target.path().name()); } else if (target.compareTo(self) == 0) { wallet.setAmount(wallet.getAmount() + amount); - wallet.logTransaction("Received " + amount + " FUC from " + source.path().name()); + wallet.logTransactionSuccess("Received " + amount + " FUC from " + source.path().name()); } } else { wallet.log("abort transaction with id" + id); + + if (source.compareTo(self) == 0){ + wallet.logTransactionFail("Failed to send "+amount+" FUC to "+target.path().name()+" (Commit has not been granted)"); + } + } wallet.log("wallet.amounts:" + wallet.amounts); } diff --git a/src/main/java/fucoin/actions/transaction/ActionInvokeDistributedCommittedTransfer.java b/src/main/java/fucoin/actions/transaction/ActionInvokeDistributedCommittedTransfer.java index b754ec9..f3bf02d 100644 --- a/src/main/java/fucoin/actions/transaction/ActionInvokeDistributedCommittedTransfer.java +++ b/src/main/java/fucoin/actions/transaction/ActionInvokeDistributedCommittedTransfer.java @@ -27,7 +27,7 @@ public class ActionInvokeDistributedCommittedTransfer extends CoordinatorTransac long timeout = System.currentTimeMillis() + 500; - DistributedCommittedTransferRequest ds = new DistributedCommittedTransferRequest(source, target, timeout); + DistributedCommittedTransferRequest ds = new DistributedCommittedTransferRequest(source, target, amount, timeout); superVisor.addDistributedCommitedTransferRequest(ds); ActionPrepareDistributedCommittedTransfer apdct = new ActionPrepareDistributedCommittedTransfer(source, target, amount, timeout, ds.getId()); for (ActorRef neighbor : superVisor.getKnownNeighbors().values()) { diff --git a/src/main/java/fucoin/actions/transaction/ActionPrepareDistributedCommittedTransferAnswer.java b/src/main/java/fucoin/actions/transaction/ActionPrepareDistributedCommittedTransferAnswer.java index 7fc3c79..a408f4f 100644 --- a/src/main/java/fucoin/actions/transaction/ActionPrepareDistributedCommittedTransferAnswer.java +++ b/src/main/java/fucoin/actions/transaction/ActionPrepareDistributedCommittedTransferAnswer.java @@ -45,6 +45,7 @@ public class ActionPrepareDistributedCommittedTransferAnswer extends Coordinator }else{ //A client wants to rollback if(request!=null){ + superVisor.log("Client does not grant commit of "+amount+" FUC ("+source.path().name()+" -> "+target.path().name()+")"); ActionCommitDistributedCommittedTransfer acdct = new ActionCommitDistributedCommittedTransfer(source,target,amount,false,timestamp,id); for(ActorRef neighbor : request.getAnswers()){ neighbor.tell(acdct, self); diff --git a/src/main/java/fucoin/gui/LogCellRenderer.java b/src/main/java/fucoin/gui/LogCellRenderer.java new file mode 100644 index 0000000..1c774a4 --- /dev/null +++ b/src/main/java/fucoin/gui/LogCellRenderer.java @@ -0,0 +1,33 @@ +package fucoin.gui; + +import javax.swing.*; +import java.awt.*; + +public class LogCellRenderer extends DefaultListCellRenderer { + + private static final Color SUCCESS_COLOR = new Color(92, 184, 92); + private static final Color FAIL_COLOR = new Color(217, 83, 79); + + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + + if (value instanceof LogMessage) { + LogMessage msg = (LogMessage) value; + + switch (msg.getContext()) { + + case TRANSACTION_SUCCESS: + setForeground(SUCCESS_COLOR); + break; + case TRANSACTION_FAIL: + setForeground(FAIL_COLOR); + break; + case DEBUG: + break; + } + } + + return this; + } +} diff --git a/src/main/java/fucoin/gui/LogMessage.java b/src/main/java/fucoin/gui/LogMessage.java index 8c93133..34b3000 100644 --- a/src/main/java/fucoin/gui/LogMessage.java +++ b/src/main/java/fucoin/gui/LogMessage.java @@ -3,20 +3,28 @@ package fucoin.gui; public class LogMessage { + public enum Context { + TRANSACTION_SUCCESS, TRANSACTION_FAIL, DEBUG + }; + private String message; - private boolean transactionRelated; + private Context context; + + public LogMessage(String message){ + this(message, Context.DEBUG); + } - public LogMessage(String message, boolean transactionRelated) { + public LogMessage(String message, Context context) { this.message = message; - this.transactionRelated = transactionRelated; + this.context = context; } public String getMessage() { return message; } - public boolean isTransactionRelated() { - return transactionRelated; + public Context getContext() { + return context; } @Override diff --git a/src/main/java/fucoin/gui/WalletGuiControl.java b/src/main/java/fucoin/gui/WalletGuiControl.java index d19b454..480ba08 100644 --- a/src/main/java/fucoin/gui/WalletGuiControl.java +++ b/src/main/java/fucoin/gui/WalletGuiControl.java @@ -10,5 +10,7 @@ public interface WalletGuiControl { void addLogMsg(String msg); - void addTransactionLogMessage(String message); + void addTransactionLogMessageSuccess(String message); + + void addTransactionLogMessageFail(String message); } diff --git a/src/main/java/fucoin/gui/WalletGuiControlImpl.java b/src/main/java/fucoin/gui/WalletGuiControlImpl.java index 5c03f89..2e93631 100644 --- a/src/main/java/fucoin/gui/WalletGuiControlImpl.java +++ b/src/main/java/fucoin/gui/WalletGuiControlImpl.java @@ -132,6 +132,8 @@ public class WalletGuiControlImpl implements WalletGuiControl { }); + txtLog.setCellRenderer(new LogCellRenderer()); + btnExit.addActionListener(e -> window.dispose()); window.addWindowListener(new WindowAdapter() { @@ -171,12 +173,17 @@ public class WalletGuiControlImpl implements WalletGuiControl { @Override public void addLogMsg(String msg) { - log(new LogMessage(msg, false)); + log(new LogMessage(msg)); + } + + @Override + public void addTransactionLogMessageSuccess(String message) { + log(new LogMessage(message, LogMessage.Context.TRANSACTION_SUCCESS)); } @Override - public void addTransactionLogMessage(String message) { - log(new LogMessage(message, true)); + public void addTransactionLogMessageFail(String message) { + log(new LogMessage(message, LogMessage.Context.TRANSACTION_FAIL)); } private void log(LogMessage logMessage) { @@ -198,7 +205,8 @@ public class WalletGuiControlImpl implements WalletGuiControl { Enumeration<LogMessage> elements = log.elements(); while (elements.hasMoreElements()) { LogMessage logMessage = elements.nextElement(); - if (logMessage.isTransactionRelated()) { + LogMessage.Context context = logMessage.getContext(); + if (context == LogMessage.Context.TRANSACTION_FAIL || context == LogMessage.Context.TRANSACTION_SUCCESS) { filteredLog.addElement(logMessage); } } diff --git a/src/main/java/fucoin/supervisor/DistributedCommittedTransferRequest.java b/src/main/java/fucoin/supervisor/DistributedCommittedTransferRequest.java index 920db36..a395849 100644 --- a/src/main/java/fucoin/supervisor/DistributedCommittedTransferRequest.java +++ b/src/main/java/fucoin/supervisor/DistributedCommittedTransferRequest.java @@ -13,14 +13,19 @@ public class DistributedCommittedTransferRequest extends Transaction { private final static Random random = new Random(System.currentTimeMillis() + System.nanoTime()); private ActorRef source; private ActorRef target; + private int amount; + private long timeout; private long id; + private List<ActorRef> answers = new LinkedList<>(); - public DistributedCommittedTransferRequest(ActorRef source, ActorRef target, + public DistributedCommittedTransferRequest(ActorRef source, ActorRef target, int amount, long timeout) { this.source = source; this.target = target; + this.amount = amount; + this.timeout = timeout; this.id = random.nextLong(); } @@ -55,4 +60,8 @@ public class DistributedCommittedTransferRequest extends Transaction { public long getId() { return id; } + + public int getAmount(){ + return amount; + } } diff --git a/src/main/java/fucoin/wallet/AbstractWallet.java b/src/main/java/fucoin/wallet/AbstractWallet.java index 100d472..2c7381e 100644 --- a/src/main/java/fucoin/wallet/AbstractWallet.java +++ b/src/main/java/fucoin/wallet/AbstractWallet.java @@ -94,11 +94,18 @@ public abstract class AbstractWallet extends AbstractNode implements Serializabl public abstract void setRemoteSuperVisorActor(ActorRef remoteSuperVisorActor); /** - * Appends a transaction related message to the log + * Appends a message related to a successful transaction to the log * * @param msg */ - public abstract void logTransaction(String msg); + public abstract void logTransactionSuccess(String msg); + + /** + * Appends a message related to a successful transaction to the log + * + * @param msg + */ + public abstract void logTransactionFail(String msg); /** * Sends amount FUCs to the wallet with the address adress diff --git a/src/main/java/fucoin/wallet/WalletImpl.java b/src/main/java/fucoin/wallet/WalletImpl.java index c694583..60ae569 100644 --- a/src/main/java/fucoin/wallet/WalletImpl.java +++ b/src/main/java/fucoin/wallet/WalletImpl.java @@ -1,9 +1,7 @@ package fucoin.wallet; import akka.actor.ActorRef; -import akka.actor.ActorSelection; import akka.actor.Props; -import akka.util.Timeout; import fucoin.actions.ClientAction; import fucoin.actions.join.ActionJoin; import fucoin.actions.join.ActionJoinAnswer; @@ -200,9 +198,19 @@ public class WalletImpl extends AbstractWallet { @Override - public void logTransaction(String msg) { + public void logTransactionSuccess(String msg) { if (gui != null) { - gui.addTransactionLogMessage(msg); + gui.addTransactionLogMessageSuccess(msg); + } else { + System.out.println(msg); + } + } + + + @Override + public void logTransactionFail(String msg) { + if (gui != null) { + gui.addTransactionLogMessageFail(msg); } else { System.out.println(msg); } -- GitLab