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()

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

dependencies {
  shadow library.java.vendored_guava_20_0
  shadow project(path: ":sdks:java:core", configuration: "shadow")
  shadow library.java.aws_java_sdk_cloudwatch
  shadow library.java.aws_java_sdk_core
  shadow library.java.aws_java_sdk_s3
  shadow library.java.aws_java_sdk_sns
  shadow library.java.aws_java_sdk_sqs
  shadow "commons-lang:commons-lang:2.6"
  shadow library.java.jackson_core
  shadow library.java.jackson_annotations
  shadow library.java.jackson_databind
  shadow library.java.slf4j_api
  runtime 'commons-codec:commons-codec:1.9'
  runtime "org.apache.httpcomponents:httpclient:4.5.6"
  testCompile project(path: ":sdks:java:core", configuration: "shadowTest")
  testCompile project(path: ":sdks:java:io:common", configuration: "shadowTest")
  testCompile "io.findify:s3mock_2.12:0.2.4"
  shadowTest library.java.guava_testlib
  shadowTest library.java.hamcrest_core
  shadowTest library.java.hamcrest_library
  shadowTest library.java.mockito_core
  shadowTest library.java.junit
  shadowTest group: 'org.elasticmq', name: 'elasticmq-rest-sqs_2.12', version: '0.14.1'
  testRuntimeOnly library.java.slf4j_jdk14
  testRuntimeOnly project(path: ":runners:direct-java")
}

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