1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.jline;
20
21 import java.util.function.Consumer;
22
23 import org.apache.maven.message.MessageBuilder;
24 import org.apache.maven.message.MessageBuilderFactory;
25 import org.jline.jansi.AnsiConsole;
26 import org.jline.terminal.Terminal;
27 import org.jline.terminal.TerminalBuilder;
28
29 public class MessageUtils {
30
31 static Terminal terminal;
32 static MessageBuilderFactory messageBuilderFactory = new JLineMessageBuilderFactory();
33 static boolean colorEnabled = true;
34 static Thread shutdownHook;
35 static final Object STARTUP_SHUTDOWN_MONITOR = new Object();
36
37 public static void systemInstall(Terminal terminal) {
38 MessageUtils.terminal = terminal;
39 }
40
41 public static void systemInstall() {
42 systemInstall(null, null);
43 }
44
45 public static void systemInstall(Consumer<TerminalBuilder> builderConsumer, Consumer<Terminal> terminalConsumer) {
46 MessageUtils.terminal = new FastTerminal(
47 () -> {
48 TerminalBuilder builder = TerminalBuilder.builder()
49 .name("Maven")
50 .dumb(true)
51 .systemOutput(TerminalBuilder.SystemOutput.SysOut)
52 .color(true);
53 if (builderConsumer != null) {
54 builderConsumer.accept(builder);
55 }
56 return builder.build();
57 },
58 terminal -> {
59 AnsiConsole.setTerminal(terminal);
60 AnsiConsole.systemInstall();
61 if (terminalConsumer != null) {
62 terminalConsumer.accept(terminal);
63 }
64 });
65 }
66
67
68
69
70
71
72
73
74
75 public static void awaitTerminalInitialization() {
76 if (terminal instanceof FastTerminal) {
77 ((FastTerminal) terminal).getTerminal();
78 }
79 }
80
81 public static void registerShutdownHook() {
82 if (shutdownHook == null) {
83 shutdownHook = new Thread(() -> {
84 synchronized (MessageUtils.STARTUP_SHUTDOWN_MONITOR) {
85 MessageUtils.doSystemUninstall();
86 }
87 });
88 Runtime.getRuntime().addShutdownHook(shutdownHook);
89 }
90 }
91
92 public static void systemUninstall() {
93 doSystemUninstall();
94 if (shutdownHook != null) {
95 try {
96 Runtime.getRuntime().removeShutdownHook(shutdownHook);
97 } catch (IllegalStateException var3) {
98
99 }
100 }
101 }
102
103 private static void doSystemUninstall() {
104 try {
105 if (terminal instanceof FastTerminal) {
106
107 ((FastTerminal) terminal).getTerminal();
108 }
109 AnsiConsole.systemUninstall();
110 } finally {
111 terminal = null;
112 }
113 }
114
115 public static void setColorEnabled(boolean enabled) {
116 colorEnabled = enabled;
117 }
118
119 public static boolean isColorEnabled() {
120 return colorEnabled && terminal != null;
121 }
122
123 public static int getTerminalWidth() {
124 return terminal != null ? terminal.getWidth() : -1;
125 }
126
127 public static MessageBuilder builder() {
128 return messageBuilderFactory.builder();
129 }
130
131 public static Terminal getTerminal() {
132 return terminal;
133 }
134
135
136
137
138
139
140
141 public static String stripAnsiCodes(String msg) {
142 return msg.replaceAll("\u001B\\[[;\\d]*[ -/]*[@-~]", "");
143 }
144 }