View Javadoc

1   package org.lsst.ccs.plugin.jas3.console;
2   
3   import java.io.IOException;
4   import java.io.PrintWriter;
5   import java.net.URL;
6   import org.lsst.ccs.utilities.logging.Logger;
7   import org.freehep.application.studio.Plugin;
8   import org.freehep.application.studio.Studio;
9   import org.freehep.jas.plugin.console.Console;
10  import org.freehep.jas.plugin.console.ConsoleOutputStream;
11  import org.freehep.jas.plugin.console.ConsoleService;
12  import org.freehep.util.FreeHEPLookup;
13  import org.freehep.util.commanddispatcher.CommandProcessor;
14  import org.freehep.xml.menus.XMLMenuBuilder;
15  import org.lsst.ccs.HardwareException;
16  import org.lsst.ccs.bus.BusMessagingLayer;
17  import org.lsst.ccs.bus.MessagingFactory;
18  import org.xml.sax.SAXException;
19  
20  /**
21   * This plugin deals with creating LSST CCS tracers and consoles.
22   * @author tonyj
23   */
24  public class LsstConsolePlugin extends Plugin {
25  
26      private String defaultConsoleName = "LSST Console";
27      private String defaultTracerName = "LSST Tracer";
28      private MessagingFactory messagingFactory;
29      private Logger logger = Logger.getLogger("org.lsst.ccs.ui");
30  
31      @Override
32      protected void init() throws SAXException, IOException {
33  
34          Studio studio = getApplication();
35          FreeHEPLookup lookup = studio.getLookup();
36          lookup.add(this);
37  
38          studio.getCommandTargetManager().add(new ConsoleCommands());
39  
40          XMLMenuBuilder builder = studio.getXMLMenuBuilder();
41          URL xml = getClass().getResource("LsstConsolePlugin.menus");
42          builder.build(xml);
43      }
44  
45      @Override
46      protected void postInit() {
47          super.postInit();
48          messagingFactory = MessagingFactory.getInstance().forSubsystem(BusMessagingLayer.ANONYMOUS_AGENT);
49          messagingFactory.addStatusListener(new AlarmListener(getApplication()));
50      }
51      
52     
53      private Console createCommandConsole(String name) {
54          Studio studio = getApplication();
55          try {
56              FreeHEPLookup lookup = studio.getLookup();
57              ConsoleService cs = (ConsoleService) lookup.lookup(ConsoleService.class);
58              if (cs != null) {
59                  Console console = cs.createConsole(name, null);
60                  final CommandConsole command = new CommandConsole(console);
61                  Thread t = new Thread("ConsoleInput-" + name) {
62                      @Override
63                      public void run() {
64                          try {
65                              command.start();
66                              // This will not return until the console is closed
67                              // and the CommandConsole has been shutdown
68                              command.runConsole();
69                          } catch (HardwareException ex) {
70                              logger.severe("Problems initializing the JAS3 Console", ex);
71                              throw new RuntimeException(ex);
72                          }
73                      }
74                  };
75                  t.start();
76                  return console;
77              }
78          } catch (Exception e) {
79              studio.error("Failed to start Console: " + name, e);
80          }
81          return null;
82      }
83  
84      private Console createTracerConsole(String name) {
85          FreeHEPLookup lookup = getApplication().getLookup();
86          ConsoleService cs = (ConsoleService) lookup.lookup(ConsoleService.class);
87          if (cs != null) {
88              Tracer tracer = new Tracer(messagingFactory);
89              Console console = cs.createConsole(name, null, tracer);
90              ConsoleOutputStream out = console.getOutputStream(null);
91              PrintWriter pw = new PrintWriter(out, true);
92              cs.getPageContextForConsole(console).addPageListener(tracer);
93              tracer.start(pw); // This returns immediately
94              return console;
95          }
96          return null;
97      }
98  
99      public class ConsoleCommands extends CommandProcessor {
100 
101         public void onLsstConsole() {
102             createCommandConsole(defaultConsoleName);
103         }
104 
105         public void onLsstTracer() {
106             createTracerConsole(defaultTracerName);
107         }
108     }
109 }