1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.shared.utils.logging;
20
21 import org.fusesource.jansi.Ansi;
22 import org.fusesource.jansi.AnsiConsole;
23 import org.fusesource.jansi.AnsiMode;
24
25
26
27
28
29
30
31
32
33 public class MessageUtils {
34 private static final boolean JANSI;
35
36
37 private static Thread shutdownHook;
38
39
40 private static final Object STARTUP_SHUTDOWN_MONITOR = new Object();
41
42 static {
43 boolean jansi = true;
44 try {
45
46 Class.forName("org.fusesource.jansi.Ansi");
47 } catch (ClassNotFoundException cnfe) {
48 jansi = false;
49 }
50 JANSI = jansi;
51 }
52
53
54
55
56
57 public static void systemInstall() {
58 if (JANSI) {
59 AnsiConsole.systemInstall();
60 }
61 }
62
63
64
65
66
67
68 public static void systemUninstall() {
69 synchronized (STARTUP_SHUTDOWN_MONITOR) {
70 doSystemUninstall();
71
72
73 if (shutdownHook != null) {
74 try {
75 Runtime.getRuntime().removeShutdownHook(shutdownHook);
76 } catch (IllegalStateException ex) {
77
78 }
79 }
80 }
81 }
82
83 private static void doSystemUninstall() {
84 if (JANSI) {
85 AnsiConsole.systemUninstall();
86 }
87 }
88
89
90
91
92
93 public static void setColorEnabled(boolean flag) {
94 if (JANSI) {
95 AnsiConsole.out().setMode(flag ? AnsiMode.Force : AnsiMode.Strip);
96 Ansi.setEnabled(flag);
97 System.setProperty(
98 AnsiConsole.JANSI_MODE, flag ? AnsiConsole.JANSI_MODE_FORCE : AnsiConsole.JANSI_MODE_STRIP);
99 boolean installed = AnsiConsole.isInstalled();
100 while (AnsiConsole.isInstalled()) {
101 AnsiConsole.systemUninstall();
102 }
103 if (installed) {
104 AnsiConsole.systemInstall();
105 }
106 }
107 }
108
109
110
111
112
113 public static boolean isColorEnabled() {
114 return JANSI ? Ansi.isEnabled() : false;
115 }
116
117
118
119
120
121 public static MessageBuilder buffer() {
122 return JANSI ? new AnsiMessageBuilder() : new PlainMessageBuilder();
123 }
124
125
126
127
128
129
130 public static MessageBuilder buffer(StringBuilder builder) {
131 return JANSI ? new AnsiMessageBuilder(builder) : new PlainMessageBuilder(builder);
132 }
133
134
135
136
137
138
139 public static MessageBuilder buffer(int size) {
140 return JANSI ? new AnsiMessageBuilder(size) : new PlainMessageBuilder(size);
141 }
142
143
144
145
146
147
148 @SuppressWarnings("checkstyle:magicnumber")
149 public static LoggerLevelRenderer level() {
150 return JANSI ? new AnsiMessageBuilder(20) : new PlainMessageBuilder(7);
151 }
152
153
154
155
156
157
158 public static String stripAnsiCodes(String msg) {
159 return msg.replaceAll("\u001B\\[[;\\d]*[ -/]*[@-~]", "");
160 }
161
162
163
164
165
166
167
168
169
170
171 public static void registerShutdownHook() {
172 if (JANSI && shutdownHook == null) {
173
174 shutdownHook = new Thread() {
175 @Override
176 public void run() {
177 synchronized (STARTUP_SHUTDOWN_MONITOR) {
178 while (AnsiConsole.isInstalled()) {
179 doSystemUninstall();
180 }
181 }
182 }
183 };
184 Runtime.getRuntime().addShutdownHook(shutdownHook);
185 }
186 }
187
188
189
190
191
192
193 public static int getTerminalWidth() {
194 if (JANSI) {
195 int width = AnsiConsole.getTerminalWidth();
196 return width > 0 ? width : -1;
197 } else {
198 return -1;
199 }
200 }
201 }