1
2
3
4
5
6
7 package com.varmateo.yawg.cli;
8
9 import java.io.PrintWriter;
10 import java.text.MessageFormat;
11
12 import com.varmateo.yawg.api.YawgInfo;
13
14
15
16
17
18
19 final class InfoPrinter {
20
21
22 private static final String TOOL_NAME = "CLI Baker";
23
24 private static final String PRODUCT_HEADER_FMT = ""
25 + "\n"
26 + "{0} {1} - {2}\n"
27 + "{3}\n";
28 private static final String PRODUCT_HEADER = MessageFormat.format(
29 PRODUCT_HEADER_FMT,
30 YawgInfo.PRODUCT_NAME,
31 YawgInfo.VERSION,
32 TOOL_NAME,
33 YawgInfo.COPYRIGHT_HEADER);
34
35 private static final String USAGE_HEADER_FMT = ""
36 + PRODUCT_HEADER
37 + "\n"
38 + "Usage: {0} [OPTION] ...\n"
39 + "\n"
40 + "Bakes a site from a directory tree.\n"
41 +" \n"
42 + "Options:";
43
44 private static final String USAGE_FOOTER = ""
45 + "\n"
46 + "Find additional information at http://yawg.varmateo.com/\n";
47
48 private final PrintWriter _output;
49 private final CliInfoPrinter _cliInfoPrinter;
50
51
52
53
54
55 private InfoPrinter(final Builder builder) {
56
57 final String argv0 = builder._argv0;
58
59 _output = builder._output;
60 _cliInfoPrinter = CliInfoPrinter.builder()
61 .argv0(argv0)
62 .versionMessage(PRODUCT_HEADER)
63 .usageMessageHeader(USAGE_HEADER_FMT)
64 .usageMessageFooter(USAGE_FOOTER)
65 .build();
66 }
67
68
69
70
71
72
73
74 public static Builder builder() {
75
76 return new Builder();
77 }
78
79
80
81
82
83 public void printHelp() {
84
85 _cliInfoPrinter.printUsage(_output, BakerCliParameters.options());
86 }
87
88
89
90
91
92 public void printVersion() {
93
94 _cliInfoPrinter.printVersion(_output);
95 }
96
97
98
99
100
101 public void printError(final Throwable error) {
102
103 _cliInfoPrinter.printError(_output, error);
104 }
105
106
107
108
109
110 public static final class Builder {
111
112
113 private String _argv0 = null;
114 private PrintWriter _output = null;
115
116
117
118
119
120 private Builder() {
121
122 }
123
124
125
126
127
128 public Builder argv0(final String argv0) {
129
130 _argv0 = argv0;
131
132 return this;
133 }
134
135
136
137
138
139 public Builder output(final PrintWriter output) {
140
141 _output = output;
142
143 return this;
144 }
145
146
147
148
149
150 public InfoPrinter build() {
151
152 return new InfoPrinter(this);
153 }
154
155
156 }
157
158
159 }