summaryrefslogtreecommitdiff
path: root/sources/simulator/VSLogging.java
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2008-05-17 18:27:44 +0000
committerPaul Buetow <paul@buetow.org>2008-05-17 18:27:44 +0000
commitc4fe31d41aa6c2ae75ba77a84c86c2c959d1cc7a (patch)
tree3bf57e1223d6d891b80ba741152ec9c8868a3eca /sources/simulator/VSLogging.java
parent9157da2144f3f405875c4b3cf82280e3fe2f199e (diff)
Logging filter works!
Diffstat (limited to 'sources/simulator/VSLogging.java')
-rw-r--r--sources/simulator/VSLogging.java97
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("");
}
}
}