/*
 * 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 S3 repository plugin adds S3 repositories'
  classname 'org.elasticsearch.plugin.repository.s3.S3RepositoryPlugin'
}

versions << [
  'aws': '1.10.69'
]

dependencies {
  compile "com.amazonaws:aws-java-sdk-s3:${versions.aws}"
  compile "com.amazonaws:aws-java-sdk-kms:${versions.aws}"
  compile "com.amazonaws:aws-java-sdk-core:${versions.aws}"
  compile "org.apache.httpcomponents:httpclient:${versions.httpclient}"
  compile "org.apache.httpcomponents:httpcore:${versions.httpcore}"
  compile "commons-logging:commons-logging:${versions.commonslogging}"
  compile "commons-codec:commons-codec:${versions.commonscodec}"
  compile "com.fasterxml.jackson.core:jackson-databind:2.5.3"
  compile "com.fasterxml.jackson.core:jackson-annotations:2.5.0"

  // HACK: javax.xml.bind was removed from default modules in java 9, so we pull the api in here,
  // and whitelist this hack in JarHell 
  compile 'javax.xml.bind:jaxb-api:2.2.2'
}

dependencyLicenses {
  mapping from: /aws-java-sdk-.*/, to: 'aws-java-sdk'
  mapping from: /jackson-.*/, to: 'jackson'
  mapping from: /jaxb-.*/, to: 'jaxb'
}

bundlePlugin {
  from('config/repository-s3') {
    into 'config'
  }
}

test {
  // this is needed for insecure plugins, remove if possible!
  systemProperty 'tests.artifact', project.name
}

thirdPartyAudit.excludes = [
  // classes are missing
  'javax.servlet.ServletContextEvent', 
  'javax.servlet.ServletContextListener', 
  'org.apache.avalon.framework.logger.Logger', 
  'org.apache.log.Hierarchy', 
  'org.apache.log.Logger',

  // jarhell with jdk (intentionally, because jaxb was removed from default modules in java 9)
  'javax.xml.bind.Binder',
  'javax.xml.bind.ContextFinder$1',
  'javax.xml.bind.ContextFinder',
  'javax.xml.bind.DataBindingException',
  'javax.xml.bind.DatatypeConverter',
  'javax.xml.bind.DatatypeConverterImpl$CalendarFormatter',
  'javax.xml.bind.DatatypeConverterImpl',
  'javax.xml.bind.DatatypeConverterInterface',
  'javax.xml.bind.Element',
  'javax.xml.bind.GetPropertyAction',
  'javax.xml.bind.JAXB$Cache',
  'javax.xml.bind.JAXB',
  'javax.xml.bind.JAXBContext',
  'javax.xml.bind.JAXBElement$GlobalScope',
  'javax.xml.bind.JAXBElement',
  'javax.xml.bind.JAXBException',
  'javax.xml.bind.JAXBIntrospector',
  'javax.xml.bind.JAXBPermission',
  'javax.xml.bind.MarshalException',
  'javax.xml.bind.Marshaller$Listener',
  'javax.xml.bind.Marshaller',
  'javax.xml.bind.Messages',
  'javax.xml.bind.NotIdentifiableEvent',
  'javax.xml.bind.ParseConversionEvent',
  'javax.xml.bind.PrintConversionEvent',
  'javax.xml.bind.PropertyException',
  'javax.xml.bind.SchemaOutputResolver',
  'javax.xml.bind.TypeConstraintException',
  'javax.xml.bind.UnmarshalException',
  'javax.xml.bind.Unmarshaller$Listener',
  'javax.xml.bind.Unmarshaller',
  'javax.xml.bind.UnmarshallerHandler',
  'javax.xml.bind.ValidationEvent',
  'javax.xml.bind.ValidationEventHandler',
  'javax.xml.bind.ValidationEventLocator',
  'javax.xml.bind.ValidationException',
  'javax.xml.bind.Validator',
  'javax.xml.bind.WhiteSpaceProcessor',
  'javax.xml.bind.annotation.DomHandler',
  'javax.xml.bind.annotation.W3CDomHandler',
  'javax.xml.bind.annotation.XmlAccessOrder',
  'javax.xml.bind.annotation.XmlAccessType',
  'javax.xml.bind.annotation.XmlAccessorOrder',
  'javax.xml.bind.annotation.XmlAccessorType',
  'javax.xml.bind.annotation.XmlAnyAttribute',
  'javax.xml.bind.annotation.XmlAnyElement',
  'javax.xml.bind.annotation.XmlAttachmentRef',
  'javax.xml.bind.annotation.XmlAttribute',
  'javax.xml.bind.annotation.XmlElement$DEFAULT',
  'javax.xml.bind.annotation.XmlElement',
  'javax.xml.bind.annotation.XmlElementDecl$GLOBAL',
  'javax.xml.bind.annotation.XmlElementDecl',
  'javax.xml.bind.annotation.XmlElementRef$DEFAULT',
  'javax.xml.bind.annotation.XmlElementRef',
  'javax.xml.bind.annotation.XmlElementRefs',
  'javax.xml.bind.annotation.XmlElementWrapper',
  'javax.xml.bind.annotation.XmlElements',
  'javax.xml.bind.annotation.XmlEnum',
  'javax.xml.bind.annotation.XmlEnumValue',
  'javax.xml.bind.annotation.XmlID',
  'javax.xml.bind.annotation.XmlIDREF',
  'javax.xml.bind.annotation.XmlInlineBinaryData',
  'javax.xml.bind.annotation.XmlList',
  'javax.xml.bind.annotation.XmlMimeType',
  'javax.xml.bind.annotation.XmlMixed',
  'javax.xml.bind.annotation.XmlNs',
  'javax.xml.bind.annotation.XmlNsForm',
  'javax.xml.bind.annotation.XmlRegistry',
  'javax.xml.bind.annotation.XmlRootElement',
  'javax.xml.bind.annotation.XmlSchema',
  'javax.xml.bind.annotation.XmlSchemaType$DEFAULT',
  'javax.xml.bind.annotation.XmlSchemaType',
  'javax.xml.bind.annotation.XmlSchemaTypes',
  'javax.xml.bind.annotation.XmlSeeAlso',
  'javax.xml.bind.annotation.XmlTransient',
  'javax.xml.bind.annotation.XmlType$DEFAULT',
  'javax.xml.bind.annotation.XmlType',
  'javax.xml.bind.annotation.XmlValue',
  'javax.xml.bind.annotation.adapters.CollapsedStringAdapter',
  'javax.xml.bind.annotation.adapters.HexBinaryAdapter',
  'javax.xml.bind.annotation.adapters.NormalizedStringAdapter',
  'javax.xml.bind.annotation.adapters.XmlAdapter',
  'javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter$DEFAULT',
  'javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter',
  'javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters',
  'javax.xml.bind.attachment.AttachmentMarshaller',
  'javax.xml.bind.attachment.AttachmentUnmarshaller',
  'javax.xml.bind.helpers.AbstractMarshallerImpl',
  'javax.xml.bind.helpers.AbstractUnmarshallerImpl',
  'javax.xml.bind.helpers.DefaultValidationEventHandler',
  'javax.xml.bind.helpers.Messages',
  'javax.xml.bind.helpers.NotIdentifiableEventImpl',
  'javax.xml.bind.helpers.ParseConversionEventImpl',
  'javax.xml.bind.helpers.PrintConversionEventImpl',
  'javax.xml.bind.helpers.ValidationEventImpl',
  'javax.xml.bind.helpers.ValidationEventLocatorImpl',
  'javax.xml.bind.util.JAXBResult',
  'javax.xml.bind.util.JAXBSource$1',
  'javax.xml.bind.util.JAXBSource',
  'javax.xml.bind.util.Messages',
  'javax.xml.bind.util.ValidationEventCollector'
]

// AWS SDK is exposing some deprecated methods which we call using a delegate:
// * setObjectRedirectLocation(String bucketName, String key, String newRedirectLocation)
// * changeObjectStorageClass(String bucketName, String key, StorageClass newStorageClass)
compileTestJava.options.compilerArgs << "-Xlint:-deprecation"