This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch kamelet-dupid in repository https://gitbox.apache.org/repos/asf/camel.git
commit 7ecc51b66ea5e3668c01180567e416be428430b6 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu Apr 18 17:07:13 2024 +0200 CAMEL-20687: camel-kamelet - Make kamelets that have ids assigned - to use nodePrefixId for avoid duplicate id clashes --- .../java/org/apache/camel/component/kamelet/Kamelet.java | 12 ++++++++++-- .../apache/camel/component/kamelet/KameletComponent.java | 8 ++++++-- .../apache/camel/component/kamelet/KameletRouteTest.java | 15 --------------- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/Kamelet.java b/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/Kamelet.java index 3db8c6f8250..0432b9d1f16 100644 --- a/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/Kamelet.java +++ b/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/Kamelet.java @@ -43,6 +43,7 @@ public final class Kamelet { public static final String PARAM_ROUTE_ID = "routeId"; public static final String PARAM_TEMPLATE_ID = "templateId"; public static final String PARAM_LOCATION = "location"; + public static final String PARAM_UUID = "uuid"; public static final String DEFAULT_LOCATION = "classpath:/kamelets"; public static final String NO_ERROR_HANDLER = "noErrorHandler"; @@ -77,7 +78,11 @@ public final class Kamelet { return answer; } - public static String extractRouteId(CamelContext context, String remaining, Map<String, Object> parameters) { + public static String extractUuid() { + return UUID.generateUuid(); + } + + public static String extractRouteId(CamelContext context, String remaining, Map<String, Object> parameters, String uuid) { Object param = parameters.get(PARAM_ROUTE_ID); if (param != null) { return CamelContextHelper.mandatoryConvertTo(context, String.class, param); @@ -92,7 +97,7 @@ public final class Kamelet { answer = StringHelper.after(remaining, "/"); } if (answer == null) { - answer = extractTemplateId(context, remaining, parameters) + "-" + UUID.generateUuid(); + answer = extractTemplateId(context, remaining, parameters) + "-" + uuid; } return answer; @@ -126,8 +131,10 @@ public final class Kamelet { public static RouteDefinition templateToRoute(RouteTemplateDefinition in, Map<String, Object> parameters) { final String rid = (String) parameters.get(PARAM_ROUTE_ID); final boolean noErrorHandler = (boolean) parameters.get(NO_ERROR_HANDLER); + final String uuid = (String) parameters.get(PARAM_UUID); ObjectHelper.notNull(rid, PARAM_ROUTE_ID); + ObjectHelper.notNull(uuid, PARAM_UUID); RouteDefinition def = in.asRouteDefinition(); // mark this as created from a kamelet @@ -135,6 +142,7 @@ public final class Kamelet { def.setLocation(in.getLocation()); def.setLineNumber(in.getLineNumber()); def.setId(rid); + def.setNodePrefixId(uuid); if (noErrorHandler) { def.setErrorHandlerFactory(new NoErrorHandlerBuilder()); } diff --git a/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/KameletComponent.java b/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/KameletComponent.java index eede00621b4..47295231fde 100644 --- a/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/KameletComponent.java +++ b/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/KameletComponent.java @@ -49,6 +49,7 @@ import static org.apache.camel.component.kamelet.Kamelet.NO_ERROR_HANDLER; import static org.apache.camel.component.kamelet.Kamelet.PARAM_LOCATION; import static org.apache.camel.component.kamelet.Kamelet.PARAM_ROUTE_ID; import static org.apache.camel.component.kamelet.Kamelet.PARAM_TEMPLATE_ID; +import static org.apache.camel.component.kamelet.Kamelet.PARAM_UUID; /** * Materialize route templates @@ -105,7 +106,8 @@ public class KameletComponent extends DefaultComponent { @Override protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { final String templateId = Kamelet.extractTemplateId(getCamelContext(), remaining, parameters); - final String routeId = Kamelet.extractRouteId(getCamelContext(), remaining, parameters); + final String uuid = Kamelet.extractUuid(); + final String routeId = Kamelet.extractRouteId(getCamelContext(), remaining, parameters, uuid); final String loc = Kamelet.extractLocation(getCamelContext(), parameters); parameters.remove(PARAM_TEMPLATE_ID); @@ -224,6 +226,7 @@ public class KameletComponent extends DefaultComponent { // kameletProperties.put(PARAM_TEMPLATE_ID, templateId); kameletProperties.put(PARAM_ROUTE_ID, routeId); + kameletProperties.put(PARAM_UUID, uuid); kameletProperties.put(NO_ERROR_HANDLER, endpoint.isNoErrorHandler()); // set kamelet specific properties @@ -415,6 +418,7 @@ public class KameletComponent extends DefaultComponent { final String templateId = endpoint.getTemplateId(); final String routeId = endpoint.getRouteId(); final String loc = endpoint.getLocation() != null ? endpoint.getLocation() : getLocation(); + final String uuid = (String) endpoint.getKameletProperties().get(PARAM_UUID); if (context.getRouteTemplateDefinition(templateId) == null && loc != null) { LOGGER.debug("Loading route template={} from {}", templateId, loc); @@ -424,7 +428,7 @@ public class KameletComponent extends DefaultComponent { LOGGER.debug("Creating route from template={} and id={}", templateId, routeId); try { - String id = context.addRouteFromTemplate(routeId, templateId, endpoint.getKameletProperties()); + String id = context.addRouteFromTemplate(routeId, templateId, uuid, endpoint.getKameletProperties()); RouteDefinition def = context.getRouteDefinition(id); // start the route if not already started diff --git a/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletRouteTest.java b/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletRouteTest.java index 3e6b1b1cbe2..052e09311b8 100644 --- a/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletRouteTest.java +++ b/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletRouteTest.java @@ -18,14 +18,12 @@ package org.apache.camel.component.kamelet; import java.util.UUID; -import org.apache.camel.FailedToCreateRouteException; import org.apache.camel.RoutesBuilder; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.test.junit5.CamelTestSupport; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; public class KameletRouteTest extends CamelTestSupport { @Test @@ -44,19 +42,6 @@ public class KameletRouteTest extends CamelTestSupport { fluentTemplate.toF("direct:chain").withBody(body).request(String.class)).isEqualTo("b-a-" + body); } - @Test - public void duplicateRouteId() { - RouteBuilder rb = new RouteBuilder(context) { - @Override - public void configure() { - from("direct:start") - .to("kamelet:echo/test?prefix=test"); - } - }; - - assertThrows(FailedToCreateRouteException.class, () -> rb.addRoutesToCamelContext(context)); - } - // ********************************************** // // test set-up