// Docbook and Javadoc building and uploading tasks
apply plugin: 'base'

task docs {
    dependsOn 'manual:asciidoctor', 'apidocs', 'guides:asciidoctor'
}

project('manual') {
    apply plugin: 'base'
    apply plugin: 'asciidoctor'

    ext.expandPlaceholders = ""

    asciidoctor {
        options = [
          eruby: 'erubis',
          attributes: [
              copycss : '',
              icons : 'font',
              'source-highlighter': 'prettify',
              sectanchors : '',
              toc2: '',
              idprefix: '',
              idseparator: '-',
              doctype: 'book',
              numbered: '',
              'spring-security-version' : project.version,
              'spring-version' : springVersion,
              revnumber : project.version
          ]
        ]
    }


    ext.spec = copySpec {
        into ('reference/htmlsingle') {
            from(asciidoctor.outputDir)
            exclude 'build', 'Guardfile'
        }
    }
}

task apidocs(type: Javadoc) {
    destinationDir = new File(buildDir, 'apidocs')
    title = "Spring Security $version API"

    source coreModuleProjects.collect { project ->
        project.sourceSets.main.allJava
    }

    classpath = files(coreModuleProjects.collect { project ->
        project.sourceSets.main.compileClasspath
    })
}

apidocs.options.outputLevel = org.gradle.external.javadoc.JavadocOutputLevel.QUIET

apidocs.options.links = [
    "http://static.springframework.org/spring/docs/3.2.x/javadoc-api",
    "http://static.springsource.org/spring-ldap/docs/1.3.x/apidocs/",
    "http://download.oracle.com/javase/6/docs/api/"
]

apidocs.options.groups = [
    'Spring Security Core':[
        'org.springframework.security.core*',
        'org.springframework.security.authentication*',
        'org.springframework.security.access*',
        'org.springframework.security.remoting*',
        'org.springframework.security.provisioning*',
        'org.springframework.security.util*'],
    'Spring Security Web':['org.springframework.security.web*'],
    'Spring Security LDAP':['org.springframework.security.ldap*'],
    'Spring Security Crypto':['org.springframework.security.crypto*'],
    'Spring Security OpenID':['org.springframework.security.openid*'],
    'Spring Security CAS':['org.springframework.security.cas*'],
    'Spring Security ACL':['org.springframework.security.acls*'],
    'Spring Security Config':['org.springframework.security.config*'],
    'Spring Security Taglibs':['org.springframework.security.taglibs*'],

]

ext.apiSpec = copySpec {
    into('apidocs') {
        from(apidocs.destinationDir)
    }
}

assemble.dependsOn = [apidocs, 'manual:asciidoctor']

task docsZip(type: Zip) {
    dependsOn docs
    evaluationDependsOn('guides')
    group = 'Distribution'
    baseName = rootProject.name
    classifier = 'docs'
    description = "Builds -${classifier} archive containing api and reference " +
        "for deployment at static.springframework.org/spring-security/site/docs."

    with(project(':docs').apiSpec)
    with(project(':docs:manual').spec)
    with(project(':docs:guides').spec)
}

task schemaZip(type: Zip) {
    group = 'Distribution'
    baseName = rootProject.name
    classifier = 'schema'
    description = "Builds -${classifier} archive containing all " +
        "XSDs for deployment at static.springframework.org/schema."

    coreModuleProjects.each { module ->
        def Properties schemas = new Properties();

        module.sourceSets.main.resources.find {
            it.path.endsWith('META-INF/spring.schemas')
        }?.withInputStream { schemas.load(it) }

        for (def key : schemas.keySet()) {
            def shortName = key.replaceAll(/http.*schema.(.*).spring-.*/, '$1')
            assert shortName != key
            File xsdFile = module.sourceSets.main.resources.find {
                it.path.endsWith(schemas.get(key))
            }
            assert xsdFile != null
            into (shortName) {
                from xsdFile.path
            }
        }
    }
}