All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cc.catalysts.gradle.plugins.jaxb.wsdl.WsdlPlugin.groovy Maven / Gradle / Ivy

The newest version!
package cc.catalysts.gradle.plugins.jaxb.wsdl

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.tasks.SourceSet
import cc.catalysts.gradle.plugins.jaxb.GenerateWsdlTask

/**
 * @author Catalysts GmbH, www.catalysts.cc
 */
public class WsdlPlugin implements Plugin {

	void apply(Project project) {
		project.extensions.wsdl = new WsdlExtension()
		project.convention.plugins.java.sourceSets.all { SourceSet sourceSet ->
			def schemasDir = "src/${sourceSet.name}/wsdl"
			if(new File("${project.projectDir}/" + schemasDir).exists()) {
				setupWsdlFor(sourceSet, project)
				sourceSet.java { srcDir generatedJavaDirFor(project, sourceSet) }
				sourceSet.resources { srcDir schemasDir }
			}
		}
	}
	
	private setupWsdlFor(SourceSet sourceSet, Project project) {
		Task wsdl = createWsdlTaskFor(sourceSet, project)
		project.tasks[sourceSet.compileJavaTaskName].dependsOn(wsdl)
		project.tasks["jaxb"].dependsOn(wsdl)
	}
	
	private Task createWsdlTaskFor(SourceSet sourceSet, Project project) {
		def wsdlTask = project.tasks.create(taskName(sourceSet), GenerateWsdlTask)
		wsdlTask.sourceDirectory = "src/${sourceSet.name}/wsdl"
		wsdlTask.group = GenerateWsdlTask.GENERATE_GROUP
		wsdlTask.description = "Generates code from the ${sourceSet.name} WSDL sources."
		wsdlTask.outputDirectory = generatedJavaDirFor(project, sourceSet)
		wsdlTask.conventionMapping.jaxbClasspath = {
			def jaxbClassPath = project.configurations.jaxb.copy()
			jaxbClassPath.transitive = true
			jaxbClassPath + project.configurations.compile.copy()
		}
		wsdlTask.convertList = project.extensions.wsdl.convertList
		
		wsdlTask
	}
	
	private File generatedJavaDirFor(Project project, SourceSet sourceSet) {
		project.file("${project.projectDir}/target/generated-sources/${sourceSet.name}/wsdl")
	}

	private String taskName(SourceSet sourceSet) {
		return sourceSet.getTaskName('generate', 'WsdlSource')
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy