Allow callers to specify one or more dynamic config classes

This commit is contained in:
Jon Chambers 2021-12-21 12:43:13 -05:00 committed by Jon Chambers
parent 49009cbcad
commit 7fc63f7847
1 changed files with 28 additions and 3 deletions

View File

@ -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<Class<?>> configurationClasses;
if (namespace.get("class") instanceof List) {
final List<Class<?>> 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");
}
}
}
}