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
22
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
67
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);
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 }