1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
6 <!-- 2024-04-25 Thu 17:30 -->
7 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8 <meta name="viewport" content="width=device-width, initial-scale=1" />
9 <title>CLI Helper - library to help implementing commandline interfaces</title>
10 <meta name="author" content="Svjatoslav Agejenko" />
11 <meta name="generator" content="Org Mode" />
13 #content { max-width: 60em; margin: auto; }
14 .title { text-align: center;
15 margin-bottom: .2em; }
16 .subtitle { text-align: center;
20 .todo { font-family: monospace; color: red; }
21 .done { font-family: monospace; color: green; }
22 .priority { font-family: monospace; color: orange; }
23 .tag { background-color: #eee; font-family: monospace;
24 padding: 2px; font-size: 80%; font-weight: normal; }
25 .timestamp { color: #bebebe; }
26 .timestamp-kwd { color: #5f9ea0; }
27 .org-right { margin-left: auto; margin-right: 0px; text-align: right; }
28 .org-left { margin-left: 0px; margin-right: auto; text-align: left; }
29 .org-center { margin-left: auto; margin-right: auto; text-align: center; }
30 .underline { text-decoration: underline; }
31 #postamble p, #preamble p { font-size: 90%; margin: .2em; }
32 p.verse { margin-left: 3%; }
34 border: 1px solid #e6e6e6;
36 background-color: #f2f2f2;
38 font-family: monospace;
53 background-color: #f2f2f299;
55 pre.src:hover:before { display: inline; margin-top: 14px;}
56 /* Languages per Org manual */
57 pre.src-asymptote:before { content: 'Asymptote'; }
58 pre.src-awk:before { content: 'Awk'; }
59 pre.src-authinfo::before { content: 'Authinfo'; }
60 pre.src-C:before { content: 'C'; }
61 /* pre.src-C++ doesn't work in CSS */
62 pre.src-clojure:before { content: 'Clojure'; }
63 pre.src-css:before { content: 'CSS'; }
64 pre.src-D:before { content: 'D'; }
65 pre.src-ditaa:before { content: 'ditaa'; }
66 pre.src-dot:before { content: 'Graphviz'; }
67 pre.src-calc:before { content: 'Emacs Calc'; }
68 pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
69 pre.src-fortran:before { content: 'Fortran'; }
70 pre.src-gnuplot:before { content: 'gnuplot'; }
71 pre.src-haskell:before { content: 'Haskell'; }
72 pre.src-hledger:before { content: 'hledger'; }
73 pre.src-java:before { content: 'Java'; }
74 pre.src-js:before { content: 'Javascript'; }
75 pre.src-latex:before { content: 'LaTeX'; }
76 pre.src-ledger:before { content: 'Ledger'; }
77 pre.src-lisp:before { content: 'Lisp'; }
78 pre.src-lilypond:before { content: 'Lilypond'; }
79 pre.src-lua:before { content: 'Lua'; }
80 pre.src-matlab:before { content: 'MATLAB'; }
81 pre.src-mscgen:before { content: 'Mscgen'; }
82 pre.src-ocaml:before { content: 'Objective Caml'; }
83 pre.src-octave:before { content: 'Octave'; }
84 pre.src-org:before { content: 'Org mode'; }
85 pre.src-oz:before { content: 'OZ'; }
86 pre.src-plantuml:before { content: 'Plantuml'; }
87 pre.src-processing:before { content: 'Processing.js'; }
88 pre.src-python:before { content: 'Python'; }
89 pre.src-R:before { content: 'R'; }
90 pre.src-ruby:before { content: 'Ruby'; }
91 pre.src-sass:before { content: 'Sass'; }
92 pre.src-scheme:before { content: 'Scheme'; }
93 pre.src-screen:before { content: 'Gnu Screen'; }
94 pre.src-sed:before { content: 'Sed'; }
95 pre.src-sh:before { content: 'shell'; }
96 pre.src-sql:before { content: 'SQL'; }
97 pre.src-sqlite:before { content: 'SQLite'; }
98 /* additional languages in org.el's org-babel-load-languages alist */
99 pre.src-forth:before { content: 'Forth'; }
100 pre.src-io:before { content: 'IO'; }
101 pre.src-J:before { content: 'J'; }
102 pre.src-makefile:before { content: 'Makefile'; }
103 pre.src-maxima:before { content: 'Maxima'; }
104 pre.src-perl:before { content: 'Perl'; }
105 pre.src-picolisp:before { content: 'Pico Lisp'; }
106 pre.src-scala:before { content: 'Scala'; }
107 pre.src-shell:before { content: 'Shell Script'; }
108 pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
109 /* additional language identifiers per "defun org-babel-execute"
111 pre.src-cpp:before { content: 'C++'; }
112 pre.src-abc:before { content: 'ABC'; }
113 pre.src-coq:before { content: 'Coq'; }
114 pre.src-groovy:before { content: 'Groovy'; }
115 /* additional language identifiers from org-babel-shell-names in
116 ob-shell.el: ob-shell is the only babel language using a lambda to put
117 the execution function name together. */
118 pre.src-bash:before { content: 'bash'; }
119 pre.src-csh:before { content: 'csh'; }
120 pre.src-ash:before { content: 'ash'; }
121 pre.src-dash:before { content: 'dash'; }
122 pre.src-ksh:before { content: 'ksh'; }
123 pre.src-mksh:before { content: 'mksh'; }
124 pre.src-posh:before { content: 'posh'; }
125 /* Additional Emacs modes also supported by the LaTeX listings package */
126 pre.src-ada:before { content: 'Ada'; }
127 pre.src-asm:before { content: 'Assembler'; }
128 pre.src-caml:before { content: 'Caml'; }
129 pre.src-delphi:before { content: 'Delphi'; }
130 pre.src-html:before { content: 'HTML'; }
131 pre.src-idl:before { content: 'IDL'; }
132 pre.src-mercury:before { content: 'Mercury'; }
133 pre.src-metapost:before { content: 'MetaPost'; }
134 pre.src-modula-2:before { content: 'Modula-2'; }
135 pre.src-pascal:before { content: 'Pascal'; }
136 pre.src-ps:before { content: 'PostScript'; }
137 pre.src-prolog:before { content: 'Prolog'; }
138 pre.src-simula:before { content: 'Simula'; }
139 pre.src-tcl:before { content: 'tcl'; }
140 pre.src-tex:before { content: 'TeX'; }
141 pre.src-plain-tex:before { content: 'Plain TeX'; }
142 pre.src-verilog:before { content: 'Verilog'; }
143 pre.src-vhdl:before { content: 'VHDL'; }
144 pre.src-xml:before { content: 'XML'; }
145 pre.src-nxml:before { content: 'XML'; }
146 /* add a generic configuration mode; LaTeX export needs an additional
147 (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
148 pre.src-conf:before { content: 'Configuration File'; }
150 table { border-collapse:collapse; }
151 caption.t-above { caption-side: top; }
152 caption.t-bottom { caption-side: bottom; }
153 td, th { vertical-align:top; }
154 th.org-right { text-align: center; }
155 th.org-left { text-align: center; }
156 th.org-center { text-align: center; }
157 td.org-right { text-align: right; }
158 td.org-left { text-align: left; }
159 td.org-center { text-align: center; }
160 dt { font-weight: bold; }
161 .footpara { display: inline; }
162 .footdef { margin-bottom: 1em; }
163 .figure { padding: 1em; }
164 .figure p { text-align: center; }
165 .equation-container {
171 vertical-align: middle;
176 vertical-align: middle;
180 border: 2px solid gray;
185 { text-align: right; font-size: 70%; white-space: nowrap; }
186 textarea { overflow-x: auto; }
187 .linenr { font-size: smaller }
188 .code-highlighted { background-color: #ffff00; }
189 .org-info-js_info-navigation { border-style: none; }
190 #org-info-js_console-label
191 { font-size: 10px; font-weight: bold; white-space: nowrap; }
192 .org-info-js_search-highlight
193 { background-color: #ffff00; color: #000000; font-weight: bold; }
196 <link rel="stylesheet" type="text/css" href="https://thomasf.github.io/solarized-css/solarized-dark.min.css" />
199 <div id="content" class="content">
200 <h1 class="title">CLI Helper - library to help implementing commandline interfaces</h1>
201 <div id="table-of-contents" role="doc-toc">
202 <h2>Table of Contents</h2>
203 <div id="text-table-of-contents" role="doc-toc">
205 <li><a href="#org9212145">1. General</a>
207 <li><a href="#orgef4524a">1.1. Source code</a></li>
210 <li><a href="#org5a03d93">2. Overview</a>
212 <li><a href="#orgbe808ef">2.1. Ask for user input</a></li>
215 <li><a href="#org20035ac">3. Alternatives and further reading</a></li>
216 <li><a href="#org2e7a568">4. Getting the library</a></li>
217 <li><a href="#orgcc45c0c">5. TODO:</a></li>
222 <div id="outline-container-org9212145" class="outline-2">
223 <h2 id="org9212145"><span class="section-number-2">1.</span> General</h2>
224 <div class="outline-text-2" id="text-1">
226 <li>This program is free software: released under Creative Commons Zero
231 <li>Svjatoslav Agejenko</li>
232 <li>Homepage: <a href="https://svjatoslav.eu">https://svjatoslav.eu</a></li>
233 <li>Email: <a href="mailto://svjatoslav@svjatoslav.eu">mailto://svjatoslav@svjatoslav.eu</a></li>
236 <li><a href="https://www.svjatoslav.eu/projects/">Other software projects hosted at svjatoslav.eu</a></li>
240 <div id="outline-container-orgef4524a" class="outline-3">
241 <h3 id="orgef4524a"><span class="section-number-3">1.1.</span> Source code</h3>
242 <div class="outline-text-3" id="text-1-1">
244 <li><a href="https://www2.svjatoslav.eu/gitweb/?p=cli-helper.git;a=snapshot;h=HEAD;sf=tgz">Download latest snapshot in TAR GZ format</a></li>
246 <li><a href="https://www2.svjatoslav.eu/gitweb/?p=cli-helper.git;a=summary">Browse Git repository online</a></li>
249 Clone Git repository using command:
251 <pre class="example">
252 git clone https://www3.svjatoslav.eu/git/cli-helper.git
255 <li>See <a href="https://www3.svjatoslav.eu/projects/cli-helper/apidocs/">JavaDoc</a></li>
261 <div id="outline-container-org5a03d93" class="outline-2">
262 <h2 id="org5a03d93"><span class="section-number-2">2.</span> Overview</h2>
263 <div class="outline-text-2" id="text-2">
265 <li>See also: <a href="https://www3.svjatoslav.eu/projects/cli-helper/apidocs/">CLI Helper JavaDoc</a></li>
269 This is library intended to facilitate creation of commandline
270 applications in Java programming language. Library is packaged as an
271 artifact to Maven repository. This makes it simple to add library as
272 dependency to your project.
276 Library provides following general functionalities:
279 <li><a href="#orgbe808ef">Asking for user input</a></li>
280 <li><a href="CLI arguments processing.html#ID-46115263-ed3d-4acc-9ec5-523d7acf87b8">Commandline arguments processing</a></li>
284 <div id="outline-container-orgbe808ef" class="outline-3">
285 <h3 id="orgbe808ef"><span class="section-number-3">2.1.</span> Ask for user input</h3>
286 <div class="outline-text-3" id="text-2-1">
288 <dt>askBoolean()</dt><dd>Asks the user to enter a boolean value (yes/no).</dd>
289 <dt>askLong()</dt><dd>Asks the user to enter an integer.</dd>
290 <dt>askString()</dt><dd>Asks the user to enter a string.</dd>
296 <div id="outline-container-org20035ac" class="outline-2">
297 <h2 id="org20035ac"><span class="section-number-2">3.</span> Alternatives and further reading</h2>
298 <div class="outline-text-2" id="text-3">
300 <li><a href="https://clig.dev/">Command Line Interface Guidelines</a></li>
305 <div id="outline-container-org2e7a568" class="outline-2">
306 <h2 id="org2e7a568"><span class="section-number-2">4.</span> Getting the library</h2>
307 <div class="outline-text-2" id="text-4">
309 Instructions to embed svjatoslav-commons library in your project:
313 Maven pom.xml file snippet:
316 <div class="org-src-container">
317 <pre class="src src-xml"><<span style="color: #89b4fa;">dependencies</span>>
319 <<span style="color: #89b4fa;">dependency</span>>
320 <<span style="color: #89b4fa;">groupId</span>>eu.svjatoslav</<span style="color: #89b4fa;">groupId</span>>
321 <<span style="color: #89b4fa;">artifactId</span>>cli-helper</<span style="color: #89b4fa;">artifactId</span>>
322 <<span style="color: #89b4fa;">version</span>>1.2</<span style="color: #89b4fa;">version</span>>
323 </<span style="color: #89b4fa;">dependency</span>>
325 </<span style="color: #89b4fa;">dependencies</span>>
328 <<span style="color: #89b4fa;">repositories</span>>
330 <<span style="color: #89b4fa;">repository</span>>
331 <<span style="color: #89b4fa;">id</span>>svjatoslav.eu</<span style="color: #89b4fa;">id</span>>
332 <<span style="color: #89b4fa;">name</span>>Svjatoslav repository</<span style="color: #89b4fa;">name</span>>
333 <<span style="color: #89b4fa;">url</span>>http://www3.svjatoslav.eu/maven/</<span style="color: #89b4fa;">url</span>>
334 </<span style="color: #89b4fa;">repository</span>>
336 </<span style="color: #89b4fa;">repositories</span>>
341 <div id="outline-container-orgcc45c0c" class="outline-2">
342 <h2 id="orgcc45c0c"><span class="section-number-2">5.</span> TODO:</h2>
343 <div class="outline-text-2" id="text-5">
345 List of improvement suggestions:
349 <li>Add more concrete examples of how to use the library in JavaDoc
350 comments. This will help developers quickly get started and learn
353 <li>Provide more comprehensive unit tests for CliHelper,
354 ParameterParser, Options and subclasses. This will ensure robustness
357 <li>Add JavaDoc comments to all classes and methods where
358 applicable. This will provide better visibility into the library's
359 functionality for developers.</li>
361 <li>Add more option types like date/time, regular expression etc.</li>
363 <li>Document best practices for using the library in a larger project.</li>
365 <li>Implement support for more complex CLI applications like option
366 dependencies and conflicts resolution.</li>
371 <div id="postamble" class="status">
372 <p class="author">Author: Svjatoslav Agejenko</p>
373 <p class="date">Created: 2024-04-25 Thu 17:30</p>
374 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>