mirror of
https://github.com/cosinekitty/astronomy.git
synced 2026-05-25 01:09:09 -04:00
Merge branch 'ebraminio-kotlin' into kotlin
This commit is contained in:
@@ -2,11 +2,14 @@ package io.github.cosinekitty.astronomy.demo;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.format.DateTimeParseException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import io.github.cosinekitty.astronomy.*;
|
||||
|
||||
public class Main {
|
||||
private static String usageText = String.join(System.getProperty("line.separator"),
|
||||
private static final String usageText = String.join(System.getProperty("line.separator"),
|
||||
"Command line arguments:",
|
||||
"",
|
||||
" jupiter_moons [yyyy-mm-ddThh:mm:ssZ]",
|
||||
@@ -35,6 +38,11 @@ public class Main {
|
||||
""
|
||||
);
|
||||
|
||||
private static int printUsage() {
|
||||
System.out.println(usageText);
|
||||
return 1;
|
||||
}
|
||||
|
||||
private static class DemoException extends Exception {
|
||||
public DemoException(String message) {
|
||||
super(message);
|
||||
@@ -42,40 +50,36 @@ public class Main {
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
int rc = 1;
|
||||
if (args.length == 0) {
|
||||
System.out.println(usageText);
|
||||
} else {
|
||||
try {
|
||||
String verb = args[0];
|
||||
boolean found = false;
|
||||
for (int i = 0; i < demoList.length; ++i) {
|
||||
Demo demo = demoList[i];
|
||||
if (demo.name.equals(verb)) {
|
||||
found = true;
|
||||
if (args.length >= demo.minArgs && args.length <= demo.maxArgs) {
|
||||
rc = demo.runner.run(args);
|
||||
} else {
|
||||
System.out.println(usageText);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
System.out.printf("ERROR: Unknown command '%s'.%n", verb);
|
||||
}
|
||||
} catch (DateTimeParseException e) {
|
||||
System.out.println("ERROR: Invalid date/time format on command line.");
|
||||
rc = 1;
|
||||
} catch (DemoException e) {
|
||||
System.out.printf("ERROR: %s%n", e.getMessage());
|
||||
rc = 1;
|
||||
}
|
||||
}
|
||||
System.exit(rc);
|
||||
System.exit(runDemos(args));
|
||||
}
|
||||
|
||||
private static Time parseTime(String args[], int index) {
|
||||
private static int runDemos(String[] args) {
|
||||
if (args.length == 0) return printUsage();
|
||||
String verb = args[0];
|
||||
Optional<Demo> foundDemo = demoList.stream()
|
||||
.filter(demo -> demo.name.equals(verb))
|
||||
.findFirst();
|
||||
if (foundDemo.isEmpty()) {
|
||||
System.out.printf("ERROR: Unknown command '%s'.%n", verb);
|
||||
return 1;
|
||||
}
|
||||
Demo demo = foundDemo.get();
|
||||
if (args.length < demo.minArgs || args.length > demo.maxArgs) {
|
||||
System.out.println("ERROR: Incorrect number of command-line arguments.");
|
||||
return 1;
|
||||
}
|
||||
try {
|
||||
return demo.runner.run(args);
|
||||
} catch (DateTimeParseException e) {
|
||||
System.out.println("ERROR: Invalid date/time format on command line.");
|
||||
return 1;
|
||||
} catch (DemoException e) {
|
||||
System.out.printf("ERROR: %s%n", e.getMessage());
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
private static Time parseTime(String[] args, int index) {
|
||||
long millis =
|
||||
(index >= 0 && index < args.length)
|
||||
? Instant.parse(args[index]).toEpochMilli()
|
||||
@@ -114,8 +118,8 @@ public class Main {
|
||||
return new Observer(latitude, longitude, 0.0);
|
||||
}
|
||||
|
||||
private static interface DemoRunner {
|
||||
public int run(String[] args) throws DemoException;
|
||||
private interface DemoRunner {
|
||||
int run(String[] args) throws DemoException;
|
||||
}
|
||||
|
||||
private static class Demo {
|
||||
@@ -132,7 +136,7 @@ public class Main {
|
||||
}
|
||||
}
|
||||
|
||||
private static Demo[] demoList = new Demo[] {
|
||||
private static final List<Demo> demoList = Arrays.asList(
|
||||
new Demo("jupiter_moons", 1, 2, args ->
|
||||
JupiterMoons.run(
|
||||
parseTime(args, 1)
|
||||
@@ -154,5 +158,5 @@ public class Main {
|
||||
parseYear(args[1])
|
||||
)
|
||||
)
|
||||
};
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import java.time.Instant
|
||||
import java.time.format.DateTimeParseException
|
||||
import io.github.cosinekitty.astronomy.*
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
private val usageText = """
|
||||
private const val usageText = """
|
||||
Command line arguments:
|
||||
|
||||
jupiter_moons [yyyy-mm-ddThh:mm:ssZ]
|
||||
@@ -31,7 +32,7 @@ Command line arguments:
|
||||
|
||||
"""
|
||||
|
||||
internal fun printUsage(): Int {
|
||||
private fun printUsage(): Int {
|
||||
println(usageText)
|
||||
return 1
|
||||
}
|
||||
@@ -44,33 +45,32 @@ internal class Demo(
|
||||
)
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
System.exit(runDemo(args))
|
||||
exitProcess(runDemo(args))
|
||||
}
|
||||
|
||||
class DemoException(message:String): Exception(message)
|
||||
|
||||
internal fun runDemo(args: Array<String>): Int {
|
||||
if (args.size > 0) {
|
||||
val verb = args[0];
|
||||
for (demo in demoList) {
|
||||
if (demo.name == verb) {
|
||||
if (args.size < demo.minArgs || args.size > demo.maxArgs) {
|
||||
println("ERROR: Incorrect number of command-line arguments.")
|
||||
return 1
|
||||
}
|
||||
try {
|
||||
return demo.func(args)
|
||||
} catch (_: DateTimeParseException) {
|
||||
println("ERROR: Invalid date/time format on command line.")
|
||||
return 1
|
||||
} catch (e: DemoException) {
|
||||
println("ERROR: ${e.message}")
|
||||
return 1
|
||||
}
|
||||
}
|
||||
}
|
||||
private fun runDemo(args: Array<String>): Int {
|
||||
if (args.isEmpty()) return printUsage()
|
||||
val verb = args[0]
|
||||
val demo = demoList.firstOrNull { it.name == verb }
|
||||
if (demo == null) {
|
||||
println("ERROR: Unknown command '$verb'.")
|
||||
return 1
|
||||
}
|
||||
if (args.size < demo.minArgs || args.size > demo.maxArgs) {
|
||||
println("ERROR: Incorrect number of command-line arguments.")
|
||||
return 1
|
||||
}
|
||||
return try {
|
||||
demo.func(args)
|
||||
} catch (_: DateTimeParseException) {
|
||||
println("ERROR: Invalid date/time format on command line.")
|
||||
1
|
||||
} catch (e: DemoException) {
|
||||
println("ERROR: ${e.message}")
|
||||
1
|
||||
}
|
||||
return printUsage()
|
||||
}
|
||||
|
||||
internal fun parseTime(args: Array<String>, index: Int): Time {
|
||||
@@ -113,7 +113,7 @@ internal fun parseObserver(args: Array<String>, index: Int): Observer {
|
||||
return Observer(latitude, longitude, 0.0)
|
||||
}
|
||||
|
||||
internal val demoList = arrayOf(
|
||||
internal val demoList = listOf(
|
||||
Demo("jupiter_moons", 1, 2) { args ->
|
||||
`Jupiter moons demo`(
|
||||
parseTime(args, 1)
|
||||
|
||||
Reference in New Issue
Block a user