View Javadoc
1   /**************************************************************************
2    *
3    * Copyright (c) 2015-2019 Yawg project contributors.
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   * Provides utility methods for printing help and varied info intended
17   * for end users.
18   */
19  /* package private */ 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       * Creates a new builder with no initializations.
71       *
72       * @return A newly created <code>Builder</code> instance.
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             // Nothing to do.
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 }