Skip to content

Commit e44db7a

Browse files
committed
Normalize builder pattern
- Add Javadoc - Don't static import String in tests - Move factory methods to their home class
1 parent 59cad49 commit e44db7a

12 files changed

Lines changed: 110 additions & 106 deletions

src/main/java/org/apache/commons/cli/help/AbstractHelpFormatter.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,10 @@ public abstract static class Builder<B extends Builder<B, T>, T extends Abstract
5454
private Comparator<Option> comparator = DEFAULT_COMPARATOR;
5555

5656
/** The {@link HelpAppendable} to use */
57-
private HelpAppendable helpAppendable = defaultTextHelpAppendable();
57+
private HelpAppendable helpAppendable = TextHelpAppendable.systemOut();
5858

5959
/** The {@link OptionFormatter.Builder} to use to format options in the table. */
60-
private OptionFormatter.Builder optionFormatBuilder = defaultOptionFormatterBuilder();
60+
private OptionFormatter.Builder optionFormatBuilder = OptionFormatter.builder();
6161

6262
/** The string to separate option groups with */
6363
private String optionGroupSeparator = DEFAULT_OPTION_GROUP_SEPARATOR;
@@ -82,14 +82,6 @@ protected B asThis() {
8282
return (B) this;
8383
}
8484

85-
protected OptionFormatter.Builder defaultOptionFormatterBuilder() {
86-
return new OptionFormatter.Builder();
87-
}
88-
89-
protected TextHelpAppendable defaultTextHelpAppendable() {
90-
return new TextHelpAppendable(System.out);
91-
}
92-
9385
protected Comparator<Option> getComparator() {
9486
return comparator;
9587
}
@@ -124,7 +116,7 @@ public B setComparator(final Comparator<Option> comparator) {
124116
* @return this
125117
*/
126118
public B setHelpAppendable(final HelpAppendable helpAppendable) {
127-
this.helpAppendable = helpAppendable != null ? helpAppendable : defaultTextHelpAppendable();
119+
this.helpAppendable = helpAppendable != null ? helpAppendable : TextHelpAppendable.systemOut();
128120
return asThis();
129121
}
130122

@@ -135,7 +127,7 @@ public B setHelpAppendable(final HelpAppendable helpAppendable) {
135127
* @return this
136128
*/
137129
public B setOptionFormatBuilder(final OptionFormatter.Builder optionFormatBuilder) {
138-
this.optionFormatBuilder = optionFormatBuilder != null ? optionFormatBuilder : defaultOptionFormatterBuilder();
130+
this.optionFormatBuilder = optionFormatBuilder != null ? optionFormatBuilder : OptionFormatter.builder();
139131
return asThis();
140132
}
141133

src/main/java/org/apache/commons/cli/help/HelpFormatter.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@ protected Builder() {
8585
// empty
8686
}
8787

88+
@Override
89+
public HelpFormatter get() {
90+
return new HelpFormatter(this);
91+
}
92+
8893
/**
8994
* Sets the showSince flag.
9095
*
@@ -95,11 +100,6 @@ public Builder setShowSince(final boolean showSince) {
95100
this.showSince = showSince;
96101
return this;
97102
}
98-
99-
@Override
100-
public HelpFormatter get() {
101-
return new HelpFormatter(this);
102-
}
103103
}
104104

105105
/** Default number of characters per line */

src/main/java/org/apache/commons/cli/help/OptionFormatter.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public static final class Builder implements Supplier<OptionFormatter> {
6666
/**
6767
* Default constructor. Uses the defaults specified in {@link OptionFormatter}.
6868
*/
69-
public Builder() {
69+
private Builder() {
7070
argNameDelimiters = Arrays.copyOf(DEFAULT_ARG_NAME_DELIMITERS, 2);
7171
defaultArgName = DEFAULT_ARG_NAME;
7272
deprecatedFormatFunction = NO_DEPRECATED_FORMAT;
@@ -103,6 +103,12 @@ public OptionFormatter build(final Option option) {
103103
return new OptionFormatter(option, this);
104104
}
105105

106+
@Override
107+
public OptionFormatter get() {
108+
// TODO Auto-generated method stub
109+
return null;
110+
}
111+
106112
/**
107113
* Specifies the starting and ending argument name delimiters for {@link Option} instances.
108114
*
@@ -217,12 +223,6 @@ public Builder setSyntaxFormatFunction(final BiFunction<OptionFormatter, Boolean
217223
public String toArgName(final String argName) {
218224
return argNameDelimiters[0] + Util.defaultValue(argName, "") + argNameDelimiters[1];
219225
}
220-
221-
@Override
222-
public OptionFormatter get() {
223-
// TODO Auto-generated method stub
224-
return null;
225-
}
226226
}
227227

228228
/** The default delimiters for optional arguments */
@@ -291,6 +291,15 @@ public OptionFormatter get() {
291291
*/
292292
public static final String DEFAULT_OPT_ARG_SEPARATOR = " ";
293293

294+
/**
295+
* Creates a new builder.
296+
*
297+
* @return a new builder.
298+
*/
299+
public static Builder builder() {
300+
return new Builder();
301+
}
302+
294303
/**
295304
* Construct the {@link OptionFormatter} from an {@link Option} using the default {@link OptionFormatter.Builder}.
296305
*

src/main/java/org/apache/commons/cli/help/TextHelpAppendable.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ Licensed to the Apache Software Foundation (ASF) under one or more
1616
*/
1717
package org.apache.commons.cli.help;
1818

19-
import static java.lang.String.format;
20-
2119
import java.io.IOException;
2220
import java.util.ArrayList;
2321
import java.util.Arrays;
@@ -102,6 +100,10 @@ public static int indexOfWrap(final CharSequence text, final int width, final in
102100
return pos > startPos ? pos : limit - 1;
103101
}
104102

103+
protected static TextHelpAppendable systemOut() {
104+
return new TextHelpAppendable(System.out);
105+
}
106+
105107
/** Defines the TextStyle for paragraph, and associated output formats. */
106108
private final TextStyle.Builder textStyleBuilder;
107109

@@ -213,8 +215,8 @@ public void appendList(final boolean ordered, final Collection<CharSequence> lis
213215
final TextStyle.Builder builder = TextStyle.builder().setLeftPad(textStyleBuilder.getLeftPad()).setIndent(DEFAULT_LIST_INDENT);
214216
int i = 1;
215217
for (final CharSequence line : list) {
216-
final String entry = ordered ? format(" %s. %s", i++, Util.defaultValue(line, BLANK_LINE))
217-
: format(" * %s", Util.defaultValue(line, BLANK_LINE));
218+
final String entry = ordered ? String.format(" %s. %s", i++, Util.defaultValue(line, BLANK_LINE))
219+
: String.format(" * %s", Util.defaultValue(line, BLANK_LINE));
218220
builder.setMaxWidth(Math.min(textStyleBuilder.getMaxWidth(), entry.length()));
219221
printQueue(makeColumnQueue(entry, builder.get()));
220222
}
@@ -343,7 +345,7 @@ protected List<Queue<String>> makeColumnQueues(final List<String> columnData, fi
343345
*/
344346
private void printQueue(final Queue<String> queue) throws IOException {
345347
for (final String s : queue) {
346-
output.append(format("%s%n", Util.rtrim(s)));
348+
output.append(String.format("%s%n", Util.rtrim(s)));
347349
}
348350
}
349351

src/test/java/org/apache/commons/cli/example/AptHelpAppendable.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ Licensed to the Apache Software Foundation (ASF) under one or more
1616
*/
1717
package org.apache.commons.cli.example;
1818

19-
import static java.lang.String.format;
20-
2119
import java.io.IOException;
2220
import java.util.Collection;
2321
import java.util.HashMap;
@@ -69,7 +67,7 @@ public void appendHeader(final int level, final CharSequence text) throws IOExce
6967
for (int i = 0; i < level; i++) {
7068
output.append("*");
7169
}
72-
output.append(format(" %s%n%n", ESCAPE_APT.translate(text)));
70+
output.append(String.format(" %s%n%n", ESCAPE_APT.translate(text)));
7371
}
7472
}
7573

@@ -79,11 +77,11 @@ public void appendList(final boolean ordered, final Collection<CharSequence> lis
7977
if (ordered) {
8078
int idx = 1;
8179
for (final CharSequence s : list) {
82-
output.append(format(" [[%s]] %s%n", idx++, ESCAPE_APT.translate(s)));
80+
output.append(String.format(" [[%s]] %s%n", idx++, ESCAPE_APT.translate(s)));
8381
}
8482
} else {
8583
for (final CharSequence s : list) {
86-
output.append(format(" * %s%n", ESCAPE_APT.translate(s)));
84+
output.append(String.format(" * %s%n", ESCAPE_APT.translate(s)));
8785
}
8886
}
8987
output.append(System.lineSeparator());
@@ -93,7 +91,7 @@ public void appendList(final boolean ordered, final Collection<CharSequence> lis
9391
@Override
9492
public void appendParagraph(final CharSequence paragraph) throws IOException {
9593
if (StringUtils.isNotEmpty(paragraph)) {
96-
output.append(format(" %s%n%n", ESCAPE_APT.translate(paragraph)));
94+
output.append(String.format(" %s%n%n", ESCAPE_APT.translate(paragraph)));
9795
}
9896
}
9997

@@ -123,20 +121,20 @@ public void appendTable(final TableDefinition table) throws IOException {
123121
output.append(sb.toString());
124122
output.append("|");
125123
for (final String header : table.headers()) {
126-
output.append(format(" %s |", ESCAPE_APT.translate(header)));
124+
output.append(String.format(" %s |", ESCAPE_APT.translate(header)));
127125
}
128126
output.append(rowSeparator);
129127
// write the table entries
130128
for (final Collection<String> row : table.rows()) {
131129
output.append("|");
132130
for (final String cell : row) {
133-
output.append(format(" %s |", ESCAPE_APT.translate(cell)));
131+
output.append(String.format(" %s |", ESCAPE_APT.translate(cell)));
134132
}
135133
output.append(rowSeparator);
136134
}
137135
// write the caption
138136
if (StringUtils.isNotEmpty(table.caption())) {
139-
output.append(format("%s%n", ESCAPE_APT.translate(table.caption())));
137+
output.append(String.format("%s%n", ESCAPE_APT.translate(table.caption())));
140138
}
141139
output.append(System.lineSeparator());
142140
}
@@ -145,7 +143,7 @@ public void appendTable(final TableDefinition table) throws IOException {
145143
@Override
146144
public void appendTitle(final CharSequence title) throws IOException {
147145
if (StringUtils.isNotEmpty(title)) {
148-
output.append(format(" -----%n %1$s%n -----%n%n%1$s%n%n", title));
146+
output.append(String.format(" -----%n %1$s%n -----%n%n%1$s%n%n", title));
149147
}
150148
}
151149
}

src/test/java/org/apache/commons/cli/example/AptHelpAppendableTest.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ Licensed to the Apache Software Foundation (ASF) under one or more
1616
*/
1717
package org.apache.commons.cli.example;
1818

19-
import static java.lang.String.format;
2019
import static org.junit.jupiter.api.Assertions.assertEquals;
2120
import static org.junit.jupiter.api.Assertions.assertThrows;
2221

@@ -41,10 +40,10 @@ public class AptHelpAppendableTest {
4140
public void testAppendHeaderTest() throws IOException {
4241
sb.setLength(0);
4342
underTest.appendHeader(1, "Hello World");
44-
assertEquals(format("* Hello World%n%n"), sb.toString());
43+
assertEquals(String.format("* Hello World%n%n"), sb.toString());
4544
sb.setLength(0);
4645
underTest.appendHeader(2, "Hello World");
47-
assertEquals(format("** Hello World%n%n"), sb.toString());
46+
assertEquals(String.format("** Hello World%n%n"), sb.toString());
4847
sb.setLength(0);
4948
assertThrows(IllegalArgumentException.class, () -> underTest.appendHeader(0, "Hello World"));
5049
}
@@ -54,17 +53,17 @@ public void testAppendListTest() throws IOException {
5453
final String[] entries = { "one", "two", "three" };
5554
sb.setLength(0);
5655
underTest.appendList(true, Arrays.asList(entries));
57-
assertEquals(format(" [[1]] one%n [[2]] two%n [[3]] three%n%n"), sb.toString());
56+
assertEquals(String.format(" [[1]] one%n [[2]] two%n [[3]] three%n%n"), sb.toString());
5857
sb.setLength(0);
5958
underTest.appendList(false, Arrays.asList(entries));
60-
assertEquals(format(" * one%n * two%n * three%n%n"), sb.toString());
59+
assertEquals(String.format(" * one%n * two%n * three%n%n"), sb.toString());
6160
}
6261

6362
@Test
6463
public void testAppendParagraphTest() throws IOException {
6564
sb.setLength(0);
6665
underTest.appendParagraph("Hello World");
67-
assertEquals(format(" Hello World%n%n"), sb.toString());
66+
assertEquals(String.format(" Hello World%n%n"), sb.toString());
6867
}
6968

7069
@Test
@@ -118,6 +117,6 @@ public void testAppendTableTest() throws IOException {
118117
public void testAppendTitleTest() throws IOException {
119118
sb.setLength(0);
120119
underTest.appendTitle("Hello World");
121-
assertEquals(format(" -----%n Hello World%n -----%n%nHello World%n%n"), sb.toString());
120+
assertEquals(String.format(" -----%n Hello World%n -----%n%nHello World%n%n"), sb.toString());
122121
}
123122
}

src/test/java/org/apache/commons/cli/example/XhtmlHelpAppendable.java

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ Licensed to the Apache Software Foundation (ASF) under one or more
1616
*/
1717
package org.apache.commons.cli.example;
1818

19-
import static java.lang.String.format;
20-
2119
import java.io.IOException;
2220
import java.util.Collection;
2321
import java.util.List;
@@ -48,53 +46,53 @@ public void appendHeader(final int level, final CharSequence text) throws IOExce
4846
if (level < 1) {
4947
throw new IllegalArgumentException("level must be at least 1");
5048
}
51-
output.append(format("<h%s>%s</h%1$s>%n", level, StringEscapeUtils.escapeHtml4(text.toString())));
49+
output.append(String.format("<h%s>%s</h%1$s>%n", level, StringEscapeUtils.escapeHtml4(text.toString())));
5250
}
5351
}
5452

5553
@Override
5654
public void appendList(final boolean ordered, final Collection<CharSequence> list) throws IOException {
57-
output.append(format("<%sl>%n", ordered ? "o" : "u"));
55+
output.append(String.format("<%sl>%n", ordered ? "o" : "u"));
5856
for (final CharSequence line : list) {
59-
output.append(format(" <li>%s</li>%n", StringEscapeUtils.escapeHtml4(StringUtils.defaultIfEmpty(line, "").toString())));
57+
output.append(String.format(" <li>%s</li>%n", StringEscapeUtils.escapeHtml4(StringUtils.defaultIfEmpty(line, "").toString())));
6058
}
61-
output.append(format("</%sl>%n", ordered ? "o" : "u"));
59+
output.append(String.format("</%sl>%n", ordered ? "o" : "u"));
6260
}
6361

6462
@Override
6563
public void appendParagraph(final CharSequence paragraph) throws IOException {
6664
if (StringUtils.isNotEmpty(paragraph)) {
67-
output.append(format("<p>%s</p>%n", StringEscapeUtils.escapeHtml4(paragraph.toString())));
65+
output.append(String.format("<p>%s</p>%n", StringEscapeUtils.escapeHtml4(paragraph.toString())));
6866
}
6967
}
7068

7169
@Override
7270
public void appendTable(final TableDefinition table) throws IOException {
73-
output.append(format("<table class='commons_cli_table'>%n"));
71+
output.append(String.format("<table class='commons_cli_table'>%n"));
7472
if (StringUtils.isNotEmpty(table.caption())) {
75-
output.append(format(" <caption>%s</caption>%n", StringEscapeUtils.escapeHtml4(table.caption())));
73+
output.append(String.format(" <caption>%s</caption>%n", StringEscapeUtils.escapeHtml4(table.caption())));
7674
}
7775
// write the headers
7876
if (!table.headers().isEmpty()) {
79-
output.append(format(" <tr>%n"));
77+
output.append(String.format(" <tr>%n"));
8078
for (final String header : table.headers()) {
81-
output.append(format(" <th>%s</th>%n", StringEscapeUtils.escapeHtml4(header)));
79+
output.append(String.format(" <th>%s</th>%n", StringEscapeUtils.escapeHtml4(header)));
8280
}
83-
output.append(format(" </tr>%n"));
81+
output.append(String.format(" </tr>%n"));
8482
}
8583
// write the data
8684
for (final List<String> row : table.rows()) {
87-
output.append(format(" <tr>%n"));
85+
output.append(String.format(" <tr>%n"));
8886
for (final String column : row) {
89-
output.append(format(" <td>%s</td>%n", StringEscapeUtils.escapeHtml4(column)));
87+
output.append(String.format(" <td>%s</td>%n", StringEscapeUtils.escapeHtml4(column)));
9088
}
91-
output.append(format(" </tr>%n"));
89+
output.append(String.format(" </tr>%n"));
9290
}
93-
output.append(format("</table>%n"));
91+
output.append(String.format("</table>%n"));
9492
}
9593

9694
@Override
9795
public void appendTitle(final CharSequence title) throws IOException {
98-
output.append(format("<span class='commons_cli_title'>%s</span>%n", StringEscapeUtils.escapeHtml4(title.toString())));
96+
output.append(String.format("<span class='commons_cli_title'>%s</span>%n", StringEscapeUtils.escapeHtml4(title.toString())));
9997
}
10098
}

0 commit comments

Comments
 (0)