diff options
| author | Paul Buetow <paul@buetow.org> | 2008-05-17 18:27:44 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2008-05-17 18:27:44 +0000 |
| commit | c4fe31d41aa6c2ae75ba77a84c86c2c959d1cc7a (patch) | |
| tree | 3bf57e1223d6d891b80ba741152ec9c8868a3eca /sources/simulator/VSLogging.java | |
| parent | 9157da2144f3f405875c4b3cf82280e3fe2f199e (diff) | |
Logging filter works!
Diffstat (limited to 'sources/simulator/VSLogging.java')
| -rw-r--r-- | sources/simulator/VSLogging.java | 97 |
1 files changed, 83 insertions, 14 deletions
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<StringBuffer> pauseLines; + private ArrayList<StringBuffer> 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<StringBuffer>(); + pauseLines = new ArrayList<StringBuffer>(); + 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(""); } } } |
