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

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

project('manual') {
	apply plugin: 'base'
	apply plugin: 'org.asciidoctor.gradle.asciidoctor'
	apply plugin: 'docbook-reference'

	ext.expandPlaceholders = ""

	asciidoctorj {
		version = '1.5.2'
	}

	asciidoctor {
		backends = ['docbook5']
		def ghTag = snapshotBuild ? 'master' : project.version
		def ghUrl = "https://github.com/spring-projects/spring-security/tree/$ghTag"
		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,
			  'gh-url': ghUrl,
			  'gh-samples-url': "$ghUrl/samples",
			  docinfo : ""
		  ]
		]
	}

	reference {
		sourceDir = new File(asciidoctor.outputDir , 'docbook5')
		pdfFilename = "spring-security-reference.pdf"
		epubFilename = "spring-security-reference.epub"
		expandPlaceholders = ""
	}

	afterEvaluate {
		tasks.findAll { it.name.startsWith("reference") }.each{ it.dependsOn.add("asciidoctor") }
	}


	ext.spec = copySpec {
		from (reference) {
			into 'reference'
		}
	}
}

task apidocs(type: Javadoc) {
	destinationDir = new File(buildDir, 'apidocs')
	title = "Spring Security $version API"
	logging.captureStandardError LogLevel.INFO
	logging.captureStandardOutput LogLevel.INFO

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

	classpath = files(coreModuleProjects.collect { project ->
		project.sourceSets.main.compileClasspath
	})
	options {
		outputLevel = org.gradle.external.javadoc.JavadocOutputLevel.QUIET
		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/"
		]
		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*'],

		]
		addStringOption('-quiet')
	}
}

if (JavaVersion.current().isJava8Compatible()) {
	// Turn off doclint in JDK 8 Javadoc (too strict on checks)
	apidocs.options.addStringOption('Xdoclint:none', '-quiet')
}

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
			}
		}
	}
}
