From 7f2b650be0497502e217d3fed3a820ff2c9407ea Mon Sep 17 00:00:00 2001 From: Nicolas Payette Date: Tue, 10 Dec 2024 19:52:09 +0000 Subject: [PATCH] add work in progress on command line args for quick runner --- examples/build.gradle.kts | 2 + .../ox/poseidon/examples/BasicScenario.java | 6 +- .../ac/ox/poseidon/examples/QuickRunner.java | 56 +++++++++++++++++-- .../examples/external/ExternalScenario.java | 5 +- 4 files changed, 59 insertions(+), 10 deletions(-) diff --git a/examples/build.gradle.kts b/examples/build.gradle.kts index 614a96b48..9352d441f 100644 --- a/examples/build.gradle.kts +++ b/examples/build.gradle.kts @@ -28,6 +28,8 @@ dependencies { implementation(project(":io")) implementation(project(":gui")) + implementation("com.beust:jcommander:1.82") + // The following are all necessary for gRPC implementation("io.grpc:grpc-netty-shaded:1.68.1") implementation("io.grpc:grpc-protobuf:1.68.1") diff --git a/examples/src/main/java/uk/ac/ox/poseidon/examples/BasicScenario.java b/examples/src/main/java/uk/ac/ox/poseidon/examples/BasicScenario.java index 6a946973e..a1a07be70 100644 --- a/examples/src/main/java/uk/ac/ox/poseidon/examples/BasicScenario.java +++ b/examples/src/main/java/uk/ac/ox/poseidon/examples/BasicScenario.java @@ -269,11 +269,11 @@ public class BasicScenario extends Scenario { public static void main(final String[] args) { final BasicScenario scenario = new BasicScenario(); + final Path scenarioPath = Path.of("/home/nicolas/Desktop/scenario.yaml"); new ScenarioWriter().write( scenario, - Path.of("/home/nicolas/Desktop/scenario.yaml") + scenarioPath ); - new QuickRunner(scenario).runFor(Period.ofYears(1)); - + new QuickRunner(scenarioPath, Period.ofYears(1)).run(); } } diff --git a/examples/src/main/java/uk/ac/ox/poseidon/examples/QuickRunner.java b/examples/src/main/java/uk/ac/ox/poseidon/examples/QuickRunner.java index 5fc4e4e27..292fe0f80 100644 --- a/examples/src/main/java/uk/ac/ox/poseidon/examples/QuickRunner.java +++ b/examples/src/main/java/uk/ac/ox/poseidon/examples/QuickRunner.java @@ -19,18 +19,49 @@ package uk.ac.ox.poseidon.examples; -import lombok.RequiredArgsConstructor; +import com.beust.jcommander.IStringConverter; +import com.beust.jcommander.Parameter; +import com.beust.jcommander.converters.PathConverter; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; import uk.ac.ox.poseidon.core.Scenario; import uk.ac.ox.poseidon.core.Simulation; +import uk.ac.ox.poseidon.io.ScenarioLoader; +import java.nio.file.Path; import java.time.LocalDateTime; +import java.time.Period; import java.time.temporal.TemporalAmount; -@RequiredArgsConstructor -public class QuickRunner { - private final Scenario scenario; +@NoArgsConstructor +@AllArgsConstructor +public class QuickRunner implements Runnable { - public void runFor(final TemporalAmount temporalAmount) { + @Parameter( + names = {"-s", "--scenario"}, + description = "Path to the scenario file in YAML format", + converter = PathConverter.class + ) + private Path scenarioPath; + + @Parameter( + names = {"-p", "--period"}, + description = + "Period to run the simulation for in ISO-8601 format (e.g., P2Y for two years). " + + "See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/time/" + + "Period.html#parse(java.lang.CharSequence).", + converter = PeriodConverter.class + ) + private Period period; + + public static void main(final String[] args) { + // TODO + } + + private void run( + final Scenario scenario, + final TemporalAmount temporalAmount + ) { final Simulation simulation = scenario.newSimulation(); simulation.start(); final LocalDateTime end = @@ -45,4 +76,19 @@ public void runFor(final TemporalAmount temporalAmount) { } simulation.finish(); } + + @Override + public void run() { + run( + new ScenarioLoader().load(scenarioPath.toFile()), + period + ); + } + + private static class PeriodConverter implements IStringConverter { + @Override + public Period convert(final String value) { + return Period.parse(value); + } + } } diff --git a/examples/src/main/java/uk/ac/ox/poseidon/examples/external/ExternalScenario.java b/examples/src/main/java/uk/ac/ox/poseidon/examples/external/ExternalScenario.java index c5e1b109b..3df577bbc 100644 --- a/examples/src/main/java/uk/ac/ox/poseidon/examples/external/ExternalScenario.java +++ b/examples/src/main/java/uk/ac/ox/poseidon/examples/external/ExternalScenario.java @@ -225,10 +225,11 @@ public class ExternalScenario extends Scenario { public static void main(final String[] args) { final ExternalScenario scenario = new ExternalScenario(); + final Path scenarioPath = Path.of("/home/nicolas/Desktop/scenario.yaml"); new ScenarioWriter().write( scenario, - Path.of("/home/nicolas/Desktop/scenario.yaml") + scenarioPath ); - new QuickRunner(new ExternalScenario()).runFor(Period.ofYears(10)); + new QuickRunner(scenarioPath, Period.ofYears(1)).run(); } }