View Javadoc

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   * New implementation of basic tracer. This version based vaguely on Bernard's
21   * StatusTestComponent.
22   *
23   * @author tonyj
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  }