seatunnel-datasource/seatunnel-datasource-plugins/datasource-s3/src/main/java/org/apache/seatunnel/datasource/plugin/s3/S3OptionRule.java [69:163]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                .optional(HADOOP_S3_PROPERTIES)
                .conditional(
                        S3A_AWS_CREDENTIALS_PROVIDER,
                        S3aAwsCredentialsProvider.SimpleAWSCredentialsProvider,
                        ACCESS_KEY,
                        SECRET_KEY)
                .build();
    }

    public static final Option<String> PATH =
            Options.key("path").stringType().noDefaultValue().withDescription("S3 write path");

    public static final Option<FileFormat> TYPE =
            Options.key("file_format_type")
                    .enumType(FileFormat.class)
                    .noDefaultValue()
                    .withDescription("S3 write type");

    public static final Option<String> DELIMITER =
            Options.key("delimiter")
                    .stringType()
                    .noDefaultValue()
                    .withDescription("S3 write delimiter");

    public static final Option<Map<String, String>> SCHEMA =
            Options.key("schema").mapType().noDefaultValue().withDescription("SeaTunnel Schema");

    public static final Option<Boolean> PARSE_PARSE_PARTITION_FROM_PATH =
            Options.key("parse_partition_from_path")
                    .booleanType()
                    .noDefaultValue()
                    .withDescription("S3 write parse_partition_from_path");

    public static final Option<String> DATE_FORMAT =
            Options.key("date_format")
                    .stringType()
                    .noDefaultValue()
                    .withDescription("S3 write date_format");

    public static final Option<String> DATETIME_FORMAT =
            Options.key("time_format")
                    .stringType()
                    .noDefaultValue()
                    .withDescription("S3 write time_format");

    public static final Option<String> TIME_FORMAT =
            Options.key("datetime_format")
                    .stringType()
                    .noDefaultValue()
                    .withDescription("S3 write datetime_format");

    public static OptionRule metadataRule() {
        return OptionRule.builder()
                .required(PATH, TYPE)
                .conditional(TYPE, FileFormat.TEXT, DELIMITER)
                .conditional(TYPE, Arrays.asList(FileFormat.TEXT, FileFormat.JSON), SCHEMA)
                .optional(PARSE_PARSE_PARTITION_FROM_PATH)
                .optional(DATE_FORMAT)
                .optional(DATETIME_FORMAT)
                .optional(TIME_FORMAT)
                .build();
    }

    public enum S3aAwsCredentialsProvider {
        SimpleAWSCredentialsProvider("org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider"),

        InstanceProfileCredentialsProvider("com.amazonaws.auth.InstanceProfileCredentialsProvider");

        private String provider;

        S3aAwsCredentialsProvider(String provider) {
            this.provider = provider;
        }

        public String getProvider() {
            return provider;
        }

        @Override
        public String toString() {
            return provider;
        }
    }

    public enum FileFormat {
        CSV("csv"),
        TEXT("txt"),
        PARQUET("parquet"),
        ORC("orc"),
        JSON("json");

        private final String type;

        FileFormat(String type) {
            this.type = type;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



seatunnel-datasource/seatunnel-datasource-plugins/datasource-s3redshift/src/main/java/org/apache/seatunnel/datasource/plugin/redshift/s3/S3RedshiftOptionRule.java [94:188]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                .optional(HADOOP_S3_PROPERTIES)
                .conditional(
                        S3A_AWS_CREDENTIALS_PROVIDER,
                        S3aAwsCredentialsProvider.SimpleAWSCredentialsProvider,
                        ACCESS_KEY,
                        SECRET_KEY)
                .build();
    }

    public static final Option<String> PATH =
            Options.key("path").stringType().noDefaultValue().withDescription("S3 write path");

    public static final Option<FileFormat> TYPE =
            Options.key("file_format_type")
                    .enumType(FileFormat.class)
                    .noDefaultValue()
                    .withDescription("S3 write type");

    public static final Option<String> DELIMITER =
            Options.key("delimiter")
                    .stringType()
                    .noDefaultValue()
                    .withDescription("S3 write delimiter");

    public static final Option<Map<String, String>> SCHEMA =
            Options.key("schema").mapType().noDefaultValue().withDescription("SeaTunnel Schema");

    public static final Option<Boolean> PARSE_PARSE_PARTITION_FROM_PATH =
            Options.key("parse_partition_from_path")
                    .booleanType()
                    .noDefaultValue()
                    .withDescription("S3 write parse_partition_from_path");

    public static final Option<String> DATE_FORMAT =
            Options.key("date_format")
                    .stringType()
                    .noDefaultValue()
                    .withDescription("S3 write date_format");

    public static final Option<String> DATETIME_FORMAT =
            Options.key("time_format")
                    .stringType()
                    .noDefaultValue()
                    .withDescription("S3 write time_format");

    public static final Option<String> TIME_FORMAT =
            Options.key("datetime_format")
                    .stringType()
                    .noDefaultValue()
                    .withDescription("S3 write datetime_format");

    public static OptionRule metadataRule() {
        return OptionRule.builder()
                .required(PATH, TYPE)
                .conditional(TYPE, FileFormat.TEXT, DELIMITER)
                .conditional(TYPE, Arrays.asList(FileFormat.TEXT, FileFormat.JSON), SCHEMA)
                .optional(PARSE_PARSE_PARTITION_FROM_PATH)
                .optional(DATE_FORMAT)
                .optional(DATETIME_FORMAT)
                .optional(TIME_FORMAT)
                .build();
    }

    public enum S3aAwsCredentialsProvider {
        SimpleAWSCredentialsProvider("org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider"),

        InstanceProfileCredentialsProvider("com.amazonaws.auth.InstanceProfileCredentialsProvider");

        private String provider;

        S3aAwsCredentialsProvider(String provider) {
            this.provider = provider;
        }

        public String getProvider() {
            return provider;
        }

        @Override
        public String toString() {
            return provider;
        }
    }

    public enum FileFormat {
        CSV("csv"),
        TEXT("txt"),
        PARQUET("parquet"),
        ORC("orc"),
        JSON("json");

        private final String type;

        FileFormat(String type) {
            this.type = type;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



