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 | |
| parent | 9157da2144f3f405875c4b3cf82280e3fe2f199e (diff) | |
Logging filter works!
| -rw-r--r-- | sources/prefs/VSDefaultPrefs.java | 2 | ||||
| -rw-r--r-- | sources/simulator/VSLogging.java | 97 | ||||
| -rw-r--r-- | sources/simulator/VSSimulation.java | 74 | ||||
| -rw-r--r-- | sources/simulator/VSSimulationPanel.java | 17 |
4 files changed, 153 insertions, 37 deletions
diff --git a/sources/prefs/VSDefaultPrefs.java b/sources/prefs/VSDefaultPrefs.java index 9f1d4cf..476d669 100644 --- a/sources/prefs/VSDefaultPrefs.java +++ b/sources/prefs/VSDefaultPrefs.java @@ -44,6 +44,7 @@ public class VSDefaultPrefs extends VSPrefs { initString("lang.time.lamport", "Lamportzeit"); initString("lang.message.sent", "Nachricht versendet"); initString("lang.logging.active", "Logging"); + initString("lang.logging.clear", "Loggs löschen"); initString("lang.message", "Nachricht"); initString("lang.message.recv", "Nachricht erhalten"); initString("lang.about", "About"); @@ -55,6 +56,7 @@ public class VSDefaultPrefs extends VSPrefs { initString("lang.colorchooser2", "Bitte Farbe auswählen"); initString("lang.default", "Defaults"); initString("lang.remove", "Entfernen"); + initString("lang.filter", "Filter"); initString("lang.edit", "Editieren"); initString("lang.editor", "Editor"); initString("lang.activate", "aktivieren"); 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(""); } } } diff --git a/sources/simulator/VSSimulation.java b/sources/simulator/VSSimulation.java index 89ffd7c..2c6de8c 100644 --- a/sources/simulator/VSSimulation.java +++ b/sources/simulator/VSSimulation.java @@ -11,20 +11,22 @@ import core.*; import utils.*; public class VSSimulation extends VSFrame implements ActionListener { + private JTextField filterTextField; + private JCheckBox filterActiveCheckBox; + private JCheckBox lamportActiveCheckBox; + private JCheckBox vectorTimeActiveCheckBox; private JMenuItem pauseItem; private JMenuItem replayItem; private JMenuItem resetItem; private JMenuItem startItem; + private JPanel processEditPanel; private JSplitPane splitPaneH; private JSplitPane splitPaneV; - private JPanel processEditPanel; - private VSSimulationPanel simulationPanel; private Thread thread; + private VSLogging logging; private VSPrefs prefs; + private VSSimulationPanel simulationPanel; private boolean hasStarted = false; - private VSLogging logging; - private JCheckBox lamportActiveCheckBox; - private JCheckBox vectorTimeActiveCheckBox; public VSSimulation (VSPrefs prefs, Component relativeTo) { super(prefs.getString("name"), relativeTo); @@ -184,16 +186,6 @@ public class VSSimulation extends VSFrame implements ActionListener { JPanel toolsPanel = new JPanel(); toolsPanel.setLayout(new BoxLayout(toolsPanel, BoxLayout.X_AXIS)); - JCheckBox loggingActiveCheckBox = new JCheckBox(prefs.getString("lang.logging.active")); - loggingActiveCheckBox.setSelected(true); - loggingActiveCheckBox.addChangeListener(new ChangeListener() { - public void stateChanged(ChangeEvent ce) { - AbstractButton abstractButton = (AbstractButton) ce.getSource(); - ButtonModel buttonModel = abstractButton.getModel(); - logging.isPaused(!buttonModel.isSelected()); - } - }); - toolsPanel.add(loggingActiveCheckBox); lamportActiveCheckBox = new JCheckBox(prefs.getString("lang.time.lamport")); lamportActiveCheckBox.setSelected(false); @@ -221,6 +213,58 @@ public class VSSimulation extends VSFrame implements ActionListener { }); toolsPanel.add(vectorTimeActiveCheckBox); + JCheckBox loggingActiveCheckBox = new JCheckBox(prefs.getString("lang.logging.active")); + loggingActiveCheckBox.setSelected(true); + loggingActiveCheckBox.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent ce) { + AbstractButton abstractButton = (AbstractButton) ce.getSource(); + ButtonModel buttonModel = abstractButton.getModel(); + logging.isPaused(!buttonModel.isSelected()); + } + }); + toolsPanel.add(loggingActiveCheckBox); + + filterActiveCheckBox = new JCheckBox(prefs.getString("lang.filter")); + filterActiveCheckBox.setSelected(false); + filterActiveCheckBox.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent ce) { + AbstractButton abstractButton = (AbstractButton) ce.getSource(); + ButtonModel buttonModel = abstractButton.getModel(); + logging.isFiltered(buttonModel.isSelected()); + if (buttonModel.isSelected()) + logging.setFilterText(filterTextField.getText()); + } + }); + toolsPanel.add(filterActiveCheckBox); + + filterTextField = new JTextField(); + filterTextField.getDocument().addDocumentListener(new DocumentListener() { + public void insertUpdate(DocumentEvent de) { + logging.setFilterText(filterTextField.getText()); + } + + public void removeUpdate(DocumentEvent de) { + logging.setFilterText(filterTextField.getText()); + } + + public void changedUpdate(DocumentEvent de) { + logging.setFilterText(filterTextField.getText()); + } + }); + toolsPanel.add(filterTextField); + + JButton clearButton = new JButton(prefs.getString("lang.logging.clear")); + clearButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent ae) { + String actionCommand = ae.getActionCommand(); + + if (actionCommand.equals(prefs.getString("lang.logging.clear"))) { + logging.clear(); + } + } + }); + toolsPanel.add(clearButton); + return toolsPanel; } diff --git a/sources/simulator/VSSimulationPanel.java b/sources/simulator/VSSimulationPanel.java index 07b5287..4159b5e 100644 --- a/sources/simulator/VSSimulationPanel.java +++ b/sources/simulator/VSSimulationPanel.java @@ -545,6 +545,7 @@ public class VSSimulationPanel extends JPanel implements Runnable, MouseMotionLi messageLines.clear(); } repaint(); + logging.clear(); } } @@ -574,11 +575,11 @@ public class VSSimulationPanel extends JPanel implements Runnable, MouseMotionLi for (VSProcess receiverProcess : processes) { if (receiverProcess.equals(sendingProcess)) { - if (recvOwn) { - deliverTime = sendingProcess.getGlobalTime(); - task = new VSTask(deliverTime, receiverProcess, message); - taskManager.addTask(task); - } + if (recvOwn) { + deliverTime = sendingProcess.getGlobalTime(); + task = new VSTask(deliverTime, receiverProcess, message); + taskManager.addTask(task); + } } else { durationTime = sendingProcess.getDurationTime(); @@ -593,9 +594,9 @@ public class VSSimulationPanel extends JPanel implements Runnable, MouseMotionLi synchronized (messageLines) { messageLines.add( - new VSMessageLine(receiverProcess, sendingProcess.getGlobalTime(), - deliverTime, outageTime, sendingProcess.getProcessID(), - receiverProcess.getProcessID())); + new VSMessageLine(receiverProcess, sendingProcess.getGlobalTime(), + deliverTime, outageTime, sendingProcess.getProcessID(), + receiverProcess.getProcessID())); } } } |
