/*
 * See the NOTICE file distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */
import org.apache.tools.ant.filters.ReplaceTokens

// Run this Gradle build with 'gradle' to generate the various versions and variants from the template directory.
// Whenever a new version of XWiki is out, update this file to update the token values, run gradle and commit the
// result.
//
// Note: As a consequence only update the template files and never the generated files!

defaultTasks 'generate'

def variants = ['mysql-tomcat', 'mariadb-tomcat', 'postgres-tomcat']

// Notes:
// - To compute the XWiki sha256, download the XWiki WAR from
//   http://nexus.xwiki.org/nexus/content/groups/public/org/xwiki/platform/xwiki-platform-distribution-war, and issue:
//   - Unix: sha256sum <binary name>
//   - Mac: shasum --algorithm 256 <binary name>
// - To compute the mysql JDBC sha256, get the JAR at https://search.maven.org/artifact/com.mysql/mysql-connector-j and
//   do the same as for the XWiki sha256.
// - To compute the mysql JDBC sha256, get the JAR at
//   https://search.maven.org/artifact/org.mariadb.jdbc/mariadb-java-client and  do the same as for the XWiki sha256.
// - Use the JDBC driver versions found in the XWiki POM for the specified versions:
//   - mysql: https://github.com/xwiki/xwiki-platform/blob/master/pom.xml#L101 (link for master)
//   - mariadb: https://github.com/xwiki/xwiki-platform/blob/master/pom.xml#L104 (link for master)

def tokens = [
    '15': [
        xwikiVersion: '15.8',
        xwikiSha256: '359e44485615722ab533559ec3e3334197a10935e4dfa6fc872b93d1447475fc',
        mysqlJDBCVersion: '8.1.0',
        mysqlJDBCSha256: 'e2e657e9c5ebe06a73485c9739ebd8a18e7bebb852a58d0da287da850beca1c7',
        mariadbJDBCVersion: '3.2.0',
        mariadbJDBCSha256: 'adf9df10bc9b2a137def36d6a495812258f430d4a8f7946727c61558e6c73941'
    ],
    '15.5': [
        xwikiVersion: '15.5.2',
        xwikiSha256: '8e41d7f49df2fde1f6e5fc86304fb7c2ccd2af57332fc833b24fb4a1cb031629',
        mysqlJDBCVersion: '8.1.0',
        mysqlJDBCSha256: 'e2e657e9c5ebe06a73485c9739ebd8a18e7bebb852a58d0da287da850beca1c7',
        mariadbJDBCVersion: '3.2.0',
        mariadbJDBCSha256: 'adf9df10bc9b2a137def36d6a495812258f430d4a8f7946727c61558e6c73941'
    ],
    '14': [
        xwikiVersion: '14.10.17',
        xwikiSha256: '1f0b886d06070286f83f8f05a53b3cc3f054451d00fb30ca4b7703f24af57899',
        mysqlJDBCVersion: '8.1.0',
        mysqlJDBCSha256: 'e2e657e9c5ebe06a73485c9739ebd8a18e7bebb852a58d0da287da850beca1c7',
        mariadbJDBCVersion: '3.2.0',
        mariadbJDBCSha256: 'adf9df10bc9b2a137def36d6a495812258f430d4a8f7946727c61558e6c73941'
    ]
]

task generate() {
    doLast {
        // Copy the template for all versions and variants
        tokens.keySet().each() { version ->
            variants.each() { variant ->
                // Extract the db type and add it as a token
                def (db, servlet) = variant.tokenize('-')
                tokens[version].'db' = db
                // Copy common template files, evaluating groovy in them
                copy {
                    from 'template'
                    into "${version}/${variant}"
                    include '.env'
                    include 'Dockerfile'
                    include 'docker-compose.yml'
                    include 'xwiki/*'
                    expand(tokens[version])
                    filteringCharset = 'UTF-8'
                }
                // Copy DB-specific template files, evaluating groovy in them
                copy {
                    from 'template'
                    into "${version}/${variant}"
                    include "${db}/*"
                    expand(tokens[version])
                    filteringCharset = 'UTF-8'
                }
                // Copy Servlet-specific template files, evaluating groovy in them
                copy {
                    from 'template'
                    into "${version}/${variant}"
                    include "${servlet}/*"
                    expand(tokens[version])
                    filteringCharset = 'UTF-8'
                }
            }
        }
    }
}