import java.nio.file.Files

/*
 * Licensed to Elasticsearch under one or more contributor
 * license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright
 * ownership. Elasticsearch 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.
 */

esplugin {
  description 'The GCS repository plugin adds Google Cloud Storage support for repositories.'
  classname 'org.elasticsearch.repositories.gcs.GoogleCloudStoragePlugin'
}

dependencies {
  compile 'com.google.cloud:google-cloud-storage:1.104.0'
  compile 'com.google.cloud:google-cloud-core:1.92.5'
  compile 'com.google.guava:guava:26.0-jre'
  compile 'com.google.http-client:google-http-client:1.34.2'
  compile "org.apache.httpcomponents:httpclient:${versions.httpclient}"
  compile "org.apache.httpcomponents:httpcore:${versions.httpcore}"
  compile "commons-logging:commons-logging:${versions.commonslogging}"
  compile "org.apache.logging.log4j:log4j-1.2-api:${versions.log4j}"
  compile "commons-codec:commons-codec:${versions.commonscodec}"
  compile 'com.google.api:api-common:1.8.1'
  compile 'com.google.api:gax:1.45.0'
  compile 'org.threeten:threetenbp:1.3.3'
  compile 'com.google.protobuf:protobuf-java-util:3.11.3'
  compile 'com.google.protobuf:protobuf-java:3.11.3'
  compile 'com.google.code.gson:gson:2.7'
  compile 'com.google.api.grpc:proto-google-common-protos:1.16.0'
  compile 'com.google.api.grpc:proto-google-iam-v1:0.12.0'
  compile 'com.google.cloud:google-cloud-core-http:1.77.0'
  compile 'com.google.auth:google-auth-library-credentials:0.20.0'
  compile 'com.google.auth:google-auth-library-oauth2-http:0.20.0'
  compile 'com.google.oauth-client:google-oauth-client:1.28.0'
  compile 'com.google.api-client:google-api-client:1.30.8'
  compile 'com.google.http-client:google-http-client-appengine:1.29.2'
  compile 'com.google.http-client:google-http-client-jackson2:1.29.2'
  compile 'com.google.api:gax-httpjson:0.62.0'
  compile 'io.grpc:grpc-context:1.12.0'
  compile 'io.opencensus:opencensus-api:0.18.0'
  compile 'io.opencensus:opencensus-contrib-http-util:0.18.0'
  compile 'com.google.apis:google-api-services-storage:v1-rev20191011-1.30.3'

  testCompile project(':test:fixtures:gcs-fixture')
}

dependencyLicenses {
  mapping from: /google-cloud-.*/, to: 'google-cloud'
  mapping from: /google-auth-.*/, to: 'google-auth'
  mapping from: /google-http-.*/, to: 'google-http'
  mapping from: /opencensus.*/, to: 'opencensus'
  mapping from: /http.*/, to: 'httpclient'
  mapping from: /protobuf.*/, to: 'protobuf'
  mapping from: /proto-google.*/, to: 'proto-google'
}

thirdPartyAudit {
  ignoreViolations(
    // uses internal java api: sun.misc.Unsafe
    'com.google.protobuf.UnsafeUtil',
    'com.google.protobuf.UnsafeUtil$1',
    'com.google.protobuf.UnsafeUtil$JvmMemoryAccessor',
    'com.google.protobuf.UnsafeUtil$MemoryAccessor',
    'com.google.protobuf.MessageSchema',
    'com.google.protobuf.UnsafeUtil$Android32MemoryAccessor',
    'com.google.protobuf.UnsafeUtil$Android64MemoryAccessor',
    'com.google.common.cache.Striped64',
    'com.google.common.cache.Striped64$1',
    'com.google.common.cache.Striped64$Cell',
    'com.google.common.hash.Striped64',
    'com.google.common.hash.Striped64$1',
    'com.google.common.hash.Striped64$Cell',
    'com.google.common.hash.LittleEndianByteArray$UnsafeByteArray',
    'com.google.common.hash.LittleEndianByteArray$UnsafeByteArray$1',
    'com.google.common.hash.LittleEndianByteArray$UnsafeByteArray$2',
    'com.google.common.hash.LittleEndianByteArray$UnsafeByteArray$3',
    'com.google.common.util.concurrent.AbstractFuture$UnsafeAtomicHelper',
    'com.google.common.util.concurrent.AbstractFuture$UnsafeAtomicHelper$1',
    'com.google.common.hash.LittleEndianByteArray$UnsafeByteArray',
    'com.google.common.primitives.UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator',
    'com.google.common.primitives.UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator$1',
  )

  ignoreMissingClasses(
    'com.google.appengine.api.datastore.Blob',
    'com.google.appengine.api.datastore.DatastoreService',
    'com.google.appengine.api.datastore.DatastoreServiceFactory',
    'com.google.appengine.api.datastore.Entity',
    'com.google.appengine.api.datastore.Key',
    'com.google.appengine.api.datastore.KeyFactory',
    'com.google.appengine.api.datastore.PreparedQuery',
    'com.google.appengine.api.datastore.Query',
    'com.google.appengine.api.memcache.Expiration',
    'com.google.appengine.api.memcache.MemcacheService',
    'com.google.appengine.api.memcache.MemcacheServiceFactory',
    'com.google.appengine.api.urlfetch.FetchOptions$Builder',
    'com.google.appengine.api.urlfetch.FetchOptions',
    'com.google.appengine.api.urlfetch.HTTPHeader',
    'com.google.appengine.api.urlfetch.HTTPMethod',
    'com.google.appengine.api.urlfetch.HTTPRequest',
    'com.google.appengine.api.urlfetch.HTTPResponse',
    'com.google.appengine.api.urlfetch.URLFetchService',
    'com.google.appengine.api.urlfetch.URLFetchServiceFactory',
    // commons-logging optional dependencies
    'org.apache.avalon.framework.logger.Logger',
    'org.apache.log.Hierarchy',
    'org.apache.log.Logger',
    // commons-logging provided dependencies
    'javax.servlet.ServletContextEvent',
    'javax.servlet.ServletContextListener'
  )
}

check {
  // also execute the QA tests when testing the plugin
  dependsOn 'qa:google-cloud-storage:check'
}