aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/generator-cli/src/main/java/tools/refinery/generator/cli/RefineryCli.java
blob: 5de579e62e03db58ddf0cf6830c5d08324367c0e (plain) (blame)
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
/*
 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
 *
 * SPDX-License-Identifier: EPL-2.0
 */
package tools.refinery.generator.cli;

import com.beust.jcommander.JCommander;
import com.beust.jcommander.ParameterException;
import com.google.inject.Inject;
import tools.refinery.generator.cli.commands.GenerateCommand;
import tools.refinery.generator.standalone.StandaloneRefinery;

import java.io.IOException;

public class RefineryCli {
	private static final String GENERATE_COMMAND = "generate";

	@Inject
	private GenerateCommand generateCommand;

	private JCommander jCommander;

	public String parseArguments(String... args) {
		var jc = getJCommander();
		jc.parse(args);
		return jc.getParsedCommand();
	}

	public void run(String command) throws IOException {
		switch (command) {
		case GENERATE_COMMAND -> generateCommand.run();
		case null, default -> showUsageAndExit();
		}
	}

	public void showUsageAndExit() {
		getJCommander().usage();
		System.exit(1);
	}

	private JCommander getJCommander() {
		if (jCommander == null) {
			jCommander = JCommander.newBuilder()
					.programName("refinery")
					.addObject(this)
					.addCommand(GENERATE_COMMAND, generateCommand)
					.build();
		}
		return jCommander;
	}

	public static void main(String[] args) throws IOException {
		var cli = StandaloneRefinery.getInjector().getInstance(RefineryCli.class);
		String command = null;
		try {
			command = cli.parseArguments(args);
		} catch (ParameterException e) {
			System.err.println(e.getMessage());
			cli.showUsageAndExit();
		}
		cli.run(command);
	}
}