Kotlin Support
Kotlin is a new statically typed programming language for modern multiplatform applications. It’s 100% interoperable with Java and Android and gaining in popularity in recent time.
Starting with v5, Axelor Open Platform now officially support Kotlin to create app modules.
We can use Eclipse for Kotlin development, but for best experience, use IntelliJ IDEA. |
Create Kotlin module
You can create a new application module using kotlin with following build.gradle
:
buildscript {
ext.kotlin_version = '1.2.10'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'com.axelor.app-module'
axelor {
title = "Axelor :: Hello"
}
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
That’s it. Your app module can now use Kotlin to implement business logic.
Create Services
Let’s create a simple HelloService using Kotlin:
HelloService.kt
package com.axelor.hello.service
interface HelloService {
fun say(what: String): Unit
}
and an implementation:
HelloServiceImpl.kt
package com.axelor.hello.service
open class HelloServiceImpl : HelloService {
override fun say(what: String) {
println("Say: ${what}")
}
}
Create Controllers
Let’s create a controller class HelloController
that uses the above HelloService
:
HelloController.kt
package com.axelor.hello.web
import com.axelor.hello.db.Hello
import com.axelor.hello.service.HelloService
import com.axelor.rpc.ActionRequest
import com.axelor.rpc.ActionResponse
import javax.inject.Inject
open class HelloController @Inject constructor(val service: HelloService) {
fun say(req: ActionRequest, res: ActionResponse) {
val ctx = req.context.asType(Hello::class.java)
service.say(ctx.message)
res.status = ActionResponse.STATUS_SUCCESS
}
}
Configure
Now it’s time to configure our kotlin services. Create a Guice module:
HelloModule.kt
package com.axelor.hello
import com.axelor.app.AxelorModule
import com.axelor.hello.service.DefaultHelloService
import com.axelor.hello.service.HelloService
class HelloModule : AxelorModule() {
override fun configure() {
bind(HelloService::class.java).to(DefaultHelloService::class.java)
}
}
That’s it…