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

org.opencrx.gradle.OpencrxPlugin.kt Maven / Gradle / Ivy

There is a newer version: 5.3.2
Show newest version
/*
 * ====================================================================
 * Project:     openCRX/Gradle, http://www.opencrx.org/
 * Description: OpencrxPlugin
 * Owner:       the original authors.
 * ====================================================================
 *
 * This software is published under the BSD license
 * as listed below.
 * 
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted provided that the following conditions 
 * are met:
 * 
 * * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 * 
 * * Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in
 * the documentation and/or other materials provided with the
 * distribution.
 * 
 * * Neither the name of the openCRX team nor the names of the contributors
 * to openCRX may be used to endorse or promote products derived
 * from this software without specific prior written permission
 * 
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 * 
 * ------------------
 * 
 * This product includes software developed by the Apache Software
 * Foundation (http://www.apache.org/).
 * 
 * This product includes software developed by contributors to
 * openMDX (http://www.openmdx.org/)
 */
package org.opencrx.gradle

import org.gradle.api.Project
import org.gradle.api.Plugin
import java.io.*
import java.util.*
import org.gradle.kotlin.dsl.*

open class OpencrxPluginExtension(project: Project) {
	var earlib = project.getConfigurations().getByName("earlib")
}

open class OpencrxPlugin: Plugin {

	override fun apply(project: Project): Unit = project.run {
		val extension = extensions.create("opencrx", project)
		// opencrx-core.jar
		val coreJarTask = tasks.register("opencrx-core.jar")
		coreJarTask { dependsOn("classes") }
		// opencrx-client.jar
		val clientJarTask = tasks.register("opencrx-client.jar")
		clientJarTask { dependsOn("opencrx-core.jar") }
		// opencrx-core-config.jar
		val coreConfigJarTask = tasks.register("opencrx-core-config.jar")
		coreConfigJarTask { dependsOn("opencrx-client.jar") }
		// opencrx-config.jar
		val configJarTask = tasks.register("opencrx-config.jar")
		configJarTask { dependsOn("opencrx-core-config.jar") }
		// opencrx-portal.war
		val portalWarTask = tasks.register("opencrx-portal.war")
		portalWarTask { dependsOn("deliverables", "opencrx-config.jar") }
		// opencrx-ical.war
		val icalWarTask = tasks.register("opencrx-ical.war")
		icalWarTask { dependsOn("deliverables", "opencrx-portal.war") }
		// opencrx-caldav.war
		val calDavWarTask = tasks.register("opencrx-caldav.war")
		calDavWarTask { dependsOn("deliverables", "opencrx-ical.war") }
		// opencrx-carddav.war
		val cardDavWarTask = tasks.register("opencrx-carddav.war")
		cardDavWarTask { dependsOn("deliverables", "opencrx-caldav.war") }
		// opencrx-webdav.war
		val webDavWarTask = tasks.register("opencrx-webdav.war")
		webDavWarTask { dependsOn("deliverables", "opencrx-carddav.war") }
		// opencrx-imap.war
		val imapWarTask = tasks.register("opencrx-imap.war")
		imapWarTask { dependsOn("deliverables", "opencrx-webdav.war") }
		// opencrx-vcard.war
		val vCardWarTask = tasks.register("opencrx-vcard.war")
		vCardWarTask { dependsOn("deliverables", "opencrx-imap.war") }
		// opencrx-spaces.war
		val spacesWarTask = tasks.register("opencrx-spaces.war")
		spacesWarTask { dependsOn("deliverables", "opencrx-vcard.war") }
		// opencrx-rest.war
		val restWarTask = tasks.register("opencrx-rest.war")
		restWarTask { dependsOn("deliverables", "opencrx-spaces.war") }
		// opencrx-bpi.war
		val bpiWarTask = tasks.register("opencrx-bpi.war")
		bpiWarTask { dependsOn("deliverables", "opencrx-rest.war") }
		// opencrx-calendar.war
		val calendarWarTask = tasks.register("opencrx-calendar.war")
		calendarWarTask { dependsOn("deliverables", "opencrx-bpi.war") }
		// opencrx-documents.war
		val documentsWarTask = tasks.register("opencrx-documents.war")
		documentsWarTask { dependsOn("deliverables", "opencrx-calendar.war") }
		// opencrx-contacts.war
		val contactsWarTask = tasks.register("opencrx-contacts.war")
		contactsWarTask { dependsOn("deliverables", "opencrx-documents.war") }
		// opencrx.ear
		val earTask = tasks.register("opencrx.ear")
		earTask {
			outputs.dir(deliverDir)
			dependsOn(
				"deliverables",
				"opencrx-config.jar",
				"opencrx-portal.war",
				"opencrx-ical.war",
				"opencrx-caldav.war",
				"opencrx-carddav.war",
				"opencrx-webdav.war",
				"opencrx-imap.war",
				"opencrx-vcard.war",
				"opencrx-spaces.war",
				"opencrx-rest.war",
				"opencrx-bpi.war",
				"opencrx-calendar.war",
				"opencrx-documents.war",
				"opencrx-contacts.war"
			)
			libs = extension.earlib
		}
		// render-diagrams
		val renderDiagramsTask = tasks.register("render-diagrams")
		renderDiagramsTask {
			inputs.dir("src/model/graphviz/diagrams")
			classpath = configurations["tools"]
		}
		// create-schema
		tasks.register("create-schema")
		// create-sql
		tasks.register("create-sql")
		// generate-model
		val generateModelTask = tasks.register("generate-model")
		generateModelTask {
			inputs.dir("${projectDir}/src/model/emf")
			inputs.dir("${projectDir}/src/main/resources")
			outputs.file(project.layout.buildDirectory.dir("generated/sources/model/opencrx-" + project.getName() + "-models.zip"))
			outputs.file(project.layout.buildDirectory.dir("generated/sources/model/opencrx-" + project.getName() + ".openmdx-xmi.zip"))
			classpath = configurations["compileClasspath"]
			doFirst {
				project.copy {
					from(project.zipTree(project.getConfigurations().getByName("openmdxBaseModels").singleFile))
					into(project.layout.buildDirectory.dir("generated/sources/model/openmdx/base"))
				}
				project.copy {
					from(project.zipTree(project.getConfigurations().getByName("openmdxSecurityModels").singleFile))
					into(project.layout.buildDirectory.dir("generated/sources/model/openmdx/security"))
				}
				project.copy {
					from(project.zipTree(project.getConfigurations().getByName("openmdxPortalModels").singleFile))
					into(project.layout.buildDirectory.dir("generated/sources/model/openmdx/portal"))
				}
				if(!project.getConfigurations().getByName("opencrxCoreModels").isEmpty()) {
					project.copy {
						from(project.zipTree(project.getConfigurations().getByName("opencrxCoreModels").singleFile))
						into(project.layout.buildDirectory.dir("generated/sources/model/opencrx/core"))
					}
				}
			}
			doLast {
				copy {	
					from(
						zipTree(project.layout.buildDirectory.dir("generated/sources/model/opencrx-" + project.getName() + "-models.zip"))
					)
					into(project.layout.buildDirectory.dir("generated/sources/java/main"))
					include(
						"**/*.java"
					)
				}
			}
		}
        var buildProperties = Properties()
        buildProperties.put("axis2.version", "1.7.+");
        buildProperties.put("bcprov-jdk16.version", "1.46");
        buildProperties.put("commons-compiler.version", "3.1.+");
        buildProperties.put("groovy.version", "3.0.+");
        buildProperties.put("gson.version", "2.8.+");
        buildProperties.put("hsqldb.version", "2.4.+");
        buildProperties.put("httpclient.version", "4.5.+");
        buildProperties.put("itextpdf.version", "5.4.+");
        buildProperties.put("janino.version", "3.1.+");
        buildProperties.put("javaee-api.version", "8.0.+");
        buildProperties.put("jdo-api.version", "3.1");
        buildProperties.put("libphonenumber.version", "8.12.+");
        buildProperties.put("openjpa.version", "2.4.+");
        buildProperties.put("openmdx.version", "2.18.+");
        buildProperties.put("pdfbox.version", "2.0.+");
        buildProperties.put("picocli.version", "4.6.+");
        buildProperties.put("poi.version", "4.1.+");
        buildProperties.put("protobuf-javanano.version", "3.1.+");
        buildProperties.put("smack.version", "3.2.+");
        buildProperties.put("xmlbeans.version", "3.1.+");
        buildProperties.put("zxing-core.version", "3.4.+");
        var buildPropertiesFile = File(project.getRootDir(), "build.properties")
        // versions
        if(buildPropertiesFile.exists()) {
            buildProperties.load(FileInputStream(buildPropertiesFile))
        }
		// versions
        val axis2Version = buildProperties.getProperty("axis2.version")
        val bcprovJdk16Version = buildProperties.getProperty("bcprov-jdk16.version")
        val commonsCompilerVersion = buildProperties.getProperty("commons-compiler.version")
        val groovyVersion = buildProperties.getProperty("groovy.version")
        val gsonVersion = buildProperties.getProperty("gson.version")
        val hsqldbVersion = buildProperties.getProperty("hsqldb.version")
        val httpclientVersion = buildProperties.getProperty("httpclient.version")
        val itextpdfVersion = buildProperties.getProperty("itextpdf.version")
        val janinoVersion = buildProperties.getProperty("janino.version")
        val javaeeApiVersion = buildProperties.getProperty("javaee-api.version")
        val jdoApiVersion = buildProperties.getProperty("jdo-api.version")
        val libphonenumberVersion = buildProperties.getProperty("libphonenumber.version")
        val openjpaVersion = buildProperties.getProperty("openjpa.version")
        val openmdxVersion = buildProperties.getProperty("openmdx.version")
        val pdfboxVersion = buildProperties.getProperty("pdfbox.version")
        val picocliVersion = buildProperties.getProperty("picocli.version")
        val poiVersion = buildProperties.getProperty("poi.version")
        val protobufJavananoVersion = buildProperties.getProperty("protobuf-javanano.version")
        val smackVersion = buildProperties.getProperty("smack.version")
        val xmlbeansVersion = buildProperties.getProperty("xmlbeans.version")
        val zxingCoreVersion = buildProperties.getProperty("zxing-core.version")
        // configurations
		var implementation = project.getConfigurations().maybeCreate("implementation")
		project.getConfigurations().maybeCreate("opencrxCoreModels")
		project.getConfigurations().maybeCreate("opencrxCoreConfig")
		project.getConfigurations().maybeCreate("openmdxInspector")
		project.getConfigurations().maybeCreate("openmdxBaseModels")
		project.getConfigurations().maybeCreate("openmdxSecurityModels")
		project.getConfigurations().maybeCreate("openmdxPortalModels")
		var tools = project.getConfigurations().maybeCreate("tools")
		// dependencies
		var dependencies = project.getDependencies()
		// implementation
		dependencies.add("implementation", "com.googlecode.libphonenumber:libphonenumber:${libphonenumberVersion}")
		dependencies.add("implementation", "com.google.code.gson:gson:${gsonVersion}")
		dependencies.add("implementation", "com.google.zxing:core:${zxingCoreVersion}")
		dependencies.add("implementation", "com.itextpdf:itextpdf:${itextpdfVersion}")
        dependencies.add("implementation", "info.picocli:picocli:${picocliVersion}")
		dependencies.add("implementation", "javax.jdo:jdo-api:${jdoApiVersion}")
		dependencies.add("implementation", "javax:javaee-api:${javaeeApiVersion}")
		dependencies.add("implementation", "org.apache.axis2:axis2:${axis2Version}")
		dependencies.add("implementation", "org.apache.httpcomponents:httpclient:${httpclientVersion}")
		dependencies.add("implementation", "org.apache.poi:poi:${poiVersion}")
		dependencies.add("implementation", "org.apache.poi:poi-ooxml:${poiVersion}")
		dependencies.add("implementation", "org.apache.poi:poi-scratchpad:${poiVersion}")
		dependencies.add("implementation", "org.apache.pdfbox:pdfbox:${pdfboxVersion}")
		dependencies.add("implementation", "org.apache.openjpa:openjpa:${openjpaVersion}")
		dependencies.add("implementation", "org.apache.xmlbeans:xmlbeans:${xmlbeansVersion}")
		dependencies.add("implementation", "org.codehaus.janino:janino:${janinoVersion}")
		dependencies.add("implementation", "org.codehaus.janino:commons-compiler:${commonsCompilerVersion}")
		dependencies.add("implementation", "org.hsqldb:hsqldb:${hsqldbVersion}")
		dependencies.add("implementation", "org.igniterealtime.smack:smack:${smackVersion}")
		dependencies.add("implementation", "org.openmdx:openmdx-base:${openmdxVersion}")
		dependencies.add("implementation", "org.openmdx:openmdx-portal:${openmdxVersion}")
		dependencies.add("implementation", "org.openmdx:openmdx-security:${openmdxVersion}")
		// openmdx
	    dependencies.add("openmdxInspector", "org.openmdx:openmdx-inspector:${openmdxVersion}")
	    dependencies.add("openmdxBaseModels", "org.openmdx:openmdx-base-models:${openmdxVersion}")
	    dependencies.add("openmdxSecurityModels", "org.openmdx:openmdx-security-models:${openmdxVersion}")
	    dependencies.add("openmdxPortalModels", "org.openmdx:openmdx-portal-models:${openmdxVersion}")
		// earlib
		dependencies.add("earlib", "com.google.code.gson:gson:${gsonVersion}")
		dependencies.add("earlib", "com.google.zxing:core:${zxingCoreVersion}")
		dependencies.add("earlib", "com.googlecode.libphonenumber:libphonenumber:${libphonenumberVersion}")
		dependencies.add("earlib", "com.google.protobuf.nano:protobuf-javanano:${protobufJavananoVersion}")
        dependencies.add("earlib", "info.picocli:picocli:${picocliVersion}")
		dependencies.add("earlib", "org.apache.openjpa:openjpa:${openjpaVersion}")
		dependencies.add("earlib", "org.apache.pdfbox:pdfbox:${pdfboxVersion}")
		dependencies.add("earlib", "org.apache.pdfbox:xmpbox:${pdfboxVersion}")
		dependencies.add("earlib", "org.apache.pdfbox:preflight:${pdfboxVersion}")
		dependencies.add("earlib", "org.apache.pdfbox:pdfbox-tools:${pdfboxVersion}")
		dependencies.add("earlib", "org.apache.poi:poi:${poiVersion}")
		dependencies.add("earlib", "org.apache.poi:poi-ooxml:${poiVersion}")
		dependencies.add("earlib", "org.apache.poi:poi-scratchpad:${poiVersion}")
		dependencies.add("earlib", "org.apache.poi:poi-excelant:${poiVersion}")
		dependencies.add("earlib", "org.apache.xmlbeans:xmlbeans:${xmlbeansVersion}")
		dependencies.add("earlib", "org.bouncycastle:bcprov-jdk16:${bcprovJdk16Version}")
		dependencies.add("earlib", "org.codehaus.janino:janino:${janinoVersion}")
		dependencies.add("earlib", "org.codehaus.janino:commons-compiler:${commonsCompilerVersion}")
		dependencies.add("earlib", "org.codehaus.groovy:groovy:${groovyVersion}")
		dependencies.add("earlib", "org.igniterealtime.smack:smack:${smackVersion}")
		dependencies.add("earlib", "org.igniterealtime.smack:smackx:${smackVersion}")
		dependencies.add("earlib", "org.igniterealtime.smack:smackx:${smackVersion}")
		dependencies.add("earlib", "org.igniterealtime.smack:smackx-jingle:${smackVersion}")
		dependencies.add("earlib", "org.igniterealtime.smack:smackx-debug:${smackVersion}")
		dependencies.add("earlib", "com.itextpdf:itextpdf:${itextpdfVersion}")
		dependencies.add("earlib", "org.openmdx:openmdx-base:${openmdxVersion}")
		dependencies.add("earlib", "org.openmdx:openmdx-portal:${openmdxVersion}")
		dependencies.add("earlib", "org.openmdx:openmdx-security:${openmdxVersion}")
		// tools
	    tools.extendsFrom(implementation)
		dependencies.add("tools", "javax:javaee-api:${javaeeApiVersion}")
		dependencies.add("tools", "org.apache.openjpa:openjpa:${openjpaVersion}")
		dependencies.add("tools", "org.hsqldb:hsqldb:${hsqldbVersion}")
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy