From 9886bd32a0b6e8be203c4608aec964af53d3f7b8 Mon Sep 17 00:00:00 2001
From: Luca Keidel <info@lucakeidel.de>
Date: Sat, 18 Jun 2016 13:43:24 +0200
Subject: [PATCH] Improved logging model performance

---
 .../java/fucoin/gui/FilteredLogModel.java     | 21 +++++++++++++------
 .../fucoin/gui/SuperVisorGuiControlImpl.java  |  2 --
 2 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/src/main/java/fucoin/gui/FilteredLogModel.java b/src/main/java/fucoin/gui/FilteredLogModel.java
index 501c883..225e008 100644
--- a/src/main/java/fucoin/gui/FilteredLogModel.java
+++ b/src/main/java/fucoin/gui/FilteredLogModel.java
@@ -14,8 +14,7 @@ public class FilteredLogModel extends AbstractListModel<LogMessage> {
 
     public FilteredLogModel() {
         super();
-        this.
-                log = new ArrayList<>();
+        this.log = new ArrayList<>();
         filteredLog = new ArrayList<>();
     }
 
@@ -32,9 +31,7 @@ public class FilteredLogModel extends AbstractListModel<LogMessage> {
     private void refilter() {
         filteredLog.clear();
         for (LogMessage msg : log) {
-            if (!filterTransactions
-                    || (msg.getContext() == LogMessage.Context.TRANSACTION_SUCCESS
-                    || msg.getContext() == LogMessage.Context.TRANSACTION_FAIL)) {
+            if (matchesFilter(msg)) {
                 filteredLog.add(msg);
 
             }
@@ -42,6 +39,12 @@ public class FilteredLogModel extends AbstractListModel<LogMessage> {
         fireContentsChanged(this, 0, getSize()-1);
     }
 
+    private boolean matchesFilter(LogMessage msg){
+        return !filterTransactions
+                || (msg.getContext() == LogMessage.Context.TRANSACTION_SUCCESS
+                || msg.getContext() == LogMessage.Context.TRANSACTION_FAIL);
+    }
+
     @Override
     public int getSize() {
         return filteredLog.size();
@@ -54,7 +57,13 @@ public class FilteredLogModel extends AbstractListModel<LogMessage> {
 
 
     public void addElement(LogMessage message) {
+
         log.add(message);
-        refilter();
+
+        if(matchesFilter(message)){
+            filteredLog.add(message);
+            int index = getSize() - 1;
+            fireIntervalAdded(this, index, index);
+        }
     }
 }
diff --git a/src/main/java/fucoin/gui/SuperVisorGuiControlImpl.java b/src/main/java/fucoin/gui/SuperVisorGuiControlImpl.java
index 91efa95..cb4aaf2 100644
--- a/src/main/java/fucoin/gui/SuperVisorGuiControlImpl.java
+++ b/src/main/java/fucoin/gui/SuperVisorGuiControlImpl.java
@@ -7,8 +7,6 @@ import java.awt.*;
 import java.awt.event.ItemEvent;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
 
 public class SuperVisorGuiControlImpl implements SuperVisorGuiControl {
     private SuperVisorImpl superVisor;
-- 
GitLab