summaryrefslogtreecommitdiffstats
path: root/tools/tools-common/src/test/java/org/onap/policy/apex/tools/common/docs/ExampleCliParser.java
blob: b9303860469587c96edea7e7bccced41a752c655 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/*-
 * ============LICENSE_START=======================================================
 *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
 * ================================================================================
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * SPDX-License-Identifier: Apache-2.0
 * ============LICENSE_END=========================================================
 */

package org.onap.policy.apex.tools.common.docs;

////
////NOTE: This file contains tags for ASCIIDOC
////DO NOT REMOVE any of those tag lines, e.g.
//////tag::**
//////end::**
////
////DO NOT auto-refresh imports or organise imports!
////

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.HelpFormatter;
import org.junit.Test;

//tag::import[]
import org.onap.policy.apex.tools.common.CliOptions;
import org.onap.policy.apex.tools.common.CliParser;
//end::import[]

import org.slf4j.ext.XLogger;
import org.slf4j.ext.XLoggerFactory;

/**
 * Examples for documentation using {@link CliParser}.
 *
 * @author Sven van der Meer (sven.van.der.meer@ericsson.com)
 */
public class ExampleCliParser {

    private static final XLogger LOGGER = XLoggerFactory.getXLogger(ExampleCliParser.class);

    /**
     * Test example parser.
     */
    @Test
    public void testExampleParser() {
        final String[] args = new String[] { "-h" };

        // tag::setApp[]
        final String appName = "test-app";
        final String appDescription = "a test app for documenting how to use the CLI utilities";
        // end::setApp[]

        // tag::setCli[]
        final CliParser cli = new CliParser();
        cli.addOption(CliOptions.HELP);
        cli.addOption(CliOptions.VERSION);
        cli.addOption(CliOptions.MODELFILE);
        // end::setCli[]

        // tag::parseCli[]
        final CommandLine cmd = cli.parseCli(args);
        // end::parseCli[]

        // tag::processCliHelp[]
        // help is an exit option, print usage and exit
        if (cmd.hasOption('h') || cmd.hasOption("help")) {
            final HelpFormatter formatter = new HelpFormatter();
            LOGGER.info(appName + " v" + cli.getAppVersion() + " - " + appDescription);
            formatter.printHelp(appName, cli.getOptions());
            return;
        }
        // end::processCliHelp[]

        // tag::processCliVersion[]
        // version is an exit option, print version and exit
        if (cmd.hasOption('v') || cmd.hasOption("version")) {
            LOGGER.info(appName + " " + cli.getAppVersion());
            return;
        }
        // end::processCliVersion[]

        // tag::processCliModel[]
        String modelFile = cmd.getOptionValue('m');
        if (modelFile == null) {
            modelFile = cmd.getOptionValue("model");
        }
        if (modelFile == null) {
            LOGGER.error(appName + ": no model file given, cannot proceed (try -h for help)");
            return;
        }
        // end::processCliModel[]

        // tag::someStartPrint[]
        LOGGER.info(appName + ": starting");
        LOGGER.info(" --> model file: " + modelFile);
        // end::someStartPrint[]

        // tag::yourApp[]
        // your code for the application here
        // e.g.
        // try {
        // Model2Cli app = new Model2Cli(modelFile, !cmd.hasOption("sv"), appName);
        // app.runApp();
        // }
        // catch(ApexException aex) {
        // LOGGER.error(appName + ": caught APEX exception with message: " + aex.getMessage());
        // }
        // end::yourApp[]
    }
}