// Plugins
plugins {
    id 'java'
    id 'application'
}

/* Meta Data Info */
def title = 'Apache Wave Server'
def vendor = 'The Apache Software Foundation'

/* 3rd Part Repositories */
repositories {
    mavenCentral()
    maven {
        url 'http://archiva.comunes.org/repository/comunes-snapshots/'
    }
    maven {
        url 'https://oauth.googlecode.com/svn/code/maven/'
    }
    maven {
        url 'https://oss.sonatype.org/content/repositories/google-snapshots/'
    }

}

mainClassName = "org.waveprotocol.box.server.ServerMain"
applicationDefaultJvmArgs = [
        "-Xmx1024M",
        "-Dorg.eclipse.jetty.LEVEL=DEBUG",
        "-Djava.security.auth.login.config=jaas.config"
]

configurations {
    compile {
        description = 'compile classpath'
    }
    generateGXP {
        description = 'classpath for generating GXP files'
    }
    gwt {
        description = 'classpath for compiling the gwt sources'
    }
}



/* Project Dependencies */
dependencies {
    // code-gen
    compile(
            [group: "org.antlr", name: "antlr", version: "3.2"],
            //TODO(wisebaldone) renable when gwt using jetty 9
            //[group: "com.google.gwt", name: "gwt-dev", version: "2.8.0"],
            //[group: "com.google.gwt", name: "gwt-user", version: "2.8.0"],
            //[group: "com.google.gwt", name: "gwt-codeserver", version: "2.8.0"],
            [group: "org.apache.velocity", name: "velocity", version: "1.6.3"]
    )

    gwt(
            [group: "org.antlr", name: "antlr", version: "3.2"],
            [group: "org.apache.velocity", name: "velocity", version: "1.6.3"]
    )
    // compile
    compile (
            [group: "aopalliance", name: "aopalliance", version: "1.0"],
            [group: "org.bouncycastle", name: "bcprov-jdk16", version: "1.45"],
            [group: "commons-fileupload", name: "commons-fileupload", version: "1.2.2"],
            [group: "commons-cli", name: "commons-cli", version: "1.2"],
            [group: "commons-codec", name: "commons-codec", version: "1.4"],
            [group: "commons-io", name: "commons-io", version: "2.4"],
            [group: "commons-collections", name: "commons-collections", version: "3.2.1"],
            [group: "commons-configuration", name: "commons-configuration", version: "1.6"],
            [group: "commons-httpclient", name: "commons-httpclient", version: "3.1"],
            [group: "commons-lang", name: "commons-lang", version: "2.5"],
            [group: "commons-logging", name: "commons-logging-api", version: "1.1"],
            [group: "commons-logging", name: "commons-logging", version: "1.1.1"],
            [group: "dom4j", name: "dom4j", version: "1.6.1"],
            [group: "com.google.code.gson", name: "gson", version: "2.2.4"],
            [group: "com.google.guava", name: "guava", version: "15.0"],
            [group: "com.google.guava", name: "guava-gwt", version: "15.0"],
            [group: "com.google.inject.extensions", name: "guice-assistedinject", version: "3.0"],
            [group: "com.google.inject.extensions", name: "guice-servlet", version: "3.0"],
            [group: "com.google.inject", name: "guice", version: "3.0"],
            [group: "javax.inject", name: "javax.inject", version: "1"],
            [group: "com.google.gxp", name: "google-gxp", version: "0.2.4-beta"],
            [group: "javax.jdo", name: "jdo2-api", version: "2.1"],
            [group: "org.jdom", name: "jdom", version: "1.1.3"],
            [group: "com.google.code.findbugs", name: "jsr305", version: "2.0.1"],
            [group: "jline", name: "jline", version: "0.9.94"],
            [group: "joda-time", name: "joda-time", version: "1.6"],
            [group: "org.apache.lucene", name: "lucene-core", version: "3.5.0"],
            [group: "org.mongodb", name: "mongo-java-driver", version: "2.11.2"],
            [group: "net.oauth.core", name: "oauth-provider", version: "20100527"],
            [group: "net.oauth.core", name: "oauth", version: "20100527"],
            [group: "net.oauth.core", name: "oauth-consumer", version: "20100527"],
            [group: "com.google.protobuf", name: "protobuf-java", version: "2.5.0"],
            [group: "com.googlecode.protobuf-java-format", name: "protobuf-java-format", version: "1.2"],
            [group: "org.igniterealtime", name: "tinder", version: "1.2.1"],
            [group: "xpp3", name: "xpp3", version: "1.1.4c"],
            [group: "xpp3", name: "xpp3_xpath", version: "1.1.4c"],
            [group: "org.gnu.inet", name: "libidn", version: "1.15"],
            [group: "cc.kune", name: "gwt-initials-avatars-shared", version: "1.0-SNAPSHOT"],
            [group: "cc.kune", name: "gwt-initials-avatars-server", version: "1.0-SNAPSHOT"],
            [group: "com.typesafe", name: "config", version: "1.2.1"],
            [group: "xerces", name: "xerces", version: "2.4.0"],
            [group: "org.slf4j", name: "slf4j-api", version: "1.6.1"],
            [group: "org.slf4j", name: "slf4j-simple", version: "1.6.1"],
            [group: "org.eclipse.jetty", name: "jetty-annotations", version: "9.1.1.v20140108"],
            [group: "org.eclipse.jetty", name: "jetty-client", version: "9.1.1.v20140108"],
            [group: "org.eclipse.jetty", name: "jetty-continuation", version: "9.1.1.v20140108"],
            [group: "org.eclipse.jetty", name: "jetty-http", version: "9.1.1.v20140108"],
            [group: "org.eclipse.jetty", name: "jetty-io", version: "9.1.1.v20140108"],
            [group: "org.eclipse.jetty", name: "jetty-proxy", version: "9.1.1.v20140108"],
            [group: "org.eclipse.jetty", name: "jetty-security", version: "9.1.1.v20140108"],
            [group: "org.eclipse.jetty", name: "jetty-server", version: "9.1.1.v20140108"],
            [group: "org.eclipse.jetty", name: "jetty-servlet", version: "9.1.1.v20140108"],
            [group: "org.eclipse.jetty", name: "jetty-servlets", version: "9.1.1.v20140108"],
            [group: "org.eclipse.jetty", name: "jetty-util", version: "9.1.1.v20140108"],
            [group: "org.eclipse.jetty", name: "jetty-webapp", version: "9.1.1.v20140108"],
            [group: "org.eclipse.jetty", name: "jetty-xml", version: "9.1.1.v20140108"],
            [group: "org.eclipse.jetty.websocket", name: "websocket-api", version: "9.1.1.v20140108"],
            [group: "org.eclipse.jetty.websocket", name: "websocket-client", version: "9.1.1.v20140108"],
            [group: "org.eclipse.jetty.websocket", name: "websocket-common", version: "9.1.1.v20140108"],
            [group: "org.eclipse.jetty.websocket", name: "websocket-server", version: "9.1.1.v20140108"],
            [group: "org.eclipse.jetty.websocket", name: "websocket-servlet", version: "9.1.1.v20140108"],
            //TODO: Following are included due to tests being in the main src directory
            [group: "org.mockito", name: "mockito-all", version: "1.9.5"],
            [group: "org.hamcrest", name: "hamcrest-all", version: "1.3"]

    )
    compile fileTree(dir: 'dependencies/compile', include: "**/*.jar")
    compile fileTree(dir: '../wave-proto/build/libs', include: "**/*.jar")

    generateGXP (
        [group: "com.google.gxp", name: "google-gxp", version: "0.2.4-beta"]
    )

    // tests
    testCompile(
            [group: 'junit', name: 'junit', version: '4.11'],
            [group: "org.ow2.asm", name: "asm", version: "5.0.4"],
            [group: "cglib", name: "cglib", version: "2.2"],
            [group: "com.novocode", name: "junit-interface", version: "0.11"],
            [group: "emma", name: "emma", version: "2.0.5312"],
            [group: "emma", name: "emma_ant", version: "2.1.5320"],
            [group: "org.hamcrest", name: "hamcrest-all", version: "1.3"],
            [group: "org.jmock", name: "jmock-junit3", version: "2.6.0"],
            [group: "org.jmock", name: "jmock", version: "2.6.0"],
            [group: "org.mockito", name: "mockito-all", version: "1.9.5"]
    )
}

/* Source Sets */
sourceSets {
    main {
        java {
            srcDirs = [
                    'src/main/java',
                    'src/generated/gxp',
                    'src/generated/messages'
            ]
        }
        resources {
            srcDir 'src/main/resources'
        }
    }

    test {
        java {
            srcDir 'src/test/java'
        }
        resources {
            srcDir 'src/test/resources'
        }
    }
}

task generateMessages {
    description = 'Generates source files from Antlr String types and protobuf'
    FileTree inputFiles = fileTree(dir: '../wave-proto/build/classes/main/', include: '**/*.class')
    inputs.property "files", inputFiles
    File outputDir = file("src/generated/messages")
    outputs.dir outputDir
    doLast {
        List<String> proto_classes = [
                "../wave-proto/build/classes/main/org/waveprotocol/box/common/comms/WaveClientRpc.class",
                "../wave-proto/build/classes/main/org/waveprotocol/box/search/SearchProto.class",
                "../wave-proto/build/classes/main/org/waveprotocol/box/profile/ProfilesProto.class",
                "../wave-proto/build/classes/main/org/waveprotocol/box/server/rpc/Rpc.class",
                "../wave-proto/build/classes/main/org/waveprotocol/box/attachment/AttachmentProto.class",
                "../wave-proto/build/classes/main/org/waveprotocol/wave/federation/Proto.class",
                "../wave-proto/build/classes/main/org/waveprotocol/wave/concurrencycontrol/ClientServer.class",
                "../wave-proto/build/classes/main/org/waveprotocol/wave/diff/Diff.class"
        ]
        List<String> templates = [
                "src/main/java/org/waveprotocol/pst/templates/api/api.st",
                "src/main/java/org/waveprotocol/pst/templates/builder/builder.st",
                "src/main/java/org/waveprotocol/pst/templates/pojo/pojo.st",
                "src/main/java/org/waveprotocol/pst/templates/jso/jso.st",
                "src/main/java/org/waveprotocol/pst/templates/util/util.st",
                "src/main/java/org/waveprotocol/pst/templates/gson/gson.st",
                "src/main/java/org/waveprotocol/pst/templates/proto/proto.st"
        ]
        proto_classes.each { proto ->
            javaexec {
                main = "org.waveprotocol.pst.PstMain"
                classpath += configurations.compile
                args = [
                        '-s',
                        'pst',
                        '-d',
                        'src/generated/messages',
                        '-f',
                        proto
                ]
                args += templates
            }
        }
    }
}

task generateGXP {
    description = 'Generate source files from GXP prototypes'
    FileTree inputFiles = fileTree(dir: 'src/main/gxp', include: '**/*.gxp')
    inputs.property "files", inputFiles
    File outputDir = file("src/generated/gxp")
    outputs.dir outputDir
    doLast {
        javaexec {
            main = "com.google.gxp.compiler.cli.Gxpc"
            classpath += configurations.generateGXP
            args = [
                    "--dir",
                    "src/generated/gxp",
                    "--source",
                    "src/main/gxp",
                    "--output_language",
                    "java"
            ]
            args += fileTree(dir: 'src/main/gxp', include: '**/*.gxp').getFiles()
        }
    }
}

task compileGwt {
    description = 'Compiles the GWT sources for production'
    doLast {
        javaexec {
            main = "com.google.gwt.dev.Compiler"
            classpath {
                [
                        sourceSets.main.java.srcDirs,
                        sourceSets.main.compileClasspath,
                        sourceSets.main.resources.srcDirs,
                        configurations.gwt
                ]
            }
            args = [
                    "-style", "OBFUSCATED",
                    "-XdisableClassMetadata",
                    "-XdisableCastChecking",
                    "-localWorkers", "4",
                    "org.waveprotocol.box.webclient.WebClientProd"
            ]
        }
    }
}

compileGwt.mustRunAfter compileJava
run.dependsOn compileGwt

task compileGwtDemo {
    description = 'Compiles the GWT sources for Demo'
    doLast {
        javaexec {
            main = "com.google.gwt.dev.Compiler"
            classpath {
                [
                        sourceSets.main.java.srcDirs,
                        sourceSets.main.compileClasspath,
                        configurations.gwt
                ]
            }
            args = [
                    "-style", "Pretty",
                    "-ea",
                    "org.waveprotocol.box.webclient.WebClientDemo"
            ]
        }
    }
}

task compileGwtDev {
    description = 'Compiles the GWT sources for Development'
    doLast {
        javaexec {
            main = "com.google.gwt.dev.Compiler"
            classpath {
                [
                        sourceSets.main.java.srcDirs,
                        sourceSets.main.compileClasspath,
                        configurations.gwt
                ]
            }
            args = [
                    "-style", "PRETTY",
                    "-draftCompile",
                    "-ea",
                    "org.waveprotocol.box.webclient.WebClientDev"
            ]
        }
    }
}

task extractApi(type: Copy) {
    from {
        configurations.compile.collect { zipTree(it) }
    } into "$buildDir/api"
}

extractApi.mustRunAfter compileJava

compileJava.dependsOn = [generateMessages, generateGXP]

/* Test Tasks */

test {
    include "**/*Test*"
    exclude "**/*GwtTest*"
    exclude "**/server/persistence/mongodb/**/*Test*"
    exclude "**/*LargeTest*"

    minHeapSize = "512m"
    maxHeapSize = "1024m"

    doFirst {
        println ''
        println '---------------------'
        println ' Running unit tests. '
        println '---------------------'
        println ''
    }
}

/* TODO(wisebaldone) not working due to gwt conflict talked about above, cant
    have everything on classpath because 2 jetty versions. */
task testGwt(type: Test) {
    include "**/*GwtTest*"

    minHeapSize = "512m"
    maxHeapSize = "1024m"
    forkEvery = 1

    doFirst {
        println ''
        println '--------------------'
        println ' Running Gwt tests. '
        println '--------------------'
        println ''
    }
}

testGwt.dependsOn compileGwt

task testMongo(type: Test) {
    include "**/server/persistence/mongodb/**/*Test*"

    doFirst {
        println ''
        println '--------------------------'
        println ' Testing MongoDB backend. '
        println '--------------------------'
        println ''
    }
}

testMongo.dependsOn compileJava

task testLarge(type: Test) {
    include "**/*LargeTest*"

    doFirst {
        println ''
        println '-------------------------------'
        println '     Testing Large Tests.      '
        println 'These tests may take some time.'
        println '-------------------------------'
        println ''
    }
}

testLarge.dependsOn compileJava

task testAll() {
    doFirst {
        println ''
        println '--------------------------'
        println '     Tests completed.     '
        println '--------------------------'
        println ''
    }
}

testAll.dependsOn compileJava, compileGwt
testAll.dependsOn test, testMongo, testLarge, testGwt

testGwt.mustRunAfter compileGwt, testLarge
testMongo.mustRunAfter compileJava, test
testLarge.mustRunAfter test

ant.importBuild 'server-config.xml'


jar {
    manifest {
        attributes "Specification-Vendor": vendor,
                "Specification-Title": title,
                "Specification-Version": version,
                "Implementation-Vendor": vendor,
                "Implementation-Title": title,
                "Implementation-Version": version,
                "Built-By": "No one in particular",
                "Main-Class": mainClassName
    }
    from "$buildDir/api"
    include "META-INF/services/*"
    include "com/mongodb/**/*"
    include "org/slf4j/**/*"
    include "org/atmosphere/**/*"
    include "com/google/common/**/*"
    include "com/google/gson/**/*"
    include "com/google/gxp/**/*"
    include "com/google/gwt/core/server/**/*"
    include "com/google/gwt/core/shared/**/*"
    include "com/google/gwt/logging/**/*"
    include "com/google/gwt/user/server/**/*"
    include "com/google/gwt/user/client/rpc/**/*"
    include "com/google/inject/**/*"
    include "com/google/protobuf/**/*"
    include "com/google/wave/**/*"
    include "com/typesafe/**/*"
    include "gnu/inet/**/*"
    include "javax/inject/**/*"
    include "javax/servlet/**/*"
    include "javax/xml/**/*"
    include "net/oauth/**/*"
    include "org/aopalliance/**/*"
    include "org/apache/commons/cli/**/*"
    include "org/apache/commons/codec/**/*"
    include "org/apache/commons/collections/**/*"
    include "org/apache/commons/configuration/**/*"
    include "org/apache/commons/fileupload/**/*"
    include "org/apache/commons/httpclient/**/*"
    include "org/apache/commons/lang/**/*"
    include "org/apache/commons/logging/**/*"
    include "org/apache/lucene/**/*"
    include "org/apache/commons/io/**/*"
    include "org/apache/xerces/**/*"
    include "org/bson/**/*"
    include "org/dom4j/**/*"
    include "org/eclipse/**/*"
    include "org/jdom/**/*"
    include "org/jivesoftware/**/*"
    include "org/joda/time/**/*"
    include "org/json/**/*"
    include "org/waveprotocol/**/*"
    include "org/xmlpull/**/*"
    include "org/xmpp/**/*"
    include "cc/kune/initials/**/*"
    exclude "org/waveprotocol/box/webclient/**/*"
    exclude "org/waveprotocol/box/consoleclient/**/*"
    exclude "org/waveprotocol/box/expimp/**/*"
    exclude "org/waveprotocol/wave/client/*"
    exclude "org/waveprotocol/wave/client/account/**/*"
    exclude "org/waveprotocol/wave/client/autohide/**/*"
    exclude "org/waveprotocol/wave/client/clipboard/**/*"
    exclude "org/waveprotocol/wave/client/common/**/*"
    exclude "org/waveprotocol/wave/client/concurrencycontrol/**/*"
    exclude "org/waveprotocol/wave/client/debug/**/*"
    exclude "org/waveprotocol/wave/client/doodad/**/*"
    exclude "org/waveprotocol/wave/client/paging/**/*"
    exclude "org/waveprotocol/wave/client/render/**/*"
    exclude "org/waveprotocol/wave/client/scheduler/**/*"
    exclude "org/waveprotocol/wave/client/scroll/**/*"
    exclude "org/waveprotocol/wave/client/state/**/*"
    exclude "org/waveprotocol/wave/client/testing/**/*"
    exclude "org/waveprotocol/wave/client/uibuilder/**/*"
    exclude "org/waveprotocol/wave/client/uibuilder/**/*"
    exclude "org/waveprotocol/wave/client/util/**/*"
    exclude "org/waveprotocol/wave/client/wave/**/*"
    exclude "org/waveprotocol/wave/client/wavepanel/**/*"
    exclude "org/waveprotocol/wave/client/widget/**/*"
    exclude "com/google/api/client/**/*"
}

jar.dependsOn compileJava, compileGwt, extractApi