import virgobuild.Constants

import static virgobuild.UpdateSitePlugin.CREATE_P2_REPOSITORY_TASK_NAME
import static virgobuild.VirgoToolsPlugin.installProduct
import static virgobuild.VirgoToolsPlugin.publishProduct

apply plugin: virgobuild.UpdateSitePlugin
apply plugin: 'org.hidetake.ssh'

buildscript {
    repositories { jcenter() }
    dependencies { classpath 'org.hidetake:gradle-ssh-plugin:1.1.2' }
}

updateSite {
    extraResources = files('epl-v10.html', 'notice.html', 'p2.index')
    hook { Project project ->
        postProcessing(project)
    }
    signing { File unsignedFolder, File signedFolder ->
        if (gradle.taskGraph.hasTask(uploadUpdateSite)) {
            signByEclipseService(unsignedFolder, signedFolder)
        } else {
            signLocally(unsignedFolder, signedFolder)
        }
    }
    mutateArtifactsXml { Node artifactsXml ->
        addExtraPropertiesToArtifactsXml(artifactsXml)
    }
}

remotes {
    eclipseDotOrg {
        host = ECLIPSE_ORG_FTP_HOST
        user = ECLIPSE_ORG_FTP_USER
        password = ECLIPSE_ORG_FTP_PASSWORD
        knownHosts = project.rootProject.file('gradle/ssh/known_hosts')
    }
}

dependencies {

    localPlugin project(':kernel:org.eclipse.virgo.kernel.agent.dm')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.artifact')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.deployer')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.deployer.dm')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.dmfragment')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.equinox.extensions')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.kerneldmfragment')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.model')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.osgi')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.services')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.userregion')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.userregionfactory')
    localPlugin project(':kernel:org.eclipse.virgo.management.console')
    localPlugin project(':kernel:org.eclipse.virgo.management.fragment')
    localPlugin project(':kernel:org.eclipse.virgo.shell.command')

    localPlugin project(':medic:org.eclipse.virgo.medic')
    localPlugin project(':medic:org.eclipse.virgo.medic.core')
    localPlugin project(':medic:org.eclipse.virgo.medic.logbackclassicfragment')
    localPlugin project(':medic:org.eclipse.virgo.medic.logbackcorefragment')

    localPlugin project(':nano:org.eclipse.virgo.nano.core')
    localPlugin project(':nano:org.eclipse.virgo.nano.deployer')
    localPlugin project(':nano:org.eclipse.virgo.nano.deployer.api')
    localPlugin project(':nano:org.eclipse.virgo.nano.deployer.hot')
    localPlugin project(':nano:org.eclipse.virgo.nano.management')
    localPlugin project(':nano:org.eclipse.virgo.nano.management.controller')
    localPlugin project(':nano:org.eclipse.virgo.nano.services.concurrent')
    localPlugin project(':nano:org.eclipse.virgo.nano.services.ds')

    localPlugin project(':repository:org.eclipse.virgo.repository')
    signedExternalPlugin 'commons-codec:commons-codec'

    externalPlugin files("../3rd-party/build/plugins/oevm.org.apache.httpcomponents.httpcore_${httpcoreVersion}.jar")
    externalPlugin files("../3rd-party/build/plugins/oevm.org.apache.httpcomponents.httpclient_${httpclientVersion}.jar")

    localPlugin project(':util:org.eclipse.virgo.util.common')
    localPlugin project(':util:org.eclipse.virgo.util.env')
    localPlugin project(':util:org.eclipse.virgo.util.io')
    localPlugin project(':util:org.eclipse.virgo.util.jmx')
    localPlugin project(':util:org.eclipse.virgo.util.math')
    localPlugin project(':util:org.eclipse.virgo.util.osgi')
    localPlugin project(':util:org.eclipse.virgo.util.osgi.manifest')
    localPlugin project(':util:org.eclipse.virgo.util.parser.launcher')
    localPlugin project(':util:org.eclipse.virgo.util.parser.manifest')

    localPlugin project(':web:org.eclipse.virgo.web.core')
    localPlugin project(':web:org.eclipse.virgo.web.dm')
    localPlugin project(':web:org.eclipse.virgo.web.tomcat.support')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.appdeployer')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.applistener')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.catalina.fragment.webbeans')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.javax.persistence.extension')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.javax.persistence.provider.initializer')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.jsf.support')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.bval')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.jotm')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.jpa')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.webbeans')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.initialiser')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.jpa.integration')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.tomcat.factory')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.openwebbeans.initialiser')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.persistence.openejb.classloading.hook')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.security')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.security.openejb.classloading.hook')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.security.valve')
    localPlugin project(':web:org.eclipse.virgo.web.enterprise.services.accessor')
    localPlugin project(':web:org.eclipse.virgo.web.servlet.adapter')
    localPlugin project(':web:org.eclipse.virgo.web.spring.integration')
    localPlugin project(':web:org.eclipse.virgo.web.war.deployer')

    // TODO - review if all those signedExternalPlugins are signed
    signedExternalPlugin 'org.slf4j:slf4j-api'
    signedExternalPlugin 'org.slf4j:jul-to-slf4j'
    // exports package org.apache.commons.logging (jcl - Jakarta Commons Logging)
    signedExternalPlugin 'org.slf4j:jcl-over-slf4j'
    signedExternalPlugin 'org.slf4j:log4j-over-slf4j'

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

    localFeature project(':org.eclipse.virgo.site:org.eclipse.equinox.region.feature')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.region", version: equinoxRegionVersion, configuration: "compile", ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.core.feature')
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.ds.feature')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.osgi", version: equinoxVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.osgi.services", version: osgiServicesVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.common", version: equinoxCommonVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.ds", version: equinoxDsVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.event", version: equinoxEventVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.util", version: equinoxUtilVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.cm", version: equinoxCmVersion, configuration: "compile", ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.kernel.feature')

    localFeature project(':org.eclipse.virgo.site:org.eclipse.equinox.http.jetty.feature')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.http.jetty", version: equinoxHttpJettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.http.servlet", version: equinoxHttpServletVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.continuation", version: jettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.http", version: jettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.io", version: jettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.security", version: jettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.server", version: jettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.servlet", version: jettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.util", version: jettyVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin 'javax.servlet:javax.servlet-api'

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.kernel.springintegration.feature')
    signedExternalPlugin files("../3rd-party/build/plugins/oevm.org.springframework.expression_${springframeworkVersion}.jar")

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.management.feature')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "osgi.enterprise", version: osgiEnterpriseVersion, configuration: "compile", ext: "jar"
    // contains org.osgi.jmx
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.gemini.management", version: geminiManagementVersion, configuration: "compile", ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.medic.feature')
    signedExternalPlugin 'ch.qos.logback:logback-core'
    signedExternalPlugin 'ch.qos.logback:logback-classic'

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.nano.deployer.feature')
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.nano.mbeans.feature')
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.nano.mbeans.controller.feature')

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.shell.feature')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.console", version: equinoxConsoleVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.console.ssh", version: equinoxConsoleSshVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.mina.core", version: minaCoreVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.sshd.core", version: apacheSshdCoreVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin 'org.apache.felix:org.apache.felix.gogo.command'
    signedExternalPlugin 'org.apache.felix:org.apache.felix.gogo.runtime'
    signedExternalPlugin 'org.apache.felix:org.apache.felix.gogo.shell'

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.simpleconfigurator.feature')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.simpleconfigurator", version: equinoxSimpleConfiguratorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.simpleconfigurator.manipulator", version: equinoxSimpleConfiguratorManipulatorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.frameworkadmin", version: equinoxFrameworkadminVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.frameworkadmin.equinox", version: equinoxFrameworkadminEquinoxVersion, configuration: "compile", ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.gemini.blueprint.feature')
    signedExternalPlugin files("../3rd-party/build/plugins/oevm.aopalliance.aopalliance_${aopallianceVersion}.jar")

    signedExternalPlugin files("../3rd-party/build/plugins/oevm.org.springframework.aop_${springframeworkVersion}.jar")
    signedExternalPlugin files("../3rd-party/build/plugins/oevm.org.springframework.beans_${springframeworkVersion}.jar")
    signedExternalPlugin files("../3rd-party/build/plugins/oevm.org.springframework.context_${springframeworkVersion}.jar")
    signedExternalPlugin files("../3rd-party/build/plugins/oevm.org.springframework.core_${springframeworkVersion}.jar")
    signedExternalPlugin files("../3rd-party/build/plugins/oevm.org.springframework.expression_${springframeworkVersion}.jar")

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

    // nano base
    // TODO - merge to oev.nano.services ?
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.services.concurrent.feature')
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.services.ds.feature')

    // TODO - merge with management features above?
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.webconsole.deps.feature')

    signedExternalPlugin group: "commons-fileupload", name: "commons-fileupload", version: commonsFileuploadVersion, ext: "jar"
    signedExternalPlugin group: "commons-io", name: "commons-io", version: commonsIoVersion, ext: "jar"
    signedExternalPlugin group: "org.jolokia", name: "jolokia-osgi", version: jolokiaVersion, ext: "jar"

    // nano full
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.p2.provisioning.feature')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.core.contenttype", version: eclipseCoreContenttypeVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.core.jobs", version: eclipseCoreJobsVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.core.net", version: eclipseCoreNetVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.core.runtime", version: eclipseCoreRuntimeVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.ecf", version: eclipseEcfVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.ecf.filetransfer", version: eclipseEcfFiletransferVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.ecf.identity", version: eclipseEcfIdentityVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.ecf.provider.filetransfer", version: eclipseEcfProviderFiletransferVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.ecf.ssl", version: eclipseEcfSslVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.app", version: equinoxAppVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.preferences", version: equinoxPreferencesVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.registry", version: equinoxRegistryVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.security", version: equinoxSecurityVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.sat4j.core", version: sat4jCoreVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.sat4j.pb", version: sat4jPbVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.artifact.repository", version: p2ArtifactRepositoryVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.console", version: p2ConsoleVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.core", version: p2CoreVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.director", version: p2DirectorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.engine", version: p2EngineVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.garbagecollector", version: p2GarbageCollectorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.jarprocessor", version: p2JarProcessorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.metadata", version: p2MetadataVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.metadata.repository", version: p2MetadataRepositoryVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.publisher", version: p2PublisherVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.publisher.eclipse", version: p2PublisherEclipseVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.repository", version: p2RepositoryVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.touchpoint.eclipse", version: p2TouchpointEclipseVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.touchpoint.natives", version: p2TouchpointNativesVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.transport.ecf", version: p2TransportEcfVersion, configuration: "compile", ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.nano.war.deployer.feature')
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.enterprise.feature')
    localFeature project(':org.eclipse.virgo.site:org.eclipse.gemini.web.feature')
    signedExternalPlugin group: "org.eclipse.gemini", name: "org.eclipse.gemini.web.core", version: geminiWebVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.gemini", name: "org.eclipse.gemini.web.extender", version: geminiWebVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.gemini", name: "org.eclipse.gemini.web.tomcat", version: geminiWebVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.gemini", name: "org.eclipse.gemini.web.jaspic.fragment", version: geminiWebVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.log4j", version: apacheLog4jVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.objectweb.asm", version: objectwebAsmVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javassist", version: javassistVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "scannotation", version: scannotationVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.bval", version: apacheBvalVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.quartz", version: quartzVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.ow2.jotm.jotm-core", version: jotmVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "javax.interceptor", name: "javax.interceptor-api", version: javaxInterceptorVersion
    signedExternalPlugin group: "javax.transaction", name: "javax.transaction-api", version: javaxTransactionVersion
    signedExternalPlugin 'javax.annotation:javax.annotation-api'
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.ejb", version: javaxEjbVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin 'org.glassfish.hk2.external:javax.inject'
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.jms", version: javaxJmsVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.persistence", version: javaxPersistenceVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.resource", version: javaxResourceVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.security.auth.message", version: javaxSecurityAuthMessageVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.security.jacc", version: javaxSecurityJaccVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin 'javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api'
    signedExternalPlugin group: "org.glassfish.web", name: "javax.servlet.jsp.jstl", version: javaxServletJspJstlImplVersion
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.validation", version: javaxValidationVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.wsdl", version: javaxWsdlVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.ws.rs", version: javaxWsRsVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.glassfish.javax.faces", version: glassfishJavaxFacesVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.glassfish.com.sun.faces", version: glassfishComSunFacesVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.geronimo.components.connector", version: geronimoComponentsConnectorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.geronimo.components.transaction", version: geronimoComponentsTransactionVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.geronimo.specs.j2ee.management", version: geronimoSpecsJ2eeManagementVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.geronimo.specs.osgi.locator", version: geronimoSpecsOsgiLocatorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.geronimo.specs.osgi.registry", version: geronimoSpecsOsgiRegistryVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.commons.beanutils", version: commonsBeanutilsVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin 'commons-cli:commons-cli'
    signedExternalPlugin group: "commons-collections", name: "commons-collections", version: commonsCollectionsVersion
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.commons.lang", version: commonsLangVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.commons.dbcp", version: commonsDbcpVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.commons.pool", version: commonsPoolVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "cdi.api", version: cdiApiVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openejb.api", version: apacheOpenejbVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openejb.core", version: apacheOpenejbCoreVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openejb.javaagent", version: apacheOpenejbVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openejb.jee", version: apacheOpenejbVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openejb.loader", version: apacheOpenejbVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openejb.jpa-integration", version: apacheOpenejbVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.ee", version: apacheOpenwebbeansEEVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.ee.common", version: apacheOpenwebbeansVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.ejb", version: apacheOpenwebbeansEEVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.impl", version: apacheOpenwebbeansVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.jsf", version: apacheOpenwebbeansVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.spi", version: apacheOpenwebbeansVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.tomcat7", version: apacheOpenwebbeansTomcat7Version, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.web", version: apacheOpenwebbeansVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.xbean.asm", version: apacheXBeanAsmVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.xbean.bundleutils", version: apacheXBeanBundleutilsVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.xbean.finder", version: apacheXBeanFinderVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.xbean.naming", version: apacheXBeanNamingVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.xbean.reflect", version: apacheXBeanReflectVersion, configuration: "compile", ext: "jar"

    // Tomcat Runtime
    signedExternalPlugin 'javax.el:javax.el-api'
    signedExternalPlugin group: "com.sun.mail", name: "javax.mail", version: javaxMailVersion
    // TODO - check CQ and put version into properties
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.activation", version: '1.1.0.v201211130549', configuration: "compile", ext: "jar"

    signedExternalPlugin 'javax.servlet.jsp:javax.servlet.jsp-api'
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.websocket", version: javaxWebsocketVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.xml.rpc", version: javaxXmlRpcVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.catalina", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.catalina.ha", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.catalina.tribes", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.coyote", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.el", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.jasper", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.juli", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.tomcat.api", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.tomcat.util", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.tomcat.jni", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.tomcat.websocket", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jdt.core.compiler.batch", version: eclipseJdtCoreCompilerBatchVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.persistence.antlr", version: eclipsePersistenceAntlrVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.persistence.asm", version: eclipsePersistenceAsmVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.persistence.core", version: eclipsePersistenceCoreVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.persistence.jpa", version: eclipsePersistenceJpaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.persistence.jpa.jpql", version: eclipsePersistenceJpaJpqlVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.derby", version: apacheDerbyVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.appdeployer')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.applistener')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.catalina.fragment.webbeans')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.javax.persistence.extension')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.javax.persistence.provider.initializer')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.jsf.support')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.bval')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.jotm')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.jpa')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.webbeans')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.initialiser')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.tomcat.factory')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openwebbeans.initialiser')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.persistence.openejb.classloading.hook')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.security')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.security.openejb.classloading.hook')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.security.valve')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.services.accessor')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.war.deployer')

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.tools.feature')
}

task zipUpdateSite(type: Zip, dependsOn: createP2Repository) {
    from "${buildDir}/repository"
    baseName 'repository'
}

task uploadUpdateSite(dependsOn: createP2Repository) {
    description = "Uploads the generated update site to the eclipse.org server."

    doLast {
        // folder structure
        // releases                    (main folder - composite update site if release repository)
        //  |--1.0                     (version folder - always a composite update site)
        //     |--1.0.0.v20150413-1512 (repository folder - simple update site)

        // define the folder structure
        def releaseTypeFolder = "${ECLIPSE_ORG_FTP_UPDATE_SITES_PATH}/${releaseTypeFolder(project)}"
        def versionFolder = "${releaseTypeFolder}/${releaseVersion()}"
        def repositoryFolder = "${versionFolder}/${project.version}"

        // create composite update site for the root of the release repository and for the versions folder
        def config = eclipsebuild.BuildshipConfig.on(project)
        def compositeFolders = config.isRelease() ? [
                releaseTypeFolder,
                versionFolder
        ] : [versionFolder]

        // upload the update site and update the composite descriptors
        ssh.run {
            session(remotes.eclipseDotOrg) {
                // create the leaf directory if not exist
                execute "mkdir -p $repositoryFolder"

                // copy the update site from the build directory to the remote location
                put from: files { file("$buildDir/repository").listFiles() }, into: repositoryFolder

                // recreate the compositeArtifacts.jar and the compositeContent.jar files
                compositeFolders.each {
                    execute("""cd ${it}
                      ${file('updateCompositeUpdateSite.sh').text}""")
                }
            }
        }
    }
}

// utility methods
def releaseTypeFolder(Project project) {
    def config = eclipsebuild.BuildshipConfig.on(project)
    if (config.isRelease()) {
        "releases"
    } else if (config.isMilestone()) {
        "milestones"
    } else if (config.isSnapshot()) {
        "snapshots"
    } else {
        throw new IllegalStateException("BuildshipConfig must either be a release, milestone, or snapshot.")
    }
}

def releaseVersion() {
    // crop the major.minor segment from the version number
    def matcher = version =~ /(\d+\.\d+)\.\d+\..*/
    matcher[0][1]
}

private void postProcessing(project) {
}

private void signByEclipseService(unsignedFolder, signedFolder) {
    ssh.run {
        session(remotes.eclipseDotOrg) {
            // the remote folder where the jars are signed
            def remoteFolder = "${ECLIPSE_ORG_TEMP_PATH}/${signedFolder.name}"

            // clean up the folder used for signing if the previous build failed
            execute """rm -rf $remoteFolder
                    mkdir -p $remoteFolder"""

            // transfer the unsigned files to the remote host
            put from: file(unsignedFolder).listFiles() as List, into: remoteFolder

            // perform the signing
            execute """ cd $remoteFolder
                    # iterate all jars in the subfolders
                    for jar in \$(find `pwd` -name '*.jar');
                    do
                        # save the signed jar into a temporary file copy and write it's content to the unsigned jar
                        curl -o signed.jar -F filedata=@\$jar http://build.eclipse.org:31338/sign
                        cp signed.jar \$jar
                        rm signed.jar
                    done
                    """

            // retrieve the signed content from the remote host into the build/signed-bundles folder
            get from: remoteFolder, into: signedFolder.parentFile

            // clean up the remote folder
            execute "rm -rf $remoteFolder"
        }
    }
}

private void signLocally(File unsignedFolder, File signedFolder) {
    def unsignedPluginsDir = new File(unsignedFolder, "plugins")
    def unsignedFeaturesDir = new File(unsignedFolder, "features")
    def signedPluginsDir = new File(signedFolder, "plugins")
    def signedFeaturesDir = new File(signedFolder, "features")

    signedPluginsDir.mkdirs()
    signedFeaturesDir.mkdirs()

    if (System.properties['skip.local.signing'] == 'true') {
        project.logger.warn("Skipping local signing process!")
        project.copy { from unsignedPluginsDir into signedPluginsDir }
        project.copy { from unsignedFeaturesDir into signedFeaturesDir }
    }

    // TODO - add assert "keystore exists" - otherwise print this help!
    // How to generate you own Java Key Store for local signing:
    // $ keytool -genkey -alias virgo -keystore virgo.jks -storepass changeme -keypass development -dname "cn=Florian Waibel, ou=Virgo, o=EclipseSource, c=DE" -validity 365
    // Verify the keystore on the command line:
    // $ jarsigner -keystore virgo.jks -storepass changeme -keypass development org.eclipse.virgo.util.env-3.7.0.M2.jar virgo
    // $ jarsigner -verify -verbose -certs org.eclipse.virgo.util.env-3.7.0.M2.jar
    File targetDir = signedPluginsDir
    def signBundle = {
        if (System.properties['skip.local.signing'] != 'true') {
            project.logger.info("Sign '${it.absolutePath}'")
            project.ant.signjar(
                    verbose: 'true',
                    destDir: targetDir,
                    alias: 'virgo',
                    jar: it,
                    keystore: project.findProject(':').file('config/signing/virgo.jks'),
                    storepass: 'changeme',
                    keypass: 'development',
                    sigalg: 'SHA1withDSA',
                    digestalg: 'SHA1',
                    preservelastmodified: 'true')
        }
    }

    unsignedPluginsDir.listFiles().each signBundle
    targetDir = signedFeaturesDir
    unsignedFeaturesDir.listFiles().each signBundle
}

private void addExtraPropertiesToArtifactsXml(Node artifactsXml) {
    // modify the artifacts.xml file only when it is deployed to the eclipse.org servers
    if (ECLIPSE_ORG_MIRROR_PATH) {
        // add p2.mirrorsUrl to the properties section
        // https://wiki.eclipse.org/Equinox/p2/p2.mirrorsURL
        def mainPropertiesNode = artifactsXml.depthFirst().find {
            it.parent()?.name() == 'repository' && it.name() == 'properties'
        }
        new Node(mainPropertiesNode, 'property', ['name': 'p2.mirrorsURL', 'value': calculateP2MirrorsUrl(project)])

        // add download.stats property to each installable unit
        // https://wiki.eclipse.org/Equinox_p2_download_stats#Enabling_stats_in_your_repository
        new Node(mainPropertiesNode, 'property', ['name': 'p2.statsURI', 'value': calculateStatsUri(project)])
        mainPropertiesNode.@size = mainPropertiesNode.children().size()

        // add <property name="download.stats" value="feature-id"/> node to the features
        artifactsXml.depthFirst().findAll {
            it.parent()?.parent()?.name() == 'artifacts' &&
                    it.parent()?.name() == 'artifact' &&
                    it.parent()?.@classifier == 'org.eclipse.update.feature' &&
                    it.name() == 'properties'
        }.each {
            new Node(it, 'property', ['name': 'download.stats', 'value': it.parent().@id])
            it.@size = it.children().size()
        }
    }
}

def calculateP2MirrorsUrl(Project project) {
    def repositoryPath = "${ECLIPSE_ORG_MIRROR_PATH}/${releaseTypeFolder(project)}/${releaseVersion()}/${project.version}"
    "http://www.eclipse.org/downloads/download.php?file=${repositoryPath}&format=xml"
}

def calculateStatsUri(Project project) {
    "http://download.eclipse.org/stats/virgo/${releaseTypeFolder(project)}/${releaseVersion()}"
}

// TODO - think about a way to trigger :org.eclipse.virgo.site:publishBase and :org.eclipse.virgo.site:publishKernelBase after site creation
project.tasks.addRule("Pattern: publish<ID>") { String taskName ->
    if (taskName.startsWith("publish")) {
        project.task(taskName, dependsOn: [
                ":org.eclipse.virgo.site:${CREATE_P2_REPOSITORY_TASK_NAME}",
        ]) {
            def product = 'undefined'
            switch (taskName.toString() - 'publish') {
                case 'Base': product = 'base'; break
                case 'KernelBase': product = 'kernel-base'; break
                case 'NanoCore': product = 'nano-core'; break
                case 'NanoBase': product = 'nano-base'; break
                case 'Nano': product = 'nano'; break
                case 'NanoFull': product = 'nano-full'; break
            }
            group = Constants.gradleTaskGroupName
            description = "Publishes a product to a p2 repository. The publishing uses ANY environment configurations."

            File productFileLocation = project.file("${project.projectDir}/publish_resources/products/${product}/${product}.product")

            inputs.file productFileLocation

            doLast { publishProduct(project, productFileLocation) }
        }
    }
}

// for testing purposes only
task('installProductNanoBase', dependsOn: [
        'publishNanoCore',
        'publishNanoBase'
]) {

    description = "Installs a Virgo product to a desired destination. Default profile(roaming) is VIRGOProfile, the environment configurations are ANY."

    def product = 'nano-base'
    def shortProduct = 'VNB'
    def destinationDir = file("${buildDir}/${shortProduct}/${product}")
    def productIu = "${product}.product"

    doLast() { installProduct(project, productIu, destinationDir) }
}

// for testing purposes only
task('installProductNano', dependsOn: [
        'publishNanoCore',
        'publishNanoBase',
        'publishNano',
]) {

    description = "Installs a Virgo product to a desired destination. Default profile(roaming) is VIRGOProfile, the environment configurations are ANY."

    def product = 'nano'
    def shortProduct = 'VN'
    def destinationDir = file("${buildDir}/${shortProduct}/${product}")
    def productIu = "${product}.product"

    doLast() { installProduct(project, productIu, destinationDir) }
}

// for testing purposes only
task('installProductNanoFull', dependsOn: [
        'publishNanoCore',
        'publishNanoBase',
        'publishNano',
        'publishNanoFull',
]) {

    description = "Installs a Virgo product to a desired destination. Default profile(roaming) is VIRGOProfile, the environment configurations are ANY."

    def product = 'nano-full'
    def shortProduct = 'VNF'
    def destinationDir = file("${buildDir}/${shortProduct}/${product}")
    def productIu = "${product}.product"

    doLast() { installProduct(project, productIu, destinationDir) }
}
