1 package org.lsst.ccs.plugin.jas3.console;
2
3 import java.awt.Component;
4 import java.awt.Point;
5 import java.awt.event.ActionEvent;
6 import java.awt.event.ActionListener;
7 import java.io.PrintWriter;
8 import javax.swing.JMenuItem;
9 import javax.swing.JOptionPane;
10 import javax.swing.JPopupMenu;
11 import org.freehep.application.Application;
12 import org.freehep.application.mdi.PageEvent;
13 import org.freehep.application.mdi.PageListener;
14 import org.freehep.swing.popup.HasPopupItems;
15 import org.lsst.ccs.bus.BusMessage;
16 import org.lsst.ccs.bus.MessagingFactory;
17 import org.lsst.ccs.bus.StatusListener;
18
19
20
21
22
23
24
25 public class Tracer implements PageListener, StatusListener, HasPopupItems {
26 private final MessagingFactory factory;
27 private PrintWriter out;
28 private MessageFilter filter = new RegularExpressionMessageFilter();
29
30 Tracer(MessagingFactory factory) {
31 this.factory = factory;
32 }
33
34 @Override
35 public void onStatus(BusMessage bm) {
36 if (filter == null || filter.accept(bm)) out.println(bm);
37 }
38
39 @Override
40 public void pageChanged(PageEvent pe) {
41 if (pe.getID() == PageEvent.PAGECLOSED) {
42 factory.removeStatusListener(this);
43 }
44 }
45
46 void start(PrintWriter out) {
47 this.out = out;
48 factory.addStatusListener(this);
49 }
50
51 @Override
52 public JPopupMenu modifyPopupMenu(JPopupMenu menu, final Component source, Point p) {
53 JMenuItem item = new JMenuItem("Set Filter...");
54 item.addActionListener(new ActionListener()
55 {
56 @Override
57 public void actionPerformed(ActionEvent e) {
58 RegularExpressionMessageFilter regexFilter = (RegularExpressionMessageFilter) filter;
59 RegularExpressionMessageFilterPanel fp = new RegularExpressionMessageFilterPanel(regexFilter);
60 int rc = JOptionPane.showConfirmDialog(Application.getApplication(), fp, "Select Filter", JOptionPane.OK_CANCEL_OPTION);
61 if (rc == JOptionPane.OK_OPTION) {
62 fp.apply();
63 }
64 }
65
66 });
67 menu.insert(item,0);
68 return menu;
69 }
70 }