This is an automated email from the ASF dual-hosted git repository.

rmiddleton pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-chainsaw.git


The following commit(s) were added to refs/heads/master by this push:
     new 573d37e  Column names and orders seem to be correct now
573d37e is described below

commit 573d37e4da6c37faeee8b613cd5e21dc9975e57f
Author: Robert Middleton <[email protected]>
AuthorDate: Fri Jul 8 22:16:39 2022 -0400

    Column names and orders seem to be correct now
---
 .../chainsaw/ChainsawCyclicBufferTableModel.java   |  52 +++-
 .../java/org/apache/log4j/chainsaw/LogPanel.java   | 322 +++++++++++++--------
 2 files changed, 241 insertions(+), 133 deletions(-)

diff --git 
a/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java 
b/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
index 5c84ea6..6bb5dea 100644
--- 
a/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
+++ 
b/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
@@ -52,14 +52,13 @@ import 
org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 class ChainsawCyclicBufferTableModel extends AbstractTableModel
     implements EventContainer, PropertyChangeListener {
 
-    private static final int DEFAULT_CAPACITY = 5000;
     //cyclic field used internally in this class, but not exposed via the 
eventcontainer
     private boolean cyclic = true;
-    private int cyclicBufferSize;
+    private final int cyclicBufferSize;
     //original list of LoggingEventWrapper instances
-    List unfilteredList;
+    private List unfilteredList;
     //filtered list of LoggingEventWrapper instances
-    List filteredList;
+    private List filteredList;
     private boolean currentSortAscending;
     private int currentSortColumn;
     private final EventListenerList eventListenerList = new 
EventListenerList();
@@ -74,7 +73,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
 
     //because we may be using a cyclic buffer, if an ID is not provided in the 
property,
     //use and increment this row counter as the ID for each received row
-    int uniqueRow;
+    private int uniqueRow;
     private final Set uniquePropertyKeys = new HashSet();
     private Rule ruleMediator;
     private final PropertyChangeSupport propertySupport = new 
PropertyChangeSupport(this);
@@ -94,6 +93,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
     /* (non-Javadoc)
      * @see 
java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
      */
+    @Override
     public void propertyChange(PropertyChangeEvent evt) {
         if (evt.getSource() instanceof Rule) {
             if (evt.getSource() == ruleMediator && 
evt.getPropertyName().equals("findRule")) {
@@ -107,6 +107,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
         }
     }
 
+    @Override
     public List<LoggingEventWrapper> getMatchingEvents(Rule rule) {
         List<LoggingEventWrapper> list = new ArrayList<>();
         List unfilteredCopy;
@@ -125,6 +126,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
         return list;
     }
 
+    @Override
     public void reFilter() {
         final int previousSize;
         final int newSize;
@@ -187,6 +189,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
         });
     }
 
+    @Override
     public int locate(Rule rule, int startLocation, boolean searchForward) {
         List filteredListCopy;
         synchronized (mutex) {
@@ -224,6 +227,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
     /**
      * @param l
      */
+    @Override
     public void removeLoggerNameListener(LoggerNameListener l) {
         loggerNameModelDelegate.removeLoggerNameListener(l);
     }
@@ -232,16 +236,19 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
      * @param loggerName
      * @return
      */
+    @Override
     public boolean addLoggerName(String loggerName) {
         return loggerNameModelDelegate.addLoggerName(loggerName);
     }
 
+    @Override
     public String toString() {
         return "ChainsawCyclicBufferTableModel{" +
             "name='" + tableModelName + '\'' +
             '}';
     }
 
+    @Override
     public void reset() {
         loggerNameModelDelegate.reset();
     }
@@ -249,6 +256,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
     /**
      * @param l
      */
+    @Override
     public void addLoggerNameListener(LoggerNameListener l) {
         loggerNameModelDelegate.addLoggerNameListener(l);
     }
@@ -256,18 +264,22 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
     /**
      * @return
      */
+    @Override
     public Collection getLoggerNames() {
         return loggerNameModelDelegate.getLoggerNames();
     }
 
+    @Override
     public void addEventCountListener(EventCountListener listener) {
         eventListenerList.add(EventCountListener.class, listener);
     }
 
+    @Override
     public boolean isSortable(int col) {
         return true;
     }
 
+    @Override
     public void notifyCountListeners() {
         EventCountListener[] listeners = 
eventListenerList.getListeners(EventCountListener.class);
 
@@ -290,6 +302,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
      * <p>
      * In any case, the model ensures the Filtered list is made up to date in 
a separate thread.
      */
+    @Override
     public void setRuleMediator(RuleMediator ruleMediator) {
         if (this.ruleMediator != null) {
             this.ruleMediator.removePropertyChangeListener(this);
@@ -306,6 +319,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
     /* (non-Javadoc)
      * @see org.apache.log4j.chainsaw.EventContainer#sort()
      */
+    @Override
     public void sort() {
         boolean sort;
         final int filteredListSize;
@@ -331,10 +345,12 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
         }
     }
 
+    @Override
     public boolean isSortEnabled() {
         return sortEnabled;
     }
 
+    @Override
     public void sortColumn(int col, boolean ascending) {
         logger.debug("request to sort col=" + col);
         currentSortAscending = ascending;
@@ -346,6 +362,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
     /* (non-Javadoc)
      * @see org.apache.log4j.chainsaw.EventContainer#clear()
      */
+    @Override
     public void clearModel() {
         reachedCapacity = false;
 
@@ -361,13 +378,14 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
         loggerNameModelDelegate.reset();
     }
 
+    @Override
     public List getAllEvents() {
         synchronized (mutex) {
             return new ArrayList(unfilteredList);
         }
     }
 
-
+    @Override
     public List getFilteredEvents() {
 
         synchronized (mutex) {
@@ -375,12 +393,14 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
         }
     }
 
+    @Override
     public int getRowIndex(LoggingEventWrapper loggingEventWrapper) {
         synchronized (mutex) {
             return filteredList.indexOf(loggingEventWrapper);
         }
     }
 
+    @Override
     public void removePropertyFromEvents(String propName) {
         //first remove the event from any displayed events, so we can fire row 
updated event
         List filteredListCopy;
@@ -403,6 +423,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
         }
     }
 
+    @Override
     public int updateEventsWithFindRule(Rule findRule) {
         int count = 0;
         List unfilteredListCopy;
@@ -420,6 +441,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
         return count;
     }
 
+    @Override
     public int findColoredRow(int startLocation, boolean searchForward) {
         List filteredListCopy;
         synchronized (mutex) {
@@ -462,6 +484,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
         return -1;
     }
 
+    @Override
     public int getSearchMatchCount() {
         int searchMatchCount = 0;
         synchronized (mutex) {
@@ -475,14 +498,17 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
         return searchMatchCount;
     }
 
+    @Override
     public int getColumnCount() {
         return columnNames.size();
     }
 
+    @Override
     public String getColumnName(int column) {
         return columnNames.get(column);
     }
 
+    @Override
     public LoggingEventWrapper getRow(int row) {
         synchronized (mutex) {
             if (row < filteredList.size() && row > -1) {
@@ -493,12 +519,14 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
         return null;
     }
 
+    @Override
     public int getRowCount() {
         synchronized (mutex) {
             return filteredList.size();
         }
     }
 
+    @Override
     public Object getValueAt(int rowIndex, int columnIndex) {
         ChainsawLoggingEvent event = null;
 
@@ -586,6 +614,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
         return "";
     }
 
+    @Override
     public boolean isAddRow(LoggingEventWrapper loggingEventWrapper) {
         Object id = 
loggingEventWrapper.getLoggingEvent().getProperty(Constants.LOG4J_ID_KEY);
 
@@ -672,6 +701,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
         }
     }
 
+    @Override
     public void fireTableEvent(final int begin, final int end, final int 
count) {
         SwingHelper.invokeOnEDT(() -> {
             if (cyclic) {
@@ -695,6 +725,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
         });
     }
 
+    @Override
     public void fireRowUpdated(int row, boolean checkForNewColumns) {
         LoggingEventWrapper loggingEventWrapper = getRow(row);
         if (loggingEventWrapper != null) {
@@ -727,6 +758,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
     /**
      * @return
      */
+    @Override
     public int getMaxSize() {
         return cyclicBufferSize;
     }
@@ -734,6 +766,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
     /* (non-Javadoc)
      * @see 
org.apache.log4j.chainsaw.EventContainer#addNewKeyListener(org.apache.log4j.chainsaw.NewKeyListener)
      */
+    @Override
     public void addNewKeyListener(NewKeyListener l) {
         eventListenerList.add(NewKeyListener.class, l);
     }
@@ -741,6 +774,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
     /* (non-Javadoc)
      * @see 
org.apache.log4j.chainsaw.EventContainer#removeNewKeyListener(org.apache.log4j.chainsaw.NewKeyListener)
      */
+    @Override
     public void removeNewKeyListener(NewKeyListener l) {
         eventListenerList.remove(NewKeyListener.class, l);
     }
@@ -748,6 +782,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
     /* (non-Javadoc)
      * @see javax.swing.table.TableModel#isCellEditable(int, int)
      */
+    @Override
     public boolean isCellEditable(int rowIndex, int columnIndex) {
         if 
(getColumnName(columnIndex).equalsIgnoreCase(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE))
 {
             return true;
@@ -760,6 +795,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
     /* (non-Javadoc)
      * @see org.apache.log4j.chainsaw.EventContainer#setCyclic(boolean)
      */
+    @Override
     public void setCyclic(final boolean cyclic) {
         if (this.cyclic == cyclic) {
             return;
@@ -773,6 +809,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
     /* (non-Javadoc)
      * @see 
org.apache.log4j.chainsaw.EventContainer#addPropertyChangeListener(java.beans.PropertyChangeListener)
      */
+    @Override
     public void addPropertyChangeListener(PropertyChangeListener l) {
         propertySupport.addPropertyChangeListener(l);
     }
@@ -780,6 +817,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
     /* (non-Javadoc)
      * @see 
org.apache.log4j.chainsaw.EventContainer#addPropertyChangeListener(java.lang.String,
 java.beans.PropertyChangeListener)
      */
+    @Override
     public void addPropertyChangeListener(
         String propertyName, PropertyChangeListener l) {
         propertySupport.addPropertyChangeListener(propertyName, l);
@@ -788,6 +826,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
     /* (non-Javadoc)
      * @see org.apache.log4j.chainsaw.EventContainer#size()
      */
+    @Override
     public int size() {
         synchronized (mutex) {
             return unfilteredList.size();
@@ -798,6 +837,7 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
         /* (non-Javadoc)
          * @see 
java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
          */
+        @Override
         public void propertyChange(PropertyChangeEvent arg0) {
             Thread thread =
                 new Thread(
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogPanel.java 
b/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
index 13d3d05..3b4c28b 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
@@ -60,6 +60,7 @@ import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.List;
 import org.apache.commons.configuration2.AbstractConfiguration;
+import org.apache.commons.configuration2.event.ConfigurationEvent;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 import org.apache.log4j.chainsaw.logevents.Level;
 import org.apache.log4j.spi.LoggingEventFieldResolver;
@@ -181,6 +182,7 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
     private EventTimeDeltaMatchThumbnail eventTimeDeltaMatchThumbnail;
     private boolean isDetailPanelVisible;
     private ChainsawReceiver m_receiver;
+    private AbstractConfiguration m_configuration;
 
     /**
      * Creates a new LogPanel object.  If a LogPanel with this identifier has
@@ -200,6 +202,8 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
         this.logPanelPreferencesPanel = new 
LogPanelPreferencePanel(preferenceModel, applicationPreferenceModel);
         logger.debug("creating logpanel for {}", identifier);
 
+        m_configuration = 
SettingsManager.getInstance().getSettingsForReceiverTab(identifier);
+
         setLayout(new BorderLayout());
 
         String prototypeValue = "1231231231231231231231";
@@ -279,12 +283,13 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
         undockedFrame.setSize(new Dimension(1024, 768));
         undockedFrame.pack();
 
-        preferenceModel.addPropertyChangeListener(
-            "scrollToBottom",
+        m_configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
             evt -> {
-                boolean value = (Boolean) evt.getNewValue();
-                if (value) {
-                    scrollToBottom();
+                if( evt.getPropertyName().equals( "scrollToBottom" ) ){
+                    boolean value = (Boolean) evt.getPropertyValue();
+                    if (value) {
+                        scrollToBottom();
+                    }
                 }
             });
         /*
@@ -300,14 +305,14 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
             new JRadioButtonMenuItem(
                 new AbstractAction("Use ISO8601Format") {
                     public void actionPerformed(ActionEvent e) {
-                        preferenceModel.setDateFormatPattern("ISO8601");
+//                        preferenceModel.setDateFormatPattern("ISO8601");
                     }
                 });
         final JRadioButtonMenuItem simpleTimeButton =
             new JRadioButtonMenuItem(
                 new AbstractAction("Use simple time") {
                     public void actionPerformed(ActionEvent e) {
-                        preferenceModel.setDateFormatPattern("HH:mm:ss");
+//                        preferenceModel.setDateFormatPattern("HH:mm:ss");
                     }
                 });
 
@@ -321,102 +326,130 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
         final JCheckBoxMenuItem menuItemLoggerTree =
             new JCheckBoxMenuItem("Show Logger Tree");
         menuItemLoggerTree.addActionListener(
-            e -> preferenceModel.setLogTreePanelVisible(
-                menuItemLoggerTree.isSelected()));
+            e -> { m_configuration.setProperty("logpanel.logTreePanelVisible", 
+                    menuItemLoggerTree.isSelected());});
         menuItemLoggerTree.setIcon(new ImageIcon(ChainsawIcons.WINDOW_ICON));
 
         final JCheckBoxMenuItem menuItemToggleDetails =
             new JCheckBoxMenuItem("Show Detail Pane");
         menuItemToggleDetails.addActionListener(
-            e -> preferenceModel.setDetailPaneVisible(
-                menuItemToggleDetails.isSelected()));
+            e -> { m_configuration.setProperty("logpanel.detailColumnVisible",
+                menuItemToggleDetails.isSelected());});
 
         menuItemToggleDetails.setIcon(new ImageIcon(ChainsawIcons.INFO));
 
         /*
          * add preferencemodel listeners
          */
-        preferenceModel.addPropertyChangeListener("levelIcons",
-            new PropertyChangeListener() {
-                public void propertyChange(PropertyChangeEvent evt) {
-                    boolean useIcons = (Boolean) evt.getNewValue();
-                    renderer.setLevelUseIcons(useIcons);
-                    table.tableChanged(new TableModelEvent(tableModel));
-                    searchRenderer.setLevelUseIcons(useIcons);
-                    searchTable.tableChanged(new TableModelEvent(searchModel));
-                }
-            });
+//        preferenceModel.addPropertyChangeListener("levelIcons",
+//            new PropertyChangeListener() {
+//                public void propertyChange(PropertyChangeEvent evt) {
+//                    boolean useIcons = (Boolean) evt.getNewValue();
+//                    renderer.setLevelUseIcons(useIcons);
+//                    table.tableChanged(new TableModelEvent(tableModel));
+//                    searchRenderer.setLevelUseIcons(useIcons);
+//                    searchTable.tableChanged(new 
TableModelEvent(searchModel));
+//                }
+//            });
 
         /*
          * add preferencemodel listeners
          */
-        preferenceModel.addPropertyChangeListener("wrapMessage",
-            new PropertyChangeListener() {
-                public void propertyChange(PropertyChangeEvent evt) {
-                    boolean wrap = (Boolean) evt.getNewValue();
-                    renderer.setWrapMessage(wrap);
-                    table.tableChanged(new TableModelEvent(tableModel));
-                    searchRenderer.setWrapMessage(wrap);
-                    searchTable.tableChanged(new TableModelEvent(searchModel));
+        m_configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
+            new 
org.apache.commons.configuration2.event.EventListener<ConfigurationEvent>(){
+                @Override
+                public void onEvent(ConfigurationEvent evt) {
+                    if( evt.getPropertyName().equals( "logpanel.wrapMessage" ) 
){
+                        boolean wrap = (Boolean) evt.getPropertyValue();
+                        renderer.setWrapMessage(wrap);
+                        table.tableChanged(new TableModelEvent(tableModel));
+                        searchRenderer.setWrapMessage(wrap);
+                        searchTable.tableChanged(new 
TableModelEvent(searchModel));
+                    }
                 }
-            });
 
-        preferenceModel.addPropertyChangeListener("searchResultsVisible",
-            evt -> {
-                boolean displaySearchResultsInDetailsIfAvailable = (Boolean) 
evt.getNewValue();
-                if (displaySearchResultsInDetailsIfAvailable) {
-                    showSearchResults();
-                } else {
-                    hideSearchResults();
+            } );
+
+        m_configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
+            new 
org.apache.commons.configuration2.event.EventListener<ConfigurationEvent>(){
+                @Override
+                public void onEvent(ConfigurationEvent evt) {
+                    if( evt.getPropertyName().equals( 
"logpanel.searchResultsVisible" ) ){
+                        boolean displaySearchResultsInDetailsIfAvailable = 
(Boolean) evt.getPropertyValue();
+                        if (displaySearchResultsInDetailsIfAvailable) {
+                            showSearchResults();
+                        } else {
+                            hideSearchResults();
+                        }
+                    }
                 }
-            });
 
-        preferenceModel.addPropertyChangeListener("highlightSearchMatchText",
-            new PropertyChangeListener() {
-                public void propertyChange(PropertyChangeEvent evt) {
-                    boolean highlightText = (Boolean) evt.getNewValue();
-                    renderer.setHighlightSearchMatchText(highlightText);
-                    table.tableChanged(new TableModelEvent(tableModel));
-                    searchRenderer.setHighlightSearchMatchText(highlightText);
-                    searchTable.tableChanged(new TableModelEvent(searchModel));
+            } );
+
+        m_configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
+            new 
org.apache.commons.configuration2.event.EventListener<ConfigurationEvent>(){
+                @Override
+                public void onEvent(ConfigurationEvent evt) {
+                    if( evt.getPropertyName().equals( 
"logpanel.highlightSearchMatchText" ) ){
+                        boolean highlightText = (Boolean) 
evt.getPropertyValue();
+                        renderer.setHighlightSearchMatchText(highlightText);
+                        table.tableChanged(new TableModelEvent(tableModel));
+                        
searchRenderer.setHighlightSearchMatchText(highlightText);
+                        searchTable.tableChanged(new 
TableModelEvent(searchModel));
+                    }
                 }
-            });
 
-        preferenceModel.addPropertyChangeListener(
-            "detailPaneVisible",
-            evt -> {
-                boolean detailPaneVisible = (Boolean) evt.getNewValue();
+            } );
 
-                if (detailPaneVisible) {
-                    showDetailPane();
-                } else {
-                    //don't hide the detail pane if search results are being 
displayed
-                    if (!searchResultsDisplayed) {
-                        hideDetailPane();
+        m_configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
+            new 
org.apache.commons.configuration2.event.EventListener<ConfigurationEvent>(){
+                @Override
+                public void onEvent(ConfigurationEvent evt) {
+                    if( evt.getPropertyName().equals( 
"logpanel.detailPaneVisible" ) ){
+                        boolean detailPaneVisible = (Boolean) 
evt.getPropertyValue();
+                        if (detailPaneVisible) {
+                            showDetailPane();
+                        } else {
+                            //don't hide the detail pane if search results are 
being displayed
+                            if (!searchResultsDisplayed) {
+                                hideDetailPane();
+                            }
+                        }
                     }
                 }
-            });
 
-        preferenceModel.addPropertyChangeListener(
-            "logTreePanelVisible",
-            evt -> {
-                boolean newValue = (Boolean) evt.getNewValue();
+            } );
 
-                if (newValue) {
-                    showLogTreePanel();
-                } else {
-                    hideLogTreePanel();
+        m_configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
+            new 
org.apache.commons.configuration2.event.EventListener<ConfigurationEvent>(){
+                @Override
+                public void onEvent(ConfigurationEvent evt) {
+                    if( evt.getPropertyName().equals( 
"logpanel.logTreePanelVisible" ) ){
+                        boolean newValue = (Boolean) evt.getPropertyValue();
+                        if (newValue) {
+                            showLogTreePanel();
+                        } else {
+                            hideLogTreePanel();
+                        }
+                    }
                 }
-            });
 
-        preferenceModel.addPropertyChangeListener("toolTips",
-            new PropertyChangeListener() {
-                public void propertyChange(PropertyChangeEvent evt) {
-                    boolean toolTips = (Boolean) evt.getNewValue();
-                    renderer.setToolTipsVisible(toolTips);
-                    searchRenderer.setToolTipsVisible(toolTips);
+            } );
+
+        m_configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
+            new 
org.apache.commons.configuration2.event.EventListener<ConfigurationEvent>(){
+                @Override
+                public void onEvent(ConfigurationEvent evt) {
+                    if( evt.getPropertyName().equals( "logpanel.toolTips" ) ){
+                        boolean toolTips = (Boolean) evt.getPropertyValue();
+                        renderer.setToolTipsVisible(toolTips);
+                        searchRenderer.setToolTipsVisible(toolTips);
+                        searchToggleToolTips.setSelected(toolTips);
+                        mainToggleToolTips.setSelected(toolTips);
+                    }
                 }
-            });
+
+            } );
 
         preferenceModel.addPropertyChangeListener("visibleColumns",
             new PropertyChangeListener() {
@@ -483,50 +516,51 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
         preferenceModel.addPropertyChangeListener("dateFormatPattern", 
datePrefsChangeListener);
         preferenceModel.addPropertyChangeListener("dateFormatTimeZone", 
datePrefsChangeListener);
 
-        preferenceModel.addPropertyChangeListener("clearTableExpression", evt 
-> {
-            LogPanelPreferenceModel model = (LogPanelPreferenceModel) 
evt.getSource();
-            String expression = model.getClearTableExpression();
-            try {
-                clearTableExpressionRule = ExpressionRule.getRule(expression);
-                logger.info("clearTableExpressionRule set to: " + expression);
-            } catch (Exception e) {
-                logger.info("clearTableExpressionRule invalid - ignoring: " + 
expression);
-                clearTableExpressionRule = null;
-            }
-        });
-
-        preferenceModel.addPropertyChangeListener("loggerPrecision",
-            new PropertyChangeListener() {
-                public void propertyChange(PropertyChangeEvent evt) {
+        m_configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
+            evt -> {
+                if( evt.getPropertyName().equals( 
"logpanel.clearTableExpression" ) ){
                     LogPanelPreferenceModel model = (LogPanelPreferenceModel) 
evt.getSource();
-
-                    renderer.setLoggerPrecision(model.getLoggerPrecision());
-                    table.tableChanged(new TableModelEvent(tableModel));
-
-                    
searchRenderer.setLoggerPrecision(model.getLoggerPrecision());
-                    searchTable.tableChanged(new TableModelEvent(searchModel));
+                    String expression = model.getClearTableExpression();
+                    try {
+                        clearTableExpressionRule = 
ExpressionRule.getRule(expression);
+                        logger.info("clearTableExpressionRule set to: " + 
expression);
+                    } catch (Exception e) {
+                        logger.info("clearTableExpressionRule invalid - 
ignoring: " + expression);
+                        clearTableExpressionRule = null;
+                    }
                 }
             });
 
-        preferenceModel.addPropertyChangeListener("toolTips",
-            evt -> {
-                boolean value = (Boolean) evt.getNewValue();
-                searchToggleToolTips.setSelected(value);
-                mainToggleToolTips.setSelected(value);
+        m_configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
+            new 
org.apache.commons.configuration2.event.EventListener<ConfigurationEvent>(){
+                @Override
+                public void onEvent(ConfigurationEvent evt) {
+                    if( evt.getPropertyName().equals( 
"logpanel.loggerPrecision" ) ){
+                        LogPanelPreferenceModel model = 
(LogPanelPreferenceModel) evt.getSource();
+
+                        
renderer.setLoggerPrecision(model.getLoggerPrecision());
+                        table.tableChanged(new TableModelEvent(tableModel));
+
+                        
searchRenderer.setLoggerPrecision(model.getLoggerPrecision());
+                        searchTable.tableChanged(new 
TableModelEvent(searchModel));
+                    }
+                }
             });
 
-        preferenceModel.addPropertyChangeListener(
-            "logTreePanelVisible",
+        m_configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
             evt -> {
-                boolean value = (Boolean) evt.getNewValue();
-                menuItemLoggerTree.setSelected(value);
+                if( 
evt.getPropertyName().equals("logpanel.logTreePanelVisible") ){
+                    boolean value = (Boolean) evt.getPropertyValue();
+                    menuItemLoggerTree.setSelected(value);
+                }
             });
 
-        preferenceModel.addPropertyChangeListener(
-            "detailPaneVisible",
+        m_configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
             evt -> {
-                boolean value = (Boolean) evt.getNewValue();
-                menuItemToggleDetails.setSelected(value);
+                if( evt.getPropertyName().equals("logpanel.detailPaneVisible") 
){
+                    boolean value = (Boolean) evt.getPropertyValue();
+                    menuItemToggleDetails.setSelected(value);
+                }
             });
 
 //        applicationPreferenceModel.addPropertyChangeListener("searchColor", 
new PropertyChangeListener() {
@@ -1952,7 +1986,7 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
     private void loadSettings() {
         logger.info( "Loading settings for panel with identifier {}", 
identifier );
 
-        AbstractConfiguration config = 
SettingsManager.getInstance().getSettingsForReceiverTab(identifier);
+        AbstractConfiguration config = m_configuration;
         Iterator<String> iter = config.getKeys();
         while( iter.hasNext() ){
             logger.debug( "Key: {}", iter.next() );
@@ -1969,14 +2003,44 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
 
         String[] columnsOrder = config.getStringArray( "table.columns.order" );
         Integer[] columnWidths = (Integer[])config.getArray(Integer.class, 
"table.columns.widths" );
-        TableColumnModel columnModel = table.getColumnModel();
+        List<TableColumn> columns = new ArrayList<>();
         for( int index = 0; index < columnsOrder.length; index++ ){
-            logger.debug( "Loading column {}", columnsOrder[index] );
-            TableColumn column = new TableColumn(index);
-            column.setHeaderValue(columnsOrder[index]);
-            preferenceModel.addColumn(column);
-            preferenceModel.setColumnVisible(columnsOrder[index], true);
+            int columnIndex = 0;
+            for( String s : ChainsawColumns.getColumnsNames() ){
+                if( s.equals( columnsOrder[index] ) ){
+                    logger.debug( "Loading column {}.  Index of data: {}", 
columnsOrder[index], columnIndex );
+                    TableColumn column = new TableColumn(columnIndex);
+                    column.setHeaderValue(columnsOrder[index]);
+                    column.setPreferredWidth(columnWidths[index]);
+                    columns.add(column);
+                    break;
+                }
+                columnIndex++;
+            }
+  
+//            preferenceModel.addColumn(column);
+//            preferenceModel.setColumnVisible(columnsOrder[index], true);
         }
+        TableColumnModel columnModel = table.getColumnModel();
+        //remove previous columns
+        while (columnModel.getColumnCount() > 0) {
+            columnModel.removeColumn(columnModel.getColumn(0));
+        }
+        //add columns in order
+        for (TableColumn col : columns) {
+            columnModel.addColumn(col);
+        }
+
+//        TableColumnModel searchColumnModel = searchTable.getColumnModel();
+//        //remove previous columns
+//        while (searchColumnModel.getColumnCount() > 0) {
+//            searchColumnModel.removeColumn(searchColumnModel.getColumn(0));
+//        }
+//        //add visible column order columns
+//        for (Object o : preferenceModel.getVisibleColumnOrder()) {
+//            TableColumn col = (TableColumn) o;
+//            searchColumnModel.addColumn(col);
+//        }
 
         boolean isCyclic = config.getBoolean( "logpanel.cyclic" );
         tableModel.setCyclic( isCyclic );
@@ -2236,8 +2300,10 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
      * Toggle panel preference for logger tree visibility on or off
      */
     void toggleLogTreeVisible() {
-        preferenceModel.setLogTreePanelVisible(
-            !preferenceModel.isLogTreePanelVisible());
+        AbstractConfiguration config = 
SettingsManager.getInstance().getSettingsForReceiverTab(identifier);
+
+        boolean visible = config.getBoolean("logpanel.logTreePanelVisible");
+        config.setProperty("logpanel.logTreePanelVisible", !visible);
     }
 
     /**
@@ -2246,7 +2312,9 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
      * @return logger tree visibility flag
      */
     boolean isLogTreeVisible() {
-        return preferenceModel.isLogTreePanelVisible();
+        AbstractConfiguration config = 
SettingsManager.getInstance().getSettingsForReceiverTab(identifier);
+
+        return config.getBoolean("logpanel.logTreePanelVisible");
     }
 
     /**
@@ -3570,7 +3638,7 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
     }
 
     private class MarkerCellEditor implements TableCellEditor {
-        JTable currentTable;
+        JTable currentTableMarkerCell;
         JTextField textField = new JTextField();
         Set<CellEditorListener> cellEditorListeners = new HashSet<>();
         private LoggingEventWrapper currentLoggingEventWrapper;
@@ -3603,7 +3671,7 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
                 searchModel.fireRowUpdated(index, true);
             }
 
-            ChangeEvent event = new ChangeEvent(currentTable);
+            ChangeEvent event = new ChangeEvent(currentTableMarkerCell);
             Set<CellEditorListener> cellEditorListenersCopy;
             synchronized (mutex) {
                 cellEditorListenersCopy = new HashSet<>(cellEditorListeners);
@@ -3612,9 +3680,9 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
             for (Object aCellEditorListenersCopy : cellEditorListenersCopy) {
                 ((CellEditorListener) 
aCellEditorListenersCopy).editingStopped(event);
             }
-            currentTable.setRowHeight(currentRowHeight);
+            currentTableMarkerCell.setRowHeight(currentRowHeight);
             currentLoggingEventWrapper = null;
-            currentTable = null;
+            currentTableMarkerCell = null;
 
             return true;
         }
@@ -3625,13 +3693,13 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
                 cellEditorListenersCopy = new HashSet<>(cellEditorListeners);
             }
 
-            ChangeEvent event = new ChangeEvent(currentTable);
+            ChangeEvent event = new ChangeEvent(currentTableMarkerCell);
             for (Object aCellEditorListenersCopy : cellEditorListenersCopy) {
                 ((CellEditorListener) 
aCellEditorListenersCopy).editingCanceled(event);
             }
-            currentTable.setRowHeight(currentRowHeight);
+            currentTableMarkerCell.setRowHeight(currentRowHeight);
             currentLoggingEventWrapper = null;
-            currentTable = null;
+            currentTableMarkerCell = null;
         }
 
         public void addCellEditorListener(CellEditorListener l) {
@@ -3647,7 +3715,7 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
         }
 
         public Component getTableCellEditorComponent(JTable table, Object 
value, boolean isSelected, int row, int column) {
-            currentTable = table;
+            currentTableMarkerCell = table;
             currentLoggingEventWrapper = ((EventContainer) 
table.getModel()).getRow(row);
             if (currentLoggingEventWrapper != null) {
                 
textField.setText(currentLoggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE));
@@ -3733,7 +3801,7 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
                     int widthToUse = Math.max(2, (int) (delta * 
widthMaxMillisDeltaRenderRatio));
                     eventHeight = Math.min(maxEventHeight, eventHeight + 3);
 //                            eventHeight = maxEventHeight;
-                    drawEvent(applicationPreferenceModel.getDeltaColor(), 
(verticalLocation - eventHeight + 1), eventHeight, g, startX, widthToUse);
+//                    drawEvent(applicationPreferenceModel.getDeltaColor(), 
(verticalLocation - eventHeight + 1), eventHeight, g, startX, widthToUse);
                     //                System.out.println("painting error - 
rownum: " + wrapper.rowNum + ", location: " + verticalLocation + ", height: " + 
eventHeight + ", component height: " + componentHeight + ", row count: " + 
rowCount);
                 }
             }

Reply via email to