RegionChooserCommandLineInterface.java 2.46 KB
Newer Older
Eric Duminil's avatar
Eric Duminil committed
1
2
package eu.simstadt.regionchooser;

Eric Duminil's avatar
Eric Duminil committed
3
4
import java.io.BufferedWriter;
import java.nio.file.Files;
Eric Duminil's avatar
Eric Duminil committed
5
import java.nio.file.Path;
Eric Duminil's avatar
Eric Duminil committed
6
import java.util.List;
Eric Duminil's avatar
Eric Duminil committed
7
import java.util.Scanner;
Eric Duminil's avatar
Eric Duminil committed
8
9
10
import java.util.concurrent.Callable;
import picocli.CommandLine;
import picocli.CommandLine.Command;
Eric Duminil's avatar
Eric Duminil committed
11
import picocli.CommandLine.Option;
Eric Duminil's avatar
Eric Duminil committed
12
13


Eric Duminil's avatar
Eric Duminil committed
14
@Command(name = "region_chooser", mixinStandardHelpOptions = true, version = "regionChooser x.x", description = "Extracts a region from one or more citygmls.", sortOptions = false)
Eric Duminil's avatar
Eric Duminil committed
15
class RegionChooserCommandLineInterface implements Callable<Integer>
Eric Duminil's avatar
Eric Duminil committed
16
{
Eric Duminil's avatar
Eric Duminil committed
17
18
19
	@Option(names = { "-i",
			"--input" }, required = true, split = ",", description = "Citygml files to extract from", paramLabel = "input.gml")
	List<Path> citygmls;
Eric Duminil's avatar
Eric Duminil committed
20

Eric Duminil's avatar
Eric Duminil committed
21
22
	@Option(names = { "-o",
			"--output" }, required = true, description = "Output file", paramLabel = "output.gml")
Eric Duminil's avatar
Eric Duminil committed
23
	Path outputCityGML;
Eric Duminil's avatar
Eric Duminil committed
24

Eric Duminil's avatar
Eric Duminil committed
25
26
	@Option(names = { "-e", "--epsg" }, description = "EPSG id for coordinate reference system", paramLabel = "31467")
	Integer espgId;
Eric Duminil's avatar
Eric Duminil committed
27

Eric Duminil's avatar
Eric Duminil committed
28
29
	@Option(names = { "-w",
			"--wkt" }, description = "File containing WKT polygon, or - for stdin", paramLabel = "polygon.wkt")
Eric Duminil's avatar
Eric Duminil committed
30
31
	String wktFile = "-";

Eric Duminil's avatar
Eric Duminil committed
32
33
	@Override
	public Integer call() throws Exception { // your business logic goes here...
Eric Duminil's avatar
Eric Duminil committed
34
35
36
		System.out.println("Should extract from :");
		for (Path input_citygml : citygmls) {
			System.out.println("  " + input_citygml);
Eric Duminil's avatar
Eric Duminil committed
37
		}
Eric Duminil's avatar
Eric Duminil committed
38
39
		System.out.print("And write to : ");
		System.out.println(outputCityGML);
Eric Duminil's avatar
Eric Duminil committed
40
41
42
43
44
45
46
47
48
		try (BufferedWriter bf = Files.newBufferedWriter(outputCityGML)) {
			bf.write("HELLO THERE!");
		}
		if (espgId == null) {
			System.out.println("coordinates from " + citygmls.get(0));
		} else {
			System.out.print("in EPSG:");
			System.out.println(espgId + " coordinates.");
		}
Eric Duminil's avatar
Eric Duminil committed
49

Eric Duminil's avatar
Eric Duminil committed
50
51
52
53
54
55
56
57
		if (wktFile.equals("-")) {
			if (System.in.available() == 0) {
				System.out.println("OH NOEs, NO INPUT!");
			} else {
				System.out.println("Here's standard input:");
				System.out.println(getInput());
				System.out.println("Done");
			}
Eric Duminil's avatar
Eric Duminil committed
58
		} else {
Eric Duminil's avatar
Eric Duminil committed
59
			System.out.println("Try to read from " + wktFile);
Eric Duminil's avatar
Eric Duminil committed
60
		}
Eric Duminil's avatar
Eric Duminil committed
61

Eric Duminil's avatar
Eric Duminil committed
62
		return 0;
Eric Duminil's avatar
Eric Duminil committed
63
64
	}

Eric Duminil's avatar
Eric Duminil committed
65
	private static String getInput() {
Eric Duminil's avatar
Eric Duminil committed
66
67
68
		try (Scanner myObj = new Scanner(System.in)) {
			return myObj.nextLine();
		}
Eric Duminil's avatar
Eric Duminil committed
69
70
	}

Eric Duminil's avatar
Eric Duminil committed
71
72
73
74
75
	// this example implements Callable, so parsing, error handling and handling user
	// requests for usage help or version help can be done with one line of code.
	public static void main(String... args) {
		int exitCode = new CommandLine(new RegionChooserCommandLineInterface()).execute(args);
		System.exit(exitCode);
Eric Duminil's avatar
Eric Duminil committed
76
	}
Eric Duminil's avatar
Eric Duminil committed
77
}