1 package org.lsst.ccs.plugin.jas3.tutorial;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStreamReader;
6 import java.io.PrintWriter;
7 import java.util.Timer;
8 import java.util.TimerTask;
9 import java.util.logging.Level;
10 import java.util.logging.Logger;
11 import org.freehep.application.mdi.PageEvent;
12 import org.freehep.application.mdi.PageListener;
13 import org.freehep.application.studio.Studio;
14 import org.freehep.jas.plugin.console.Console;
15 import org.freehep.jas.plugin.console.ConsoleInputStream;
16 import org.freehep.jas.plugin.console.ConsoleOutputStream;
17 import org.freehep.jas.plugin.console.ConsoleService;
18
19
20
21
22
23
24
25 class TutorialConsole {
26
27 private static final Logger logger = Logger.getLogger(TutorialPlugin.class.getName());
28 private final Studio studio;
29
30 TutorialConsole(Studio studio) {
31 this.studio = studio;
32 }
33
34 void createOutputConsole() {
35
36
37 ConsoleService consoleService = (ConsoleService) studio.getLookup().lookup(ConsoleService.class);
38
39
40 if (consoleService != null) {
41 Console console = consoleService.createConsole("Output Console", null);
42 sendOutputToConsole(console, consoleService);
43 }
44 }
45
46 void createInputConsole() {
47
48
49 ConsoleService consoleService = (ConsoleService) studio.getLookup().lookup(ConsoleService.class);
50
51
52 if (consoleService != null) {
53
54 final Console console = consoleService.createConsole("Input Console", null);
55 readInputFromConsole(console);
56 }
57 }
58
59 void createInputOutputConsole() {
60
61
62 ConsoleService consoleService = (ConsoleService) studio.getLookup().lookup(ConsoleService.class);
63
64
65 if (consoleService != null) {
66 final Console console = consoleService.createConsole("Input/Output Console", null);
67 sendOutputToConsole(console, consoleService);
68 readInputFromConsole(console);
69 }
70 }
71
72 private void sendOutputToConsole(Console console, ConsoleService consoleService) {
73
74
75
76 final ConsoleOutputStream consoleOutputStream = console.getOutputStream(null);
77 final PrintWriter pw = new PrintWriter(consoleOutputStream, true);
78
79 Timer timer = new Timer();
80 final TimerTask timerTask = new TimerTask() {
81 private int tick = 0;
82
83 @Override
84 public void run() {
85 tick++;
86 pw.printf("tick %d\n", tick);
87
88
89 logger.info(String.format("tick %d\n", tick));
90 }
91 };
92 timer.scheduleAtFixedRate(timerTask, 1000, 1000);
93
94
95
96 consoleService.getPageContextForConsole(console).addPageListener(new PageListener() {
97 @Override
98 public void pageChanged(PageEvent pe) {
99 if (pe.getID() == PageEvent.PAGECLOSED) {
100 timerTask.cancel();
101 logger.info("Console closed, timertask canceled");
102 }
103 }
104 });
105 }
106
107 private void readInputFromConsole(final Console console) {
108
109 String initialPrompt = "CCS> ";
110 final ConsoleInputStream inputStream = console.getInputStream(initialPrompt);
111
112 Thread thread = new Thread() {
113 @Override
114 public void run() {
115 try {
116 BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
117 for (;;) {
118 String line = in.readLine();
119 if (line == null) {
120
121 break;
122 }
123 if ("exit".equals(line)) {
124
125
126
127 console.close();
128 } else if (line.startsWith("setPrompt")) {
129 String newPrompt = line.substring(10);
130 inputStream.setOneTimePrompt(newPrompt);
131 } else if (line.startsWith("changePrompt")) {
132 String newPrompt = line.substring(13);
133 inputStream.setPrompt(newPrompt);
134 }
135 logger.log(Level.INFO, "Read line: {0}", line);
136 }
137 logger.info("Exiting since console has been closed");
138 } catch (IOException ex) {
139 logger.log(Level.SEVERE, "Error reading from console", ex);
140 }
141 }
142 };
143 thread.start();
144 }
145 }