c3r-cli-spark/src/main/java/com/amazonaws/c3r/spark/cli/SchemaMode.java [224:279]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        return dao.withProfile(optionalArgs.profile).withRegion(optionalArgs.region)
                .getCollaborationDataEncryptionMetadata(optionalArgs.id.toString());
    }

    /**
     * Validates that required information is specified.
     *
     * @throws C3rIllegalArgumentException If user input is invalid
     */
    private void validate() {
        if (requiredArgs.getInput().isBlank()) {
            throw new C3rIllegalArgumentException("Specified input file name is blank.");
        }
        if (optionalArgs.output != null && optionalArgs.output.isBlank()) {
            throw new C3rIllegalArgumentException("Specified output file name is blank.");
        }
    }

    /**
     * Execute schema generation help utility.
     *
     * @return {@value Main#SUCCESS} if no errors encountered else {@value Main#FAILURE}
     */
    @Override
    public Integer call() {
        try {
            validate();
            final File file = new File(requiredArgs.getInput());
            final String fileNameNoPath = file.getName();
            final String outFile = Objects.requireNonNullElse(optionalArgs.output, fileNameNoPath + ".json");

            final FileFormat fileFormat = Optional.ofNullable(optionalArgs.fileFormat).orElseGet(() ->
                    FileFormat.fromFileName(requiredArgs.getInput()));
            if (fileFormat == null) {
                throw new C3rIllegalArgumentException("Unknown file format (consider using the --format flag): " + requiredArgs.getInput());
            }
            switch (fileFormat) {
                case CSV:
                    final var csvSchemaGenerator = CsvSchemaGenerator.builder()
                            .inputCsvFile(requiredArgs.getInput())
                            .hasHeaders(optionalArgs.hasHeaders)
                            .targetJsonFile(outFile)
                            .overwrite(optionalArgs.overwrite)
                            .clientSettings(getClientSettings())
                            .build();
                    csvSchemaGenerator.generateSchema(subMode);
                    break;
                case PARQUET:
                    if (!optionalArgs.hasHeaders) {
                        throw new C3rIllegalArgumentException("--noHeaders is not applicable for Parquet files.");
                    }
                    final var parquetSchemaGenerator = ParquetSchemaGenerator.builder()
                            .inputParquetFile(requiredArgs.getInput())
                            .targetJsonFile(outFile)
                            .overwrite(optionalArgs.overwrite)
                            .clientSettings(getClientSettings())
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



c3r-cli/src/main/java/com/amazonaws/c3r/cli/SchemaMode.java [216:271]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        return dao.withProfile(optionalArgs.profile).withRegion(optionalArgs.region)
                .getCollaborationDataEncryptionMetadata(optionalArgs.id.toString());
    }

    /**
     * Validates that required information is specified.
     *
     * @throws C3rIllegalArgumentException If user input is invalid
     */
    private void validate() {
        if (requiredArgs.getInput().isBlank()) {
            throw new C3rIllegalArgumentException("Specified input file name is blank.");
        }
        if (optionalArgs.output != null && optionalArgs.output.isBlank()) {
            throw new C3rIllegalArgumentException("Specified output file name is blank.");
        }
    }

    /**
     * Execute schema generation help utility.
     *
     * @return {@value Main#SUCCESS} if no errors encountered else {@value Main#FAILURE}
     */
    @Override
    public Integer call() {
        try {
            validate();
            final File file = new File(requiredArgs.getInput());
            final String fileNameNoPath = file.getName();
            final String outFile = Objects.requireNonNullElse(optionalArgs.output, fileNameNoPath + ".json");

            final FileFormat fileFormat = Optional.ofNullable(optionalArgs.fileFormat).orElseGet(() ->
                    FileFormat.fromFileName(requiredArgs.getInput()));
            if (fileFormat == null) {
                throw new C3rIllegalArgumentException("Unknown file format (consider using the --format flag): " + requiredArgs.getInput());
            }
            switch (fileFormat) {
                case CSV:
                    final var csvSchemaGenerator = CsvSchemaGenerator.builder()
                            .inputCsvFile(requiredArgs.getInput())
                            .hasHeaders(optionalArgs.hasHeaders)
                            .targetJsonFile(outFile)
                            .overwrite(optionalArgs.overwrite)
                            .clientSettings(getClientSettings())
                            .build();
                    csvSchemaGenerator.generateSchema(subMode);
                    break;
                case PARQUET:
                    if (!optionalArgs.hasHeaders) {
                        throw new C3rIllegalArgumentException("--noHeaders is not applicable for Parquet files.");
                    }
                    final var parquetSchemaGenerator = ParquetSchemaGenerator.builder()
                            .inputParquetFile(requiredArgs.getInput())
                            .targetJsonFile(outFile)
                            .overwrite(optionalArgs.overwrite)
                            .clientSettings(getClientSettings())
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



