You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2019/10/16 12:06:18 UTC

[camel-k-runtime] branch master updated: kotlin: improve rest dsl

This is an automated email from the ASF dual-hosted git repository.

lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-runtime.git


The following commit(s) were added to refs/heads/master by this push:
     new 7d6a1d5  kotlin: improve rest dsl
7d6a1d5 is described below

commit 7d6a1d5ba631abe290c85332e7628513db7b1dfb
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Wed Oct 16 13:52:29 2019 +0200

    kotlin: improve rest dsl
---
 .../k/loader/groovy/dsl/RestConfiguration.groovy   |  3 +-
 .../k/loader/kotlin/dsl/BeansConfiguration.kt      |  4 +-
 .../k/loader/kotlin/dsl/ContextConfiguration.kt    |  4 +-
 .../loader/kotlin/dsl/IntegrationConfiguration.kt  |  9 ++++-
 .../camel/k/loader/kotlin/dsl/RestConfiguration.kt |  9 ++---
 .../k/loader/kotlin/dsl/RestVerbConfiguration.kt   | 45 ++++++++++++++++++++++
 .../camel/k/loader/kotlin/dsl/IntegrationTest.kt   | 27 ++++++++++++-
 .../src/test/resources/routes-with-rest.kts        | 12 ++++++
 8 files changed, 100 insertions(+), 13 deletions(-)

diff --git a/camel-k-loader-groovy/src/main/groovy/org/apache/camel/k/loader/groovy/dsl/RestConfiguration.groovy b/camel-k-loader-groovy/src/main/groovy/org/apache/camel/k/loader/groovy/dsl/RestConfiguration.groovy
index f693ac6..a9e82e9 100644
--- a/camel-k-loader-groovy/src/main/groovy/org/apache/camel/k/loader/groovy/dsl/RestConfiguration.groovy
+++ b/camel-k-loader-groovy/src/main/groovy/org/apache/camel/k/loader/groovy/dsl/RestConfiguration.groovy
@@ -18,7 +18,6 @@ package org.apache.camel.k.loader.groovy.dsl
 
 import org.apache.camel.builder.RouteBuilder
 import org.apache.camel.model.rest.RestConfigurationDefinition
-import org.apache.camel.model.rest.RestDefinition
 
 class RestConfiguration extends RestVerbConfiguration {
     RestConfiguration(RouteBuilder builder) {
@@ -37,7 +36,7 @@ class RestConfiguration extends RestVerbConfiguration {
         callable.call()
     }
 
-    def path(String path, @DelegatesTo(RestDefinition) Closure<?> callable) {
+    def path(String path, @DelegatesTo(RestVerbConfiguration) Closure<?> callable) {
         callable.resolveStrategy = Closure.DELEGATE_FIRST
         callable.delegate = new RestVerbConfiguration(builder, path)
         callable.call()
diff --git a/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/BeansConfiguration.kt b/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/BeansConfiguration.kt
index 044280f..13de3a7 100644
--- a/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/BeansConfiguration.kt
+++ b/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/BeansConfiguration.kt
@@ -22,7 +22,9 @@ import org.apache.camel.Predicate
 import org.apache.camel.Processor
 import org.apache.camel.builder.endpoint.EndpointBuilderFactory
 
-class BeansConfiguration(val context: CamelContext) : EndpointBuilderFactory {
+class BeansConfiguration(
+        val context: CamelContext) : EndpointBuilderFactory {
+
     inline fun <reified T : Any> bean(name: String, block: T.() -> Unit) {
         var bean = T::class.java.newInstance()
         bean.block()
diff --git a/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/ContextConfiguration.kt b/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/ContextConfiguration.kt
index e701ad4..847c945 100644
--- a/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/ContextConfiguration.kt
+++ b/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/ContextConfiguration.kt
@@ -19,7 +19,9 @@ package org.apache.camel.k.loader.kotlin.dsl
 import org.apache.camel.CamelContext
 import org.apache.camel.spi.Registry
 
-class ContextConfiguration (val registry: Registry, val context: CamelContext) {
+class ContextConfiguration (
+        private val context: CamelContext,
+        private val registry: Registry) {
 
     fun registry(block: RegistryConfiguration.() -> Unit): RegistryConfiguration {
         val delegate = RegistryConfiguration(registry)
diff --git a/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/IntegrationConfiguration.kt b/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/IntegrationConfiguration.kt
index 6eb100f..da2f45c 100644
--- a/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/IntegrationConfiguration.kt
+++ b/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/IntegrationConfiguration.kt
@@ -22,6 +22,7 @@ import org.apache.camel.builder.endpoint.EndpointBuilderFactory
 import org.apache.camel.builder.endpoint.EndpointRouteBuilder
 import org.apache.camel.k.loader.kotlin.KotlinCompilationConfiguration
 import org.apache.camel.model.*
+import org.apache.camel.model.rest.RestDefinition
 import org.apache.camel.spi.Registry
 import kotlin.script.experimental.annotations.KotlinScript
 
@@ -30,16 +31,20 @@ abstract class IntegrationConfiguration(
         private val registry : Registry,
         private val builder : EndpointRouteBuilder) : BuilderSupport(builder.context), Support, EndpointBuilderFactory {
 
+    fun rest(): RestDefinition {
+        return builder.rest()
+    }
+
     fun rest(block: RestConfiguration.() -> Unit) {
         RestConfiguration(builder).block()
     }
 
     fun beans(block: BeansConfiguration.() -> Unit) {
-        BeansConfiguration(context = context).block()
+        BeansConfiguration(context).block()
     }
 
     fun context(block: ContextConfiguration.() -> Unit) {
-        ContextConfiguration(context = context, registry = registry).block()
+        ContextConfiguration(context, registry).block()
     }
 
     fun from(uri: String): RouteDefinition {
diff --git a/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/RestConfiguration.kt b/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/RestConfiguration.kt
index d70aa0c..737b9db 100644
--- a/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/RestConfiguration.kt
+++ b/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/RestConfiguration.kt
@@ -18,9 +18,9 @@ package org.apache.camel.k.loader.kotlin.dsl
 
 import org.apache.camel.builder.RouteBuilder
 import org.apache.camel.model.rest.RestConfigurationDefinition
-import org.apache.camel.model.rest.RestDefinition
 
-class RestConfiguration(val builder: RouteBuilder) {
+class RestConfiguration(
+        private val builder: RouteBuilder) : RestVerbConfiguration(builder, builder.rest()) {
 
     fun configuration(block: RestConfigurationDefinition.() -> Unit) {
         val delegate = builder.restConfiguration()
@@ -32,8 +32,7 @@ class RestConfiguration(val builder: RouteBuilder) {
         delegate.block()
     }
 
-    fun path(path: String, block: RestDefinition.() -> Unit) {
-        val delegate = builder.rest(path)
-        delegate.block()
+    fun path(path: String, block: RestVerbConfiguration.() -> Unit) {
+        RestVerbConfiguration(builder, path).block()
     }
 }
\ No newline at end of file
diff --git a/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/RestVerbConfiguration.kt b/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/RestVerbConfiguration.kt
new file mode 100644
index 0000000..42e728c
--- /dev/null
+++ b/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/RestVerbConfiguration.kt
@@ -0,0 +1,45 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.loader.kotlin.dsl
+
+import org.apache.camel.builder.RouteBuilder
+import org.apache.camel.model.rest.RestDefinition
+
+open class RestVerbConfiguration(
+        private val builder: RouteBuilder,
+        private val definition: RestDefinition) {
+
+    constructor(builder: RouteBuilder, path: String): this(builder, builder.rest(path))
+
+    fun get(path: String, block: RestDefinition.() -> Unit) = definition.get(path).block()
+    fun get(block: RestDefinition.() -> Unit) = definition.get().block()
+
+    fun post(path: String, block: RestDefinition.() -> Unit) = definition.post(path).block()
+    fun post(block: RestDefinition.() -> Unit) = definition.post().block()
+
+    fun delete(path: String, block: RestDefinition.() -> Unit) = definition.delete(path).block()
+    fun delete(block: RestDefinition.() -> Unit) = definition.delete().block()
+
+    fun head(path: String, block: RestDefinition.() -> Unit) = definition.head(path).block()
+    fun head(block: RestDefinition.() -> Unit) = definition.head().block()
+
+    fun put(path: String, block: RestDefinition.() -> Unit) = definition.put(path).block()
+    fun put(block: RestDefinition.() -> Unit) = definition.put().block()
+
+    fun patch(path: String, block: RestDefinition.() -> Unit) = definition.patch(path).block()
+    fun patch(block: RestDefinition.() -> Unit) = definition.patch().block()
+}
\ No newline at end of file
diff --git a/camel-k-loader-kotlin/src/test/kotlin/org/apache/camel/k/loader/kotlin/dsl/IntegrationTest.kt b/camel-k-loader-kotlin/src/test/kotlin/org/apache/camel/k/loader/kotlin/dsl/IntegrationTest.kt
index 8f274e0..9f14169 100644
--- a/camel-k-loader-kotlin/src/test/kotlin/org/apache/camel/k/loader/kotlin/dsl/IntegrationTest.kt
+++ b/camel-k-loader-kotlin/src/test/kotlin/org/apache/camel/k/loader/kotlin/dsl/IntegrationTest.kt
@@ -24,6 +24,8 @@ import org.apache.camel.impl.DefaultCamelContext
 import org.apache.camel.k.Runtime
 import org.apache.camel.k.listener.RoutesConfigurer.forRoutes
 import org.apache.camel.model.ModelCamelContext
+import org.apache.camel.model.rest.GetVerbDefinition
+import org.apache.camel.model.rest.PostVerbDefinition
 import org.apache.camel.processor.FatalFallbackErrorHandler
 import org.apache.camel.support.DefaultHeaderFilterStrategy
 import org.assertj.core.api.Assertions.assertThat
@@ -42,8 +44,29 @@ class IntegrationTest {
         assertThat(context.restConfiguration.port).isEqualTo(9192)
         assertThat(context.getRestConfiguration("undertow", false).host).isEqualTo("my-undertow-host")
         assertThat(context.getRestConfiguration("undertow", false).port).isEqualTo(9193)
-        assertThat(context.adapt(ModelCamelContext::class.java).restDefinitions.size).isEqualTo(1)
-        assertThat(context.adapt(ModelCamelContext::class.java).restDefinitions[0].path).isEqualTo("/my/path")
+        assertThat(context.adapt(ModelCamelContext::class.java).restDefinitions.size).isEqualTo(2)
+
+        with(context.adapt(ModelCamelContext::class.java).restDefinitions.find { it.path == "/my/path" }) {
+            assertThat(this?.verbs).hasSize(1)
+
+            with(this?.verbs?.get(0) as GetVerbDefinition) {
+                assertThat(uri).isEqualTo("/get")
+                assertThat(consumes).isEqualTo("application/json")
+                assertThat(produces).isEqualTo("application/json")
+                assertThat(to).hasFieldOrPropertyWithValue("endpointUri", "direct:get")
+            }
+        }
+
+        with(context.adapt(ModelCamelContext::class.java).restDefinitions.find { it.path == "/post" }) {
+            assertThat(this?.verbs).hasSize(1)
+
+            with(this?.verbs?.get(0) as PostVerbDefinition) {
+                assertThat(uri).isNull()
+                assertThat(consumes).isEqualTo("application/json")
+                assertThat(produces).isEqualTo("application/json")
+                assertThat(to).hasFieldOrPropertyWithValue("endpointUri", "direct:post")
+            }
+        }
     }
 
     @Test
diff --git a/camel-k-loader-kotlin/src/test/resources/routes-with-rest.kts b/camel-k-loader-kotlin/src/test/resources/routes-with-rest.kts
index 81ffe86..8d4d82e 100644
--- a/camel-k-loader-kotlin/src/test/resources/routes-with-rest.kts
+++ b/camel-k-loader-kotlin/src/test/resources/routes-with-rest.kts
@@ -11,6 +11,18 @@ rest {
     }
 
     path("/my/path") {
+        get("/get") {
+            consumes("application/json")
+            produces("application/json")
+            to("direct:get")
+        }
+    }
+
+    post {
+        path("/post")
+        consumes("application/json")
+        produces("application/json")
+        to("direct:post")
     }
 }