def packageConfiguration(configurationName, configuration, target) {
    println "Copy the ${configurationName} artifacts:"
    configuration.each { File file -> println file.name }
    println "to '${target}'."
    copy {
        from configuration into target
        // TODO - gradle-build remove backward compatibility? Why an underscore?
        // replace first hyphen with underscore
        rename(/(.+?)-(.+)/, '$1_$2')
    }
}

configure([
        project(':packaging:nano'),
        project(':packaging:kernel'),
        project(':packaging:tomcat-server'),
]) {
    dependencies {
        // TODO - rename to virgoLib, virgoLibPersistence, virgoLibEndorsed and virgoPickup?!
        nanoLib project(':kernel:org.eclipse.virgo.kernel.equinox.extensions')
        nanoLib project(':nano:org.eclipse.virgo.nano.authentication')
        nanoLib project(':nano:org.eclipse.virgo.nano.shutdown')
        nanoLib project(':util:org.eclipse.virgo.util.env')
        nanoLib group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.launcher", version: equinoxLauncherVersion, configuration: "compile", ext: "jar"

        nanoLibPersistence project(':web:org.eclipse.virgo.web.enterprise.openejb.jpa.integration')

        nanoLibEndorsed 'javax.annotation:javax.annotation-api'
        nanoLibEndorsed group: "javax.interceptor", name: "javax.interceptor-api", version: javaxInterceptorVersion
        nanoLibEndorsed 'javax.transaction:javax.transaction-api'

        nanoPickup project(':kernel:org.eclipse.virgo.management.console')
    }
}

project(':packaging:nano') { dependencies {} }

if (System.properties['skip.smoke.tests'] != 'true') {
    project(':packaging:nano:org.eclipse.virgo.nano.smoketest') { dependencies {} }
}

configure([
        project(':packaging:kernel'),
        project(':packaging:tomcat-server'),
]) {
    dependencies {
        kernelPluginsExtras project(':kernel:org.eclipse.virgo.kernel.userregion')

        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.eclipse.osgi.services", version: osgiServicesVersion, configuration: "compile", ext: "jar"
        repositoryExt 'org.osgi:osgi.enterprise' // contains org.osgi.jmx
        repositoryExt 'org.osgi:org.osgi.service.useradmin:1.1.0'
        repositoryExt 'org.osgi:org.osgi.service.provisioning:1.2.0'

        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.ds", version: equinoxDsVersion, configuration: "compile", ext: "jar"
        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.util", version: equinoxUtilVersion, configuration: "compile", ext: "jar"
        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.region", version: equinoxRegionVersion, configuration: "compile", ext: "jar"

        repositoryExt files("../../3rd-party/build/plugins/oevm.aopalliance.aopalliance_${aopallianceVersion}.jar")
        repositoryExt 'commons-codec:commons-codec'
        repositoryExt files("../../3rd-party/build/plugins/oevm.org.springframework.aop_${springframeworkVersion}.jar")
        repositoryExt files("../../3rd-party/build/plugins/oevm.org.springframework.beans_${springframeworkVersion}.jar")
        repositoryExt files("../../3rd-party/build/plugins/oevm.org.springframework.context_${springframeworkVersion}.jar")
        repositoryExt files("../../3rd-party/build/plugins/oevm.org.springframework.core_${springframeworkVersion}.jar")
        repositoryExt files("../../3rd-party/build/plugins/oevm.org.springframework.expression_${springframeworkVersion}.jar")

        repositoryExt files("../../3rd-party/build/plugins/oevm.com.squareup.okio_${okioVersion}.jar")
        repositoryExt files("../../3rd-party/build/plugins/oevm.com.squareup.okhttp3_${okhttp3Version}.jar")

        repositoryExt group: "org.eclipse.gemini.blueprint", name: "gemini-blueprint-io", version: geminiBlueprintVersion, ext: "jar"
        repositoryExt group: "org.eclipse.gemini.blueprint", name: "gemini-blueprint-core", version: geminiBlueprintVersion, ext: "jar"
        repositoryExt group: "org.eclipse.gemini.blueprint", name: "gemini-blueprint-extender", version: geminiBlueprintVersion, ext: "jar"
        repositoryExt group: "org.eclipse.gemini.blueprint", name: "gemini-blueprint-extensions", version: geminiBlueprintVersion, ext: "jar"

        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.eclipse.gemini.management", version: geminiManagementVersion, configuration: "compile", ext: "jar"
        repositoryExt project(':kernel:org.eclipse.virgo.management.fragment')

        repositoryExt project(':kernel:org.eclipse.virgo.kernel.agent.dm')
        repositoryExt project(':kernel:org.eclipse.virgo.kernel.deployer.dm')
        repositoryExt project(':kernel:org.eclipse.virgo.kernel.dmfragment')

        repositoryExt 'commons-io:commons-io'
        repositoryExt 'commons-fileupload:commons-fileupload'
        repositoryExt group: "org.jolokia", name: "jolokia-osgi", version: jolokiaVersion, ext: "jar"
    }
}

configure([
        project(':packaging:kernel'),
]) { dependencies {} }

configure([
        project(':packaging:tomcat-server'),
]) {
    dependencies {
        repositoryExt project(':medic:org.eclipse.virgo.medic')
        repositoryExt project(':medic:org.eclipse.virgo.medic.core')
        repositoryExt project(':web:org.eclipse.virgo.web.dm')

        // 3rd party dependencies from Spring Framework
        repositoryExt 'javax.jms:javax.jms-api'
        repositoryExt 'javax.servlet:javax.servlet-api'

        // missing Spring Framework dependencies
        repositoryExt files("../../3rd-party/build/plugins/oevm.org.springframework.aspects_${springframeworkVersion}.jar")
        repositoryExt files("../../3rd-party/build/plugins/oevm.org.springframework.context.support_${springframeworkVersion}.jar")
        repositoryExt files("../../3rd-party/build/plugins/oevm.org.springframework.jdbc_${springframeworkVersion}.jar")
        repositoryExt files("../../3rd-party/build/plugins/oevm.org.springframework.messaging_${springframeworkVersion}.jar")
        repositoryExt files("../../3rd-party/build/plugins/oevm.org.springframework.jms_${springframeworkVersion}.jar")
        repositoryExt files("../../3rd-party/build/plugins/oevm.org.springframework.orm_${springframeworkVersion}.jar")
        repositoryExt files("../../3rd-party/build/plugins/oevm.org.springframework.oxm_${springframeworkVersion}.jar")
        repositoryExt files("../../3rd-party/build/plugins/oevm.org.springframework.transaction_${springframeworkVersion}.jar")
        repositoryExt files("../../3rd-party/build/plugins/oevm.org.springframework.web_${springframeworkVersion}.jar")
        repositoryExt files("../../3rd-party/build/plugins/oevm.org.springframework.webflux_${springframeworkVersion}.jar")
        repositoryExt files("../../3rd-party/build/plugins/oevm.org.springframework.webmvc_${springframeworkVersion}.jar")
        repositoryExt files("../../3rd-party/build/plugins/oevm.org.springframework.websocket_${springframeworkVersion}.jar")

        repositoryExt files("../../3rd-party/build/plugins/oevm.org.aspectj.weaver_${aspectjVersion}.jar")

        // TODO - think about removing portlet-api from standard VTS
        repositoryExt 'javax.portlet:portlet-api:3.0.1'

        repositoryExt 'javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api'
        repositoryExt group: "org.glassfish.web", name: "javax.servlet.jsp.jstl", version: javaxServletJspJstlImplVersion

        repositoryExt project(':web:org.eclipse.virgo.web.core')
        repositoryExt project(':web:org.eclipse.virgo.web.tomcat.support')
        repositoryExt project(':web:org.eclipse.virgo.web.servlet.adapter')
        repositoryExt project(':web:org.eclipse.virgo.web.spring.integration')

        repositoryExt 'javax.annotation:javax.annotation-api'
        repositoryExt 'javax.ejb:javax.ejb-api:3.2.2'
        repositoryExt 'javax.el:javax.el-api'
        repositoryExt group: "com.sun.mail", name: "javax.mail", version: javaxMailVersion
        repositoryExt 'javax.persistence:javax.persistence-api'

        repositoryExt 'javax.servlet.jsp:javax.servlet.jsp-api'
        repositoryExt 'javax.security.auth.message:javax.security.auth.message-api'

        repositoryExt 'javax.xml.rpc:javax.xml.rpc-api'
        repositoryExt 'javax.websocket:javax.websocket-api'
        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.event", version: equinoxEventVersion, configuration: "compile", ext: "jar"

        // TODO - Equinox migration - rethink removal of taglibs.standard
//        repositoryExt group: "org.eclipse.virgo.mirrored", name: "oevm.org.apache.taglibs.standard", version: apacheTaglibsStandardVersion, ext: "jar"
        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.eclipse.osgi.services", version: osgiServicesVersion, configuration: "compile", ext: "jar"
        repositoryExt 'org.slf4j:slf4j-api'
        repositoryExt 'org.slf4j:jul-to-slf4j'
        repositoryExt 'org.slf4j:jcl-over-slf4j'
        repositoryExt 'org.slf4j:log4j-over-slf4j'

        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jdt.core.compiler.batch", version: eclipseJdtCoreCompilerBatchVersion, configuration: "compile", ext: "jar"

        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.apache.catalina", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.apache.catalina.ha", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.apache.catalina.tribes", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.apache.coyote", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.apache.el", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.apache.jasper", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.apache.juli", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.apache.tomcat.api", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.apache.tomcat.util", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.apache.tomcat.util.scan", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.apache.tomcat.jni", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
        repositoryExt group: "org.eclipse.virgo.mirrored", name: "org.apache.tomcat.websocket", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"

        repositoryExt group: "org.eclipse.gemini", name: "org.eclipse.gemini.web.core", version: geminiWebVersion, configuration: "compile", ext: "jar"
        repositoryExt group: "org.eclipse.gemini", name: "org.eclipse.gemini.web.tomcat", version: geminiWebVersion, configuration: "compile", ext: "jar"
        repositoryExt group: "org.eclipse.gemini", name: "org.eclipse.gemini.web.jaspic.fragment", version: geminiWebVersion, configuration: "compile", ext: "jar"

        // TODO - gradle-build build :apps:repository.par
        //        <dependency org="org.eclipse.virgo.apps" name="org.eclipse.virgo.apps.repository" rev="${org.eclipse.virgo.apps}" conf="pickup->runtime"/>
        //        nanoPickup project(':apps:org.eclipse.virgo.apps.repository')

//        repositoryExt 'org.glassfish.hk2.external:javax.inject:2.5.0-b62'
//        repositoryExt 'javax.resource:javax.resource-api:1.7.1'
//        repositoryExt 'javax.interceptor:javax.interceptor-api:1.2.2'
//        repositoryExt 'javax.enterprise:cdi-api'
//        repositoryExt 'javax.transaction:javax.transaction-api'

        nanoPickup project(':apps:org.eclipse.virgo.apps.splash')
    }
}
