1
2
3
4 package org.mortbay.jetty.plugin.util;
5
6 import java.io.IOException;
7
8 import org.mortbay.jetty.plugin.AbstractJettyMojo;
9
10 public class ConsoleScanner extends Thread
11 {
12
13 private final AbstractJettyMojo mojo;
14
15 public ConsoleScanner(AbstractJettyMojo mojo)
16 {
17 this.mojo = mojo;
18 setName("Console scanner");
19 setDaemon(true);
20 }
21
22 public void run()
23 {
24 try
25 {
26 while (true)
27 {
28 checkSystemInput();
29 getSomeSleep();
30 }
31 }
32 catch (IOException e)
33 {
34 mojo.getLog().warn(e);
35 }
36 }
37
38 private void getSomeSleep()
39 {
40 try
41 {
42 Thread.sleep(500);
43 }
44 catch (InterruptedException e)
45 {
46 mojo.getLog().debug(e);
47 }
48 }
49
50 private void checkSystemInput() throws IOException
51 {
52 while (System.in.available() > 0) {
53 int inputByte = System.in.read();
54 if (inputByte >= 0)
55 {
56 char c = (char)inputByte;
57 if (c == '\n') {
58 restartWebApp();
59 }
60 }
61 }
62 }
63
64
65
66
67
68 private void clearInputBuffer()
69 {
70 try
71 {
72 while (System.in.available() > 0)
73 {
74
75 long available = System.in.available();
76 for (int i = 0; i < available; i++)
77 {
78 if (System.in.read() == -1)
79 {
80 break;
81 }
82 }
83 }
84 }
85 catch (IOException e)
86 {
87 mojo.getLog().warn("Error discarding console input buffer", e);
88 }
89 }
90
91 private void restartWebApp()
92 {
93 try
94 {
95 mojo.restartWebApp(false);
96
97
98 clearInputBuffer();
99 }
100 catch (Exception e)
101 {
102 mojo.getLog().error(
103 "Error reconfiguring/restarting webapp after a new line on the console",
104 e);
105 }
106 }
107 }