From c4fe31d41aa6c2ae75ba77a84c86c2c959d1cc7a Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 17 May 2008 18:27:44 +0000 Subject: Logging filter works! --- sources/simulator/VSLogging.java | 97 ++++++++++++++++++++++++++++++++++------ 1 file changed, 83 insertions(+), 14 deletions(-) (limited to 'sources/simulator/VSLogging.java') diff --git a/sources/simulator/VSLogging.java b/sources/simulator/VSLogging.java index c65198b..3683c3a 100644 --- a/sources/simulator/VSLogging.java +++ b/sources/simulator/VSLogging.java @@ -1,20 +1,27 @@ package simulator; -import javax.swing.*; import java.util.*; +import java.util.regex.*; +import javax.swing.*; import utils.*; public class VSLogging { private JTextArea loggingArea; + private String filterText; + private ArrayList pauseLines; + private ArrayList loggingLines; private VSSimulationPanel simulationPanel; - private volatile boolean isPaused; - private StringBuffer pauseBuffer; + private boolean isFiltered; + private boolean isPaused; + private Pattern filterPattern; public VSLogging() { loggingArea = new JTextArea(0, 0); loggingArea.setEditable(false); - pauseBuffer = new StringBuffer(); + loggingLines = new ArrayList(); + pauseLines = new ArrayList(); + filterText = ""; } public void setSimulationPanel(VSSimulationPanel simulationPanel) { @@ -32,26 +39,88 @@ public class VSLogging { logg(message, simulationPanel.getTime()); } - public void logg(String message, long time) { + public synchronized void logg(String message, long time) { + StringBuffer buffer = new StringBuffer(); + buffer.append(VSTools.getTimeString(time)); + buffer.append(": "); + buffer.append(message); + if (isPaused) { - pauseBuffer.append(VSTools.getTimeString(time)); - pauseBuffer.append(": "); - pauseBuffer.append(message); - pauseBuffer.append("\n"); + pauseLines.add(buffer); + loggingLines.add(buffer); + loggingArea.append(buffer.toString()+"\n"); + loggingArea.setCaretPosition(loggingArea.getDocument().getLength()); } else { - loggingArea.append(VSTools.getTimeString(time) + ": " + message + "\n"); - loggingArea.setCaretPosition(loggingArea.getDocument().getLength()); + loggFiltered(buffer); } } - public void isPaused(boolean isPaused) { + public synchronized void isPaused(boolean isPaused) { this.isPaused = isPaused; if (!isPaused) { - loggingArea.append(pauseBuffer.toString()); + for (StringBuffer buffer : pauseLines) + loggFiltered(buffer); + + pauseLines.clear(); + } + } + + private void loggFiltered(StringBuffer buffer) { + loggingLines.add(buffer); + if (!isFiltered) { + loggingArea.append(buffer.toString()+"\n"); loggingArea.setCaretPosition(loggingArea.getDocument().getLength()); - pauseBuffer.delete(0, pauseBuffer.length()); + + } else if (filterPattern != null && filterPattern.matcher(buffer).find()) { + loggingArea.append(buffer.toString()+"\n"); + loggingArea.setCaretPosition(loggingArea.getDocument().getLength()); + } + } + + public synchronized void isFiltered(boolean isFiltered) { + this.isFiltered = isFiltered; + + if (!isFiltered) + setFilterText(""); + else + filter(); + } + + public synchronized void setFilterText(String filterText) { + this.filterText = filterText; + filter(); + } + + public synchronized void clear() { + loggingLines.clear(); + pauseLines.clear(); + loggingArea.setText(""); + } + + private void filter() { + try { + filterPattern = Pattern.compile(filterText); + StringBuffer buffer = new StringBuffer(); + + for (StringBuffer line : loggingLines) { + if (isFiltered) { + Matcher matcher = filterPattern.matcher(line); + if (matcher.find()) { + buffer.append(line); + buffer.append("\n"); + } + } else { + buffer.append(line); + buffer.append("\n"); + } + } + loggingArea.setText(buffer.toString()); + + } catch (Exception e) { + filterPattern = null; + loggingArea.setText(""); } } } -- cgit v1.2.3