/*
 * Copyright 2015 Vincent Brison.
 *
 * Licensed 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.
 */

def configDir = "${project.rootDir}/config"
def reportsDir = "${project.buildDir}/reports"

//------------------------Checkstyle------------------------//

apply plugin: 'checkstyle'

checkstyle.toolVersion = '7.6.1'

task checkstyle(type: Checkstyle) {
    configFile file("$configDir/checkstyle.xml")

    ignoreFailures false // Fail early
    showViolations true

    source 'src'
    include '**/*.java'
    exclude '**/gen/**'
    classpath = files()
}

//------------------------Findbugs------------------------//

apply plugin: 'findbugs'

task findbugs(type: FindBugs, dependsOn: "assembleDebug") {

    ignoreFailures false // Fail early
    effort = 'max'

    // Reporting only high priority problems {Possible reportLevels: 'high', 'medium', 'low'}
    reportLevel = 'high'

    excludeFilter = new File("$configDir/findbugs-filter.xml")
    classes = files("${project.rootDir}/skunkworks_crow/build/intermediates/javac")

    source 'src'
    include '**/*.java'
    exclude '**/gen/**'

    reports {
        xml.enabled = false
        html.enabled = true
        xml {
            setDestination new File("$reportsDir/findbugs/findbugs.xml")
        }
        html {
            setDestination new File("$reportsDir/findbugs/findbugs.html")
        }
    }

    classpath = files()
}

//------------------------Pmd------------------------//

apply plugin: 'pmd'

task pmd(type: Pmd) {
    ignoreFailures = false // Fail early
    ruleSetFiles = files("$configDir/pmd-ruleset.xml")
    ruleSets = []

    source 'src'
    include '**/*.java'
    exclude '**/gen/**'

    reports {
        xml.enabled = false
        html.enabled = true
        xml {
            setDestination new File("$reportsDir/pmd/pmd.xml")
        }
        html {
            setDestination new File("$reportsDir/pmd/pmd.html")
        }
    }
}

//------------------------Lint------------------------//

android {
    lintOptions {
        abortOnError true
        xmlReport true
        htmlReport true
        lintConfig file("$configDir/lint.xml")
        htmlOutput file("$reportsDir/lint/lint-result.html")
        xmlOutput file("$reportsDir/lint/lint-result.xml")
    }
}

//------------------------ ALL ------------------------//
task checkCode(type: GradleBuild) {
    tasks = ['checkstyle', 'lint', 'findbugs', 'testDebugUnitTest']
}
