diff --git a/file-barj-job/README.md b/file-barj-job/README.md index d3c4ddb..63d4f90 100644 --- a/file-barj-job/README.md +++ b/file-barj-job/README.md @@ -45,6 +45,7 @@ Execute the following command (assuming that your executable is named accordingl java -jar build/libs/file-barj-job.jar \ --backup \ --config config.json \ + --force-full-backup false \ --threads 2 ``` diff --git a/file-barj-job/src/main/java/com/github/nagyesta/filebarj/job/Controller.java b/file-barj-job/src/main/java/com/github/nagyesta/filebarj/job/Controller.java index 661f223..537c33e 100644 --- a/file-barj-job/src/main/java/com/github/nagyesta/filebarj/job/Controller.java +++ b/file-barj-job/src/main/java/com/github/nagyesta/filebarj/job/Controller.java @@ -169,7 +169,7 @@ protected void doBackup(final BackupProperties properties) throws IOException { final var config = new ObjectMapper().reader().readValue(properties.getConfig().toFile(), BackupJobConfiguration.class); final var startTimeMillis = System.currentTimeMillis(); log.info("Bootstrapping backup operation..."); - new BackupController(config, false) + new BackupController(config, properties.isForceFullBackup()) .execute(properties.getThreads()); final var endTimeMillis = System.currentTimeMillis(); final var durationMillis = (endTimeMillis - startTimeMillis); diff --git a/file-barj-job/src/main/java/com/github/nagyesta/filebarj/job/cli/BackupProperties.java b/file-barj-job/src/main/java/com/github/nagyesta/filebarj/job/cli/BackupProperties.java index 501c42c..b1beadf 100644 --- a/file-barj-job/src/main/java/com/github/nagyesta/filebarj/job/cli/BackupProperties.java +++ b/file-barj-job/src/main/java/com/github/nagyesta/filebarj/job/cli/BackupProperties.java @@ -15,4 +15,5 @@ public class BackupProperties { @NonNull private final Path config; private final int threads; + private final boolean forceFullBackup; } diff --git a/file-barj-job/src/main/java/com/github/nagyesta/filebarj/job/cli/CliBackupParser.java b/file-barj-job/src/main/java/com/github/nagyesta/filebarj/job/cli/CliBackupParser.java index 593afa7..19c2a61 100644 --- a/file-barj-job/src/main/java/com/github/nagyesta/filebarj/job/cli/CliBackupParser.java +++ b/file-barj-job/src/main/java/com/github/nagyesta/filebarj/job/cli/CliBackupParser.java @@ -12,6 +12,7 @@ public class CliBackupParser extends GenericCliParser { private static final String THREADS = "threads"; private static final String CONFIG = "config"; + private static final String FORCE_FULL = "force-full-backup"; /** * Creates a new {@link CliBackupParser} instance and sets the input arguments. @@ -22,9 +23,11 @@ public CliBackupParser(final String[] args) { super("java -jar file-barj-job.jar --" + Task.BACKUP.getCommand(), args, commandLine -> { final var config = Path.of(commandLine.getOptionValue(CONFIG)).toAbsolutePath(); final var threads = Integer.parseInt(commandLine.getOptionValue(THREADS, "1")); + final var forceFull = Boolean.parseBoolean(commandLine.getOptionValue(FORCE_FULL, "false")); return BackupProperties.builder() .config(config) .threads(threads) + .forceFullBackup(forceFull) .build(); }); } @@ -46,6 +49,14 @@ protected Options createOptions() { .numberOfArgs(1) .type(Path.class) .argName("config_file") - .desc("Defines where the configuration file can be found.").build()); + .desc("Defines where the configuration file can be found.").build()) + .addOption(Option.builder() + .longOpt(FORCE_FULL) + .required(false) + .hasArg(true) + .numberOfArgs(1) + .type(Boolean.class) + .argName("boolean") + .desc("Forces the creation of a full backup if true.").build()); } } diff --git a/file-barj-job/src/test/java/com/github/nagyesta/filebarj/job/cli/CliBackupParserTest.java b/file-barj-job/src/test/java/com/github/nagyesta/filebarj/job/cli/CliBackupParserTest.java index 1f181f7..20a9c5e 100644 --- a/file-barj-job/src/test/java/com/github/nagyesta/filebarj/job/cli/CliBackupParserTest.java +++ b/file-barj-job/src/test/java/com/github/nagyesta/filebarj/job/cli/CliBackupParserTest.java @@ -44,7 +44,12 @@ void testConstructorShouldCollectAndSetConfigurationValuesWhenAllArgsArePassed() //given final var configPath = Path.of("config.json"); final var threads = 2; - final var args = new String[] {"--config", configPath.toString(), "--threads", String.valueOf(threads)}; + final var forceFull = true; + final var args = new String[] { + "--config", configPath.toString(), + "--threads", String.valueOf(threads), + "--force-full-backup", String.valueOf(forceFull) + }; //when final var underTest = new CliBackupParser(args); @@ -53,6 +58,7 @@ void testConstructorShouldCollectAndSetConfigurationValuesWhenAllArgsArePassed() //then Assertions.assertEquals(configPath.toAbsolutePath(), actual.getConfig()); Assertions.assertEquals(threads, actual.getThreads()); + Assertions.assertEquals(forceFull, actual.isForceFullBackup()); } @Test @@ -60,6 +66,7 @@ void testConstructorShouldCollectAndSetConfigurationValuesWhenRequiredArgsArePas //given final var configPath = Path.of("config.json"); final var threads = 1; + final var forceFull = false; final var args = new String[] {"--config", configPath.toString()}; //when @@ -69,5 +76,6 @@ void testConstructorShouldCollectAndSetConfigurationValuesWhenRequiredArgsArePas //then Assertions.assertEquals(configPath.toAbsolutePath(), actual.getConfig()); Assertions.assertEquals(threads, actual.getThreads()); + Assertions.assertEquals(forceFull, actual.isForceFullBackup()); } }