From 7fc63f78476d50999302d0f3e584eac5086a22ad Mon Sep 17 00:00:00 2001 From: Jon Chambers Date: Tue, 21 Dec 2021 12:43:13 -0500 Subject: [PATCH] Allow callers to specify one or more dynamic config classes --- .../CheckDynamicConfigurationCommand.java | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/workers/CheckDynamicConfigurationCommand.java b/service/src/main/java/org/whispersystems/textsecuregcm/workers/CheckDynamicConfigurationCommand.java index 32e8fb260..348b3aa32 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/workers/CheckDynamicConfigurationCommand.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/workers/CheckDynamicConfigurationCommand.java @@ -9,6 +9,10 @@ import io.dropwizard.cli.Command; import io.dropwizard.setup.Bootstrap; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import net.sourceforge.argparse4j.inf.ArgumentAction; import net.sourceforge.argparse4j.inf.Namespace; import net.sourceforge.argparse4j.inf.Subparser; import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicConfiguration; @@ -26,16 +30,37 @@ public class CheckDynamicConfigurationCommand extends Command { .type(String.class) .required(true) .help("Dynamic configuration file to check"); + + subparser.addArgument("-c", "--class") + .type(String.class) + .nargs("*") + .setDefault(DynamicConfiguration.class.getCanonicalName()); } @Override public void run(final Bootstrap bootstrap, final Namespace namespace) throws Exception { final Path path = Path.of(namespace.getString("file")); - if (DynamicConfigurationManager.parseConfiguration(Files.readString(path), DynamicConfiguration.class).isPresent()) { - System.out.println("Dynamic configuration file at " + path + " is valid"); + final List> configurationClasses; + + if (namespace.get("class") instanceof List) { + final List> classesFromArguments = new ArrayList<>(); + + for (final Object object : namespace.getList("class")) { + classesFromArguments.add(Class.forName(object.toString())); + } + + configurationClasses = classesFromArguments; } else { - System.err.println("Dynamic configuration file at " + path + " is not valid"); + configurationClasses = List.of(Class.forName(namespace.getString("class"))); + } + + for (final Class configurationClass : configurationClasses) { + if (DynamicConfigurationManager.parseConfiguration(Files.readString(path), configurationClass).isPresent()) { + System.out.println(configurationClass.getSimpleName() + ": dynamic configuration file at " + path + " is valid"); + } else { + System.err.println(configurationClass.getSimpleName() + ": dynamic configuration file at " + path + " is not valid"); + } } } }