blob: c303bec80324e7fcf126ec0e729230b747c01fc9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
package simulator;
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 VSSimulatorCanvas simulationCanvas;
private boolean isFiltered;
private boolean isPaused;
private Pattern filterPattern;
public VSLogging() {
loggingArea = new JTextArea(0, 0);
loggingArea.setEditable(false);
loggingArea.setLineWrap(true);
loggingArea.setWrapStyleWord(true);
loggingLines = new ArrayList<StringBuffer>();
pauseLines = new ArrayList<StringBuffer>();
filterText = "";
}
public void setSimulationCanvas(VSSimulatorCanvas simulationCanvas) {
this.simulationCanvas = simulationCanvas;
}
public JTextArea getLoggingArea() {
return loggingArea;
}
public void logg(String message) {
if (simulationCanvas == null)
logg(message, 0);
else
logg(message, simulationCanvas.getTime());
}
public synchronized void logg(String message, long time) {
StringBuffer buffer = new StringBuffer();
buffer.append(VSTools.getTimeString(time));
buffer.append(": ");
buffer.append(message);
if (isPaused)
pauseLines.add(buffer);
else
loggFiltered(buffer);
}
public synchronized void isPaused(boolean isPaused) {
this.isPaused = isPaused;
if (!isPaused) {
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());
} 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("");
}
}
}
|