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