1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.apache.maven.api.services;
20
21 import org.apache.maven.api.annotations.Nonnull;
22
23 /**
24 * Message builder that supports configurable styling.
25 *
26 * @since 4.0.0
27 * @see MessageBuilderFactory
28 */
29 public interface MessageBuilder extends Appendable {
30
31 /**
32 * Append message content in trace style.
33 * By default, bold magenta
34 *
35 * @param message the message to append
36 * @return the current builder
37 */
38 @Nonnull
39 default MessageBuilder trace(Object message) {
40 return style(".trace:-bold,f:magenta", message);
41 }
42
43 /**
44 * Append message content in debug style.
45 * By default, bold cyan
46 *
47 * @param message the message to append
48 * @return the current builder
49 */
50 @Nonnull
51 default MessageBuilder debug(Object message) {
52 return style(".debug:-bold,f:cyan", message);
53 }
54
55 /**
56 * Append message content in info style.
57 * By default, bold blue
58 *
59 * @param message the message to append
60 * @return the current builder
61 */
62 @Nonnull
63 default MessageBuilder info(Object message) {
64 return style(".info:-bold,f:blue", message);
65 }
66
67 /**
68 * Append message content in warning style.
69 * By default, bold yellow
70 *
71 * @param message the message to append
72 * @return the current builder
73 */
74 @Nonnull
75 default MessageBuilder warning(Object message) {
76 return style(".warning:-bold,f:yellow", message);
77 }
78
79 /**
80 * Append message content in error style.
81 * By default, bold red
82 *
83 * @param message the message to append
84 * @return the current builder
85 */
86 @Nonnull
87 default MessageBuilder error(Object message) {
88 return style(".error:-bold,f:red", message);
89 }
90
91 /**
92 * Append message content in success style.
93 * By default, bold green
94 *
95 * @param message the message to append
96 * @return the current builder
97 */
98 @Nonnull
99 default MessageBuilder success(Object message) {
100 return style(".success:-bold,f:green", message);
101 }
102
103 /**
104 * Append message content in failure style.
105 * By default, bold red
106 *
107 * @param message the message to append
108 * @return the current builder
109 */
110 @Nonnull
111 default MessageBuilder failure(Object message) {
112 return style(".failure:-bold,f:red", message);
113 }
114
115 /**
116 * Append message content in strong style.
117 * By default, bold
118 *
119 * @param message the message to append
120 * @return the current builder
121 */
122 @Nonnull
123 default MessageBuilder strong(Object message) {
124 return style(".strong:-bold", message);
125 }
126
127 /**
128 * Append message content in mojo style.
129 * By default, green
130 *
131 * @param message the message to append
132 * @return the current builder
133 */
134 @Nonnull
135 default MessageBuilder mojo(Object message) {
136 return style(".mojo:-f:green", message);
137 }
138
139 /**
140 * Append message content in project style.
141 * By default, cyan
142 *
143 * @param message the message to append
144 * @return the current builder
145 */
146 @Nonnull
147 default MessageBuilder project(Object message) {
148 return style(".project:-f:cyan", message);
149 }
150
151 @Nonnull
152 default MessageBuilder style(String style, Object message) {
153 return style(style).a(message).resetStyle();
154 }
155
156 MessageBuilder style(String style);
157
158 MessageBuilder resetStyle();
159
160 //
161 // message building methods modelled after Ansi methods
162 //
163
164 @Nonnull
165 @Override
166 MessageBuilder append(CharSequence cs);
167
168 @Nonnull
169 @Override
170 MessageBuilder append(CharSequence cs, int start, int end);
171
172 @Nonnull
173 @Override
174 MessageBuilder append(char c);
175
176 /**
177 * Append content to the message buffer.
178 *
179 * @param value the content to append
180 * @param offset the index of the first {@code char} to append
181 * @param len the number of {@code char}s to append
182 * @return the current builder
183 */
184 @Nonnull
185 default MessageBuilder a(char[] value, int offset, int len) {
186 return append(String.valueOf(value, offset, len));
187 }
188
189 /**
190 * Append content to the message buffer.
191 *
192 * @param value the content to append
193 * @return the current builder
194 */
195 @Nonnull
196 default MessageBuilder a(char[] value) {
197 return append(String.valueOf(value));
198 }
199
200 /**
201 * Append content to the message buffer.
202 *
203 * @param value the content to append
204 * @param start the starting index of the subsequence to be appended
205 * @param end the end index of the subsequence to be appended
206 * @return the current builder
207 */
208 @Nonnull
209 default MessageBuilder a(CharSequence value, int start, int end) {
210 return append(value, start, end);
211 }
212
213 /**
214 * Append content to the message buffer.
215 *
216 * @param value the content to append
217 * @return the current builder
218 */
219 @Nonnull
220 default MessageBuilder a(CharSequence value) {
221 return append(value);
222 }
223
224 /**
225 * Append content to the message buffer.
226 *
227 * @param value the content to append
228 * @return the current builder
229 */
230 @Nonnull
231 default MessageBuilder a(Object value) {
232 return append(String.valueOf(value));
233 }
234
235 /**
236 * Append newline to the message buffer.
237 *
238 * @return the current builder
239 */
240 @Nonnull
241 default MessageBuilder newline() {
242 return append(System.lineSeparator());
243 }
244
245 /**
246 * Append formatted content to the buffer.
247 * @see String#format(String, Object...)
248 *
249 * @param pattern a <a href="../util/Formatter.html#syntax">format string</a>
250 * @param args arguments referenced by the format specifiers in the format string
251 * @return the current builder
252 */
253 @Nonnull
254 default MessageBuilder format(String pattern, Object... args) {
255 return append(String.format(pattern, args));
256 }
257
258 /**
259 * Set the buffer length.
260 *
261 * @param length the new length
262 * @return the current builder
263 */
264 MessageBuilder setLength(int length);
265
266 /**
267 * Return the built message.
268 *
269 * @return the message
270 */
271 @Nonnull
272 String build();
273 }