import groovy.json.JsonOutput

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * License); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an AS IS BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

plugins {
  id 'org.apache.beam.module'
}

applyJavaNature(
  automaticModuleName: 'org.apache.beam.sdk.io.aws',
)

description = "Apache Beam :: SDKs :: Java :: IO :: Amazon Web Services"
ext.summary = "IO library to read and write Amazon Web Services services from Beam."

dependencies {
  compile library.java.vendored_guava_26_0_jre
  compile project(path: ":sdks:java:core", configuration: "shadow")
  compile library.java.aws_java_sdk_cloudwatch
  compile library.java.aws_java_sdk_core
  compile library.java.aws_java_sdk_dynamodb
  compile library.java.aws_java_sdk_s3
  compile library.java.aws_java_sdk_sns
  compile library.java.aws_java_sdk_sqs
  compile library.java.aws_java_sdk_sts
  compile library.java.jackson_core
  compile library.java.jackson_annotations
  compile library.java.jackson_databind
  compile library.java.slf4j_api
  compile library.java.joda_time
  compile library.java.http_core
  runtime library.java.commons_codec
  runtime "org.apache.httpcomponents:httpclient:4.5.12"
  testCompile project(path: ":sdks:java:core", configuration: "shadowTest")
  testCompile project(path: ":sdks:java:io:common", configuration: "testRuntime")
  testCompile "io.findify:s3mock_2.12:0.2.6"
  testCompile library.java.hamcrest_core
  testCompile library.java.hamcrest_library
  testCompile library.java.mockito_core
  testCompile library.java.junit
  testCompile library.java.testcontainers_localstack
  testCompile "org.assertj:assertj-core:3.11.1"
  testCompile 'org.elasticmq:elasticmq-rest-sqs_2.12:0.15.6'
  testRuntimeOnly library.java.slf4j_jdk14
  testRuntimeOnly project(path: ":runners:direct-java", configuration: "shadow")
  testCompile project(path: ":runners:core-construction-java", configuration: "testRuntime")
}

test {
  systemProperty "beamTestPipelineOptions", JsonOutput.toJson([
      '--awsRegion=us-west-2',
      '--awsCredentialsProvider={"@type" : "AWSStaticCredentialsProvider", "awsAccessKeyId" : "key_id_value","awsSecretKey" : "secret_value"}'
  ])
}
