/**
 * 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.
 */
allprojects {
    apply plugin: 'idea'
    apply plugin: 'eclipse'
}

idea {
    project {
        languageLevel = '1.7'
		ipr {
			withXml { provider ->
			        provider.node.component
			                .find { it.@name == 'VcsDirectoryMappings' }
			                .mapping.@vcs = 'Git'
			    }
		}
    }
}

subprojects {

    apply plugin: 'java'
    apply plugin: 'application'
    apply from: "$rootDir/gradle/spock.gradle"
    apply from: "$rootDir/gradle/quality.gradle"

    sourceCompatibility = '1.7'
    targetCompatibility = '1.7'

    [compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

    mainClassName = "org.apache.myriad.Main"

    group = "org.apache.myriad"
    version = "0.1.0"

    ext {
        mesosVer = "0.24.1"
        hadoopVer = "2.7.0"
        metricsVer = "3.1.0"
    }

    configurations.create('myriadExecutorConf')

    configurations {
        provided
        capsule
        myriadExecutorConf
        myriadExecutorConf.transitive = false
    }

    repositories {
        mavenLocal()
        mavenCentral()
    }

    dependencies {
        capsule "co.paralleluniverse:capsule:0.7.1"
    	myriadExecutorConf 'org.slf4j:slf4j-log4j12:1.7.10'

        compile "org.apache.mesos:mesos:${mesosVer}"
        compile 'com.google.code.gson:gson:2.3.1'        // marshalling between the scheduler and executor


        testCompile 'junit:junit:4.12'
        testCompile 'commons-collections:commons-collections:3.2.1'
    }


    run {
        systemProperty "myriad.config", "build/resources/main/myriad-config-default.yml"
    }
}
