From 1a2e8d79cdb0ab0e22201ddd041cf81dc607c708 Mon Sep 17 00:00:00 2001 From: David Waltermire Date: Fri, 5 Dec 2025 15:42:05 -0500 Subject: [PATCH] Add --pretty-print option for profile resolution output This feature enables formatted XML, JSON, and YAML output for the resolve-profile command, improving readability of the generated files. - Added PrettyPrinter utility class for formatting output files - Added --pretty-print CLI option to AbstractResolveCommand - Added unit tests for the PrettyPrinter utility - Added CLI integration tests for pretty-print functionality Original contribution by Mahesh Kumar Gaddam (ermahesh) Based on usnistgov/oscal-cli#295 Addresses usnistgov/oscal-cli#268 --- .../core/commands/AbstractResolveCommand.java | 52 ++++++- .../tools/cli/core/utils/PrettyPrinter.java | 100 +++++++++++++ .../secauto/oscal/tools/cli/core/CLITest.java | 98 +++++++++++++ .../cli/core/utils/PrettyPrinterTest.java | 131 ++++++++++++++++++ 4 files changed, 380 insertions(+), 1 deletion(-) create mode 100644 src/main/java/gov/nist/secauto/oscal/tools/cli/core/utils/PrettyPrinter.java create mode 100644 src/test/java/gov/nist/secauto/oscal/tools/cli/core/utils/PrettyPrinterTest.java diff --git a/src/main/java/gov/nist/secauto/oscal/tools/cli/core/commands/AbstractResolveCommand.java b/src/main/java/gov/nist/secauto/oscal/tools/cli/core/commands/AbstractResolveCommand.java index dec26097..5c01c5c2 100644 --- a/src/main/java/gov/nist/secauto/oscal/tools/cli/core/commands/AbstractResolveCommand.java +++ b/src/main/java/gov/nist/secauto/oscal/tools/cli/core/commands/AbstractResolveCommand.java @@ -27,6 +27,7 @@ import gov.nist.secauto.oscal.lib.model.Profile; import gov.nist.secauto.oscal.lib.profile.resolver.ProfileResolutionException; import gov.nist.secauto.oscal.lib.profile.resolver.ProfileResolver; +import gov.nist.secauto.oscal.tools.cli.core.utils.PrettyPrinter; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; @@ -55,6 +56,10 @@ public abstract class AbstractResolveCommand .desc("Generate URI references relative to this resource") .hasArg() .build(); + private static final Option PRETTY_PRINT_OPTION = Option.builder() + .longOpt("pretty-print") + .desc("Enable pretty-printing of the output for better readability") + .build(); @NonNull private static final List