From 8ebbdaac8ef2ae6267b492cc8f1bcefa88a17809 Mon Sep 17 00:00:00 2001 From: sanagaraj-pivotal Date: Sun, 29 May 2022 20:39:46 +0100 Subject: [PATCH 01/11] Adding support for Transaction --- .../core/AbstractTransactionalTranslator.java | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/core/AbstractTransactionalTranslator.java diff --git a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/core/AbstractTransactionalTranslator.java b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/core/AbstractTransactionalTranslator.java new file mode 100644 index 000000000..8239d933d --- /dev/null +++ b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/core/AbstractTransactionalTranslator.java @@ -0,0 +1,73 @@ +package org.springframework.sbm.mule.actions.javadsl.translators.core; + +import org.mulesoft.schema.mule.core.AbstractTransactional; +import org.springframework.sbm.mule.actions.javadsl.translators.Bean; +import org.springframework.sbm.mule.actions.javadsl.translators.DslSnippet; +import org.springframework.sbm.mule.actions.javadsl.translators.MuleComponentToSpringIntegrationDslTranslator; +import org.springframework.sbm.mule.api.toplevel.SubflowTopLevelElement; +import org.springframework.sbm.mule.api.toplevel.configuration.MuleConfigurations; +import org.springframework.stereotype.Component; + +import javax.xml.namespace.QName; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + + +@Component +public class AbstractTransactionalTranslator implements MuleComponentToSpringIntegrationDslTranslator { + @Override + public Class getSupportedMuleType() { + return AbstractTransactional.class; + } + + @Override + public DslSnippet translate(int id, + AbstractTransactional component, + QName name, + MuleConfigurations muleConfigurations, + String flowName, + Map translatorsMap) { + + SubflowTopLevelElement transactionalTopLevelElement = new SubflowTopLevelElement( + flowName + "Transactional_" + id, + component.getMessageProcessorOrOutboundEndpoint(), + muleConfigurations, + translatorsMap); + + String beanName = transactionalTopLevelElement.getGeneratedIdentity(); + + Set beans = transactionalTopLevelElement + .getDslSnippets() + .stream() + .map(DslSnippet::getBeans) + .flatMap(Collection::stream) + .collect(Collectors.toSet()); + + beans.add(new Bean(beanName, "org.springframework.integration.dsl.IntegrationFlow")); + + Set requiredImports = transactionalTopLevelElement + .getDslSnippets() + .stream() + .map(DslSnippet::getRequiredImports) + .flatMap(Collection::stream) + .collect(Collectors.toSet()); + + Set dependencies = transactionalTopLevelElement + .getDslSnippets() + .stream() + .map(DslSnippet::getRequiredDependencies) + .flatMap(Collection::stream) + .collect(Collectors.toSet()); + + return new DslSnippet( + ".gateway(" + beanName + ", e -> e.transactional(true))", + requiredImports, + dependencies, + beans, + "", + transactionalTopLevelElement.renderDslSnippet() + ); + } +} From bd9eaedcd3976dc73b49288605d84b61dae76173 Mon Sep 17 00:00:00 2001 From: sanagaraj-pivotal Date: Sun, 29 May 2022 20:43:45 +0100 Subject: [PATCH 02/11] Adding Copyright info --- .../core/AbstractTransactionalTranslator.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/core/AbstractTransactionalTranslator.java b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/core/AbstractTransactionalTranslator.java index 8239d933d..e547d588e 100644 --- a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/core/AbstractTransactionalTranslator.java +++ b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/core/AbstractTransactionalTranslator.java @@ -1,3 +1,18 @@ +/* + * Copyright 2021 - 2022 the original author or authors. + * + * Licensed 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 + * + * https://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.springframework.sbm.mule.actions.javadsl.translators.core; import org.mulesoft.schema.mule.core.AbstractTransactional; From 425971f32a0a516ef5ab3a3fca965bfd5e19481c Mon Sep 17 00:00:00 2001 From: sanagaraj-pivotal Date: Mon, 30 May 2022 09:53:56 +0100 Subject: [PATCH 03/11] Refactor --- .../core/AbstractTransactionalTranslator.java | 88 ------------------- 1 file changed, 88 deletions(-) delete mode 100644 components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/core/AbstractTransactionalTranslator.java diff --git a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/core/AbstractTransactionalTranslator.java b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/core/AbstractTransactionalTranslator.java deleted file mode 100644 index e547d588e..000000000 --- a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/core/AbstractTransactionalTranslator.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright 2021 - 2022 the original author or authors. - * - * Licensed 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 - * - * https://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.springframework.sbm.mule.actions.javadsl.translators.core; - -import org.mulesoft.schema.mule.core.AbstractTransactional; -import org.springframework.sbm.mule.actions.javadsl.translators.Bean; -import org.springframework.sbm.mule.actions.javadsl.translators.DslSnippet; -import org.springframework.sbm.mule.actions.javadsl.translators.MuleComponentToSpringIntegrationDslTranslator; -import org.springframework.sbm.mule.api.toplevel.SubflowTopLevelElement; -import org.springframework.sbm.mule.api.toplevel.configuration.MuleConfigurations; -import org.springframework.stereotype.Component; - -import javax.xml.namespace.QName; -import java.util.Collection; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - - -@Component -public class AbstractTransactionalTranslator implements MuleComponentToSpringIntegrationDslTranslator { - @Override - public Class getSupportedMuleType() { - return AbstractTransactional.class; - } - - @Override - public DslSnippet translate(int id, - AbstractTransactional component, - QName name, - MuleConfigurations muleConfigurations, - String flowName, - Map translatorsMap) { - - SubflowTopLevelElement transactionalTopLevelElement = new SubflowTopLevelElement( - flowName + "Transactional_" + id, - component.getMessageProcessorOrOutboundEndpoint(), - muleConfigurations, - translatorsMap); - - String beanName = transactionalTopLevelElement.getGeneratedIdentity(); - - Set beans = transactionalTopLevelElement - .getDslSnippets() - .stream() - .map(DslSnippet::getBeans) - .flatMap(Collection::stream) - .collect(Collectors.toSet()); - - beans.add(new Bean(beanName, "org.springframework.integration.dsl.IntegrationFlow")); - - Set requiredImports = transactionalTopLevelElement - .getDslSnippets() - .stream() - .map(DslSnippet::getRequiredImports) - .flatMap(Collection::stream) - .collect(Collectors.toSet()); - - Set dependencies = transactionalTopLevelElement - .getDslSnippets() - .stream() - .map(DslSnippet::getRequiredDependencies) - .flatMap(Collection::stream) - .collect(Collectors.toSet()); - - return new DslSnippet( - ".gateway(" + beanName + ", e -> e.transactional(true))", - requiredImports, - dependencies, - beans, - "", - transactionalTopLevelElement.renderDslSnippet() - ); - } -} From 2a50a8a501240a9b571a9ac06a1d5d45e467858f Mon Sep 17 00:00:00 2001 From: sanagaraj-pivotal Date: Mon, 30 May 2022 15:48:08 +0100 Subject: [PATCH 04/11] Passing Test --- .../sbm/mule/actions/MuleToJavaDSLTransactionalTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLTransactionalTest.java b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLTransactionalTest.java index 43b4e6f6d..2adb2c6a1 100644 --- a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLTransactionalTest.java +++ b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLTransactionalTest.java @@ -15,6 +15,7 @@ */ package org.springframework.sbm.mule.actions; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; From da2594d7f7f39f1b0bed34d9680533d054128981 Mon Sep 17 00:00:00 2001 From: sanagaraj-pivotal Date: Mon, 30 May 2022 15:50:48 +0100 Subject: [PATCH 05/11] adding more assertion --- .../sbm/mule/actions/MuleToJavaDSLTransactionalTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLTransactionalTest.java b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLTransactionalTest.java index 2adb2c6a1..43b4e6f6d 100644 --- a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLTransactionalTest.java +++ b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLTransactionalTest.java @@ -15,7 +15,6 @@ */ package org.springframework.sbm.mule.actions; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; From 08e67511659951c9f9a42c5c1dc8426dd8909874 Mon Sep 17 00:00:00 2001 From: sanagaraj-pivotal Date: Tue, 31 May 2022 14:03:58 +0100 Subject: [PATCH 06/11] Failing test for db:insert --- .../actions/db/MuleToJavaDSLDBInsertTest.java | 54 +++++++++++++++++++ .../MuleToJavaDSLDBSelectTest.java} | 5 +- .../{ => wmq}/MuleToJavaDSLWmqTest.java | 3 +- 3 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java rename components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/{MuleToJavaDSLDBTest.java => db/MuleToJavaDSLDBSelectTest.java} (97%) rename components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/{ => wmq}/MuleToJavaDSLWmqTest.java (98%) diff --git a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java new file mode 100644 index 000000000..ece83a4ef --- /dev/null +++ b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java @@ -0,0 +1,54 @@ +package org.springframework.sbm.mule.actions.db; + +import org.junit.jupiter.api.Test; +import org.springframework.sbm.mule.actions.JavaDSLActionBaseTest; + +import static org.assertj.core.api.Assertions.assertThat; + +public class MuleToJavaDSLDBInsertTest extends JavaDSLActionBaseTest { + + @Test + public void dbInsert() { + String muleXml = "\n" + + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " " + + " \n" + + "\n"; + + addXMLFileToResource(muleXml); + runAction(); + + assertThat(getGeneratedJavaFile()).isEqualTo("package com.example.javadsl;\n" + + "import org.springframework.context.annotation.Bean;\n" + + "import org.springframework.context.annotation.Configuration;\n" + + "import org.springframework.integration.dsl.IntegrationFlow;\n" + + "import org.springframework.integration.dsl.IntegrationFlows;\n" + + "import org.springframework.integration.handler.LoggingHandler;\n" + + "import org.springframework.integration.http.dsl.Http;\n" + + "\n" + + "@Configuration\n" + + "public class FlowConfigurations {\n" + + " @Bean\n" + + " IntegrationFlow dbFlow() {\n" + + " return IntegrationFlows.from(Http.inboundChannelAdapter(\"/\")).handle((p, h) -> p)\n" + + " .log(LoggingHandler.Level.INFO)\n" + + " .>handle((p, h) -> {\n" + + " jdbcTemplate.execute(\"INSERT INTO STUDENTS (NAME, AGE, CITY) VALUES (#[payload.name], #[payload.age], #[payload.city])\");\n" + + " return p;\n" + + " })\n" + + " .get();\n" + + " }}"); + } +} diff --git a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLDBTest.java b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBSelectTest.java similarity index 97% rename from components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLDBTest.java rename to components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBSelectTest.java index 236800b6a..a3ff71ec6 100644 --- a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLDBTest.java +++ b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBSelectTest.java @@ -13,17 +13,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.mule.actions; +package org.springframework.sbm.mule.actions.db; import org.junit.jupiter.api.Test; import org.springframework.sbm.build.api.Dependency; +import org.springframework.sbm.mule.actions.JavaDSLActionBaseTest; import java.util.Set; import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; -public class MuleToJavaDSLDBTest extends JavaDSLActionBaseTest { +public class MuleToJavaDSLDBSelectTest extends JavaDSLActionBaseTest { @Test public void translateDbSelectDynamicQuery() { diff --git a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLWmqTest.java b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/wmq/MuleToJavaDSLWmqTest.java similarity index 98% rename from components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLWmqTest.java rename to components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/wmq/MuleToJavaDSLWmqTest.java index 7bf200ab0..79f0fc722 100644 --- a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLWmqTest.java +++ b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/wmq/MuleToJavaDSLWmqTest.java @@ -14,11 +14,12 @@ * limitations under the License. */ -package org.springframework.sbm.mule.actions; +package org.springframework.sbm.mule.actions.wmq; import org.junit.jupiter.api.Test; import org.openrewrite.SourceFile; import org.springframework.sbm.build.api.Dependency; +import org.springframework.sbm.mule.actions.JavaDSLActionBaseTest; import org.springframework.sbm.project.resource.RewriteSourceFileHolder; import java.util.List; From 8fb5e67a4077f87eb1b069e2fca62c42009311fa Mon Sep 17 00:00:00 2001 From: sanagaraj-pivotal Date: Tue, 31 May 2022 14:47:45 +0100 Subject: [PATCH 07/11] Passing test for db:insert --- .../javadsl/translators/db/DBCommons.java | 7 +++ .../translators/db/InsertTranslator.java | 38 ++++++++++++++++ .../translators/db/SelectTranslator.java | 7 +-- .../mule/actions/JavaDSLActionBaseTest.java | 4 +- .../actions/db/MuleToJavaDSLDBInsertTest.java | 44 ++++++++++--------- 5 files changed, 74 insertions(+), 26 deletions(-) create mode 100644 components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/DBCommons.java create mode 100644 components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/InsertTranslator.java diff --git a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/DBCommons.java b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/DBCommons.java new file mode 100644 index 000000000..d7f5a23c0 --- /dev/null +++ b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/DBCommons.java @@ -0,0 +1,7 @@ +package org.springframework.sbm.mule.actions.javadsl.translators.db; + +public class DBCommons { + public static String escapeDoubleQuotes(String str) { + return str.replace("\"", "\\\""); + } +} diff --git a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/InsertTranslator.java b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/InsertTranslator.java new file mode 100644 index 000000000..53c519270 --- /dev/null +++ b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/InsertTranslator.java @@ -0,0 +1,38 @@ +package org.springframework.sbm.mule.actions.javadsl.translators.db; + +import org.mulesoft.schema.mule.db.InsertMessageProcessorType; +import org.springframework.sbm.mule.actions.javadsl.translators.DslSnippet; +import org.springframework.sbm.mule.actions.javadsl.translators.MuleComponentToSpringIntegrationDslTranslator; +import org.springframework.sbm.mule.api.toplevel.configuration.MuleConfigurations; +import org.springframework.stereotype.Component; + +import javax.xml.namespace.QName; +import java.util.Map; +import java.util.Set; + +@Component +public class InsertTranslator implements MuleComponentToSpringIntegrationDslTranslator { + @Override + public Class getSupportedMuleType() { + return InsertMessageProcessorType.class; + } + + @Override + public DslSnippet translate(int id, + InsertMessageProcessorType component, + QName name, + MuleConfigurations muleConfigurations, + String flowName, + Map translatorsMap) { + return DslSnippet.builder() + .renderedSnippet( + " // TODO: payload type might not be always LinkedMultiValueMap please change it to appropriate type \n" + + " // TODO: mule expression language is not converted to java, do it manually. example: #[payload] etc \n" + + " .>handle((p, h) -> {\n" + + " jdbcTemplate.execute(\"" + DBCommons.escapeDoubleQuotes(component.getParameterizedQuery()) + "\");\n" + + " return p;\n" + + " })") + .requiredImports(Set.of("org.springframework.util.LinkedMultiValueMap")) + .build(); + } +} diff --git a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/SelectTranslator.java b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/SelectTranslator.java index af0660410..e2de79be4 100644 --- a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/SelectTranslator.java +++ b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/SelectTranslator.java @@ -23,10 +23,11 @@ import org.springframework.stereotype.Component; import javax.xml.namespace.QName; -import java.util.Collections; import java.util.Map; import java.util.Set; +import static org.springframework.sbm.mule.actions.javadsl.translators.db.DBCommons.escapeDoubleQuotes; + @Component public class SelectTranslator implements MuleComponentToSpringIntegrationDslTranslator { @@ -59,8 +60,4 @@ public DslSnippet translate(int id, SelectMessageProcessorType component, .beans(Set.of(new Bean("jdbcTemplate", "org.springframework.jdbc.core.JdbcTemplate"))) .build(); } - - private String escapeDoubleQuotes(String str) { - return str.replace("\"", "\\\""); - } } diff --git a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/JavaDSLActionBaseTest.java b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/JavaDSLActionBaseTest.java index 669f8bc8d..6f583c3f9 100644 --- a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/JavaDSLActionBaseTest.java +++ b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/JavaDSLActionBaseTest.java @@ -24,6 +24,7 @@ import org.springframework.sbm.mule.actions.javadsl.translators.amqp.AmqpOutboundEndpointTranslator; import org.springframework.sbm.mule.actions.javadsl.translators.common.ExpressionLanguageTranslator; import org.springframework.sbm.mule.actions.javadsl.translators.core.*; +import org.springframework.sbm.mule.actions.javadsl.translators.db.InsertTranslator; import org.springframework.sbm.mule.actions.javadsl.translators.db.SelectTranslator; import org.springframework.sbm.mule.actions.javadsl.translators.dwl.DwlTransformTranslator; import org.springframework.sbm.mule.actions.javadsl.translators.http.HttpListenerConfigTypeAdapter; @@ -78,7 +79,8 @@ public void setup() { new ChoiceTranslator(), new SelectTranslator(), new ForeachTranslator(), - new TransactionalTranslator() + new TransactionalTranslator(), + new InsertTranslator() ); List topLevelTypeFactories = List.of( diff --git a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java index ece83a4ef..5c9931e67 100644 --- a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java +++ b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java @@ -30,25 +30,29 @@ public void dbInsert() { addXMLFileToResource(muleXml); runAction(); - assertThat(getGeneratedJavaFile()).isEqualTo("package com.example.javadsl;\n" + - "import org.springframework.context.annotation.Bean;\n" + - "import org.springframework.context.annotation.Configuration;\n" + - "import org.springframework.integration.dsl.IntegrationFlow;\n" + - "import org.springframework.integration.dsl.IntegrationFlows;\n" + - "import org.springframework.integration.handler.LoggingHandler;\n" + - "import org.springframework.integration.http.dsl.Http;\n" + - "\n" + - "@Configuration\n" + - "public class FlowConfigurations {\n" + - " @Bean\n" + - " IntegrationFlow dbFlow() {\n" + - " return IntegrationFlows.from(Http.inboundChannelAdapter(\"/\")).handle((p, h) -> p)\n" + - " .log(LoggingHandler.Level.INFO)\n" + - " .>handle((p, h) -> {\n" + - " jdbcTemplate.execute(\"INSERT INTO STUDENTS (NAME, AGE, CITY) VALUES (#[payload.name], #[payload.age], #[payload.city])\");\n" + - " return p;\n" + - " })\n" + - " .get();\n" + - " }}"); + assertThat(getGeneratedJavaFile()).isEqualTo( + "package com.example.javadsl;\n" + + "import org.springframework.context.annotation.Bean;\n" + + "import org.springframework.context.annotation.Configuration;\n" + + "import org.springframework.integration.dsl.IntegrationFlow;\n" + + "import org.springframework.integration.dsl.IntegrationFlows;\n" + + "import org.springframework.integration.handler.LoggingHandler;\n" + + "import org.springframework.integration.http.dsl.Http;\n" + + "import org.springframework.util.LinkedMultiValueMap;\n" + + "\n" + + "@Configuration\n" + + "public class FlowConfigurations {\n" + + " @Bean\n" + + " IntegrationFlow dbFlow() {\n" + + " return IntegrationFlows.from(Http.inboundChannelAdapter(\"/\")).handle((p, h) -> p)\n" + + " .log(LoggingHandler.Level.INFO)\n" + + " // TODO: payload type might not be always LinkedMultiValueMap please change it to appropriate type \n" + + " // TODO: mule expression language is not converted to java, do it manually. example: #[payload] etc \n" + + " .>handle((p, h) -> {\n" + + " jdbcTemplate.execute(\"INSERT INTO STUDENTS (NAME, AGE, CITY) VALUES (#[payload.name], #[payload.age], #[payload.city])\");\n" + + " return p;\n" + + " })\n" + + " .get();\n" + + " }}"); } } From 525753c8466ea998951fb669ccb88d239d57b9dc Mon Sep 17 00:00:00 2001 From: sanagaraj-pivotal Date: Tue, 31 May 2022 15:05:52 +0100 Subject: [PATCH 08/11] Copyright info --- .../actions/javadsl/translators/db/DBCommons.java | 15 +++++++++++++++ .../javadsl/translators/db/InsertTranslator.java | 15 +++++++++++++++ .../actions/db/MuleToJavaDSLDBInsertTest.java | 15 +++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/DBCommons.java b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/DBCommons.java index d7f5a23c0..0126dd507 100644 --- a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/DBCommons.java +++ b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/DBCommons.java @@ -1,3 +1,18 @@ +/* + * Copyright 2021 - 2022 the original author or authors. + * + * Licensed 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 + * + * https://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.springframework.sbm.mule.actions.javadsl.translators.db; public class DBCommons { diff --git a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/InsertTranslator.java b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/InsertTranslator.java index 53c519270..bf69d2441 100644 --- a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/InsertTranslator.java +++ b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/InsertTranslator.java @@ -1,3 +1,18 @@ +/* + * Copyright 2021 - 2022 the original author or authors. + * + * Licensed 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 + * + * https://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.springframework.sbm.mule.actions.javadsl.translators.db; import org.mulesoft.schema.mule.db.InsertMessageProcessorType; diff --git a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java index 5c9931e67..ac3e1d1b4 100644 --- a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java +++ b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java @@ -1,3 +1,18 @@ +/* + * Copyright 2021 - 2022 the original author or authors. + * + * Licensed 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 + * + * https://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.springframework.sbm.mule.actions.db; import org.junit.jupiter.api.Test; From 26e055ddcb58a75d7dc2f5d709c60cd1a8265ef7 Mon Sep 17 00:00:00 2001 From: sanagaraj-pivotal Date: Tue, 31 May 2022 15:09:26 +0100 Subject: [PATCH 09/11] Fixes missing bean jdbc template injection --- .../actions/javadsl/translators/db/InsertTranslator.java | 6 ++++++ .../sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/InsertTranslator.java b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/InsertTranslator.java index bf69d2441..fc4468280 100644 --- a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/InsertTranslator.java +++ b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/InsertTranslator.java @@ -16,6 +16,7 @@ package org.springframework.sbm.mule.actions.javadsl.translators.db; import org.mulesoft.schema.mule.db.InsertMessageProcessorType; +import org.springframework.sbm.mule.actions.javadsl.translators.Bean; import org.springframework.sbm.mule.actions.javadsl.translators.DslSnippet; import org.springframework.sbm.mule.actions.javadsl.translators.MuleComponentToSpringIntegrationDslTranslator; import org.springframework.sbm.mule.api.toplevel.configuration.MuleConfigurations; @@ -48,6 +49,11 @@ public DslSnippet translate(int id, " return p;\n" + " })") .requiredImports(Set.of("org.springframework.util.LinkedMultiValueMap")) + .requiredDependencies(Set.of( + "org.springframework.boot:spring-boot-starter-jdbc:2.5.5", + "org.springframework.integration:spring-integration-jdbc:5.5.4" + )) + .beans(Set.of(new Bean("jdbcTemplate", "org.springframework.jdbc.core.JdbcTemplate"))) .build(); } } diff --git a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java index ac3e1d1b4..de53eda24 100644 --- a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java +++ b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java @@ -58,7 +58,7 @@ public void dbInsert() { "@Configuration\n" + "public class FlowConfigurations {\n" + " @Bean\n" + - " IntegrationFlow dbFlow() {\n" + + " IntegrationFlow dbFlow(org.springframework.jdbc.core.JdbcTemplate jdbcTemplate) {\n" + " return IntegrationFlows.from(Http.inboundChannelAdapter(\"/\")).handle((p, h) -> p)\n" + " .log(LoggingHandler.Level.INFO)\n" + " // TODO: payload type might not be always LinkedMultiValueMap please change it to appropriate type \n" + From ac43636220d419510c2348aa878d8f921e1eb368 Mon Sep 17 00:00:00 2001 From: sanagaraj-pivotal Date: Tue, 31 May 2022 19:12:35 +0100 Subject: [PATCH 10/11] Fixing a bug in choice, otherwise statements were not importing beans, imports and dependencies --- .../translators/core/ChoiceTranslator.java | 60 ++++++++------- .../translators/db/InsertTranslator.java | 5 +- .../translators/db/SelectTranslator.java | 9 ++- .../mule/actions/MuleToJavaDSLChoiceTest.java | 73 +++++++++++++++++++ 4 files changed, 120 insertions(+), 27 deletions(-) diff --git a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/core/ChoiceTranslator.java b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/core/ChoiceTranslator.java index 16fa8a3b1..5aa818e68 100644 --- a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/core/ChoiceTranslator.java +++ b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/core/ChoiceTranslator.java @@ -61,24 +61,6 @@ public DslSnippet translate(int id, SelectiveOutboundRouterType component, translatorsMap))) .collect(Collectors.toList()); - String otherwiseSubflowMappings = ""; - - if (component.getOtherwise() != null) { - ChoiceTopLevelElement otherWiseStatement = new ChoiceTopLevelElement( - flowName, - component.getOtherwise().getMessageProcessorOrOutboundEndpoint(), - muleConfigurations, - translatorsMap); - - otherwiseSubflowMappings = defaultSubflowMapping.replace( - "$OTHERWISE_STATEMENTS", - otherWiseStatement.renderDslSnippet() - ); - - otherwiseSubflowMappings = " .resolutionRequired(false)\n" + - otherwiseSubflowMappings; - } - String whenSubflowMappings = whenStatements .stream() .map(item -> @@ -88,26 +70,54 @@ public DslSnippet translate(int id, SelectiveOutboundRouterType component, ) .collect(Collectors.joining()); + List whenStatementDslSnippets = whenStatements + .stream() + .map(item -> DslSnippet.createDSLSnippetFromTopLevelElement(item.getValue())) + .collect(Collectors.toList()); - Set requiredImports = whenStatements.stream() - .map(item -> item.getValue().getRequiredImports()) + Set requiredImports = whenStatementDslSnippets + .stream() + .map(DslSnippet::getRequiredImports) .flatMap(Collection::stream) .collect(Collectors.toSet()); + requiredImports.add("org.springframework.util.LinkedMultiValueMap"); - Set requiredBeans = whenStatements.stream() - .map(item -> item.getValue().getDslSnippets()) - .flatMap(Collection::stream) + Set requiredBeans = whenStatementDslSnippets.stream() .map(DslSnippet::getBeans) .flatMap(Collection::stream) .collect(Collectors.toSet()); - Set requiredDependencies = whenStatements.stream() - .map(item -> item.getValue().getRequiredDependencies()) + Set requiredDependencies = whenStatementDslSnippets.stream() + .map(DslSnippet::getRequiredDependencies) .flatMap(Collection::stream) .collect(Collectors.toSet()); + String otherwiseSubflowMappings = ""; + + if (component.getOtherwise() != null) { + ChoiceTopLevelElement otherWiseStatement = new ChoiceTopLevelElement( + flowName, + component.getOtherwise().getMessageProcessorOrOutboundEndpoint(), + muleConfigurations, + translatorsMap); + + DslSnippet otherWiseDSLSnippet = DslSnippet.createDSLSnippetFromTopLevelElement(otherWiseStatement); + + requiredImports.addAll(otherWiseDSLSnippet.getRequiredImports()); + requiredDependencies.addAll(otherWiseDSLSnippet.getRequiredDependencies()); + requiredBeans.addAll(otherWiseDSLSnippet.getBeans()); + + otherwiseSubflowMappings = defaultSubflowMapping.replace( + "$OTHERWISE_STATEMENTS", + otherWiseStatement.renderDslSnippet() + ); + + otherwiseSubflowMappings = " .resolutionRequired(false)\n" + + otherwiseSubflowMappings; + } + return DslSnippet.builder() .renderedSnippet("/* TODO: LinkedMultiValueMap might not be apt, substitute with right input type*/\n" + " ., String>route(\n" + diff --git a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/InsertTranslator.java b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/InsertTranslator.java index fc4468280..0824b9c8a 100644 --- a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/InsertTranslator.java +++ b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/InsertTranslator.java @@ -48,7 +48,10 @@ public DslSnippet translate(int id, " jdbcTemplate.execute(\"" + DBCommons.escapeDoubleQuotes(component.getParameterizedQuery()) + "\");\n" + " return p;\n" + " })") - .requiredImports(Set.of("org.springframework.util.LinkedMultiValueMap")) + .requiredImports(Set.of( + "org.springframework.util.LinkedMultiValueMap", + "org.springframework.jdbc.core.JdbcTemplate" + )) .requiredDependencies(Set.of( "org.springframework.boot:spring-boot-starter-jdbc:2.5.5", "org.springframework.integration:spring-integration-jdbc:5.5.4" diff --git a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/SelectTranslator.java b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/SelectTranslator.java index e2de79be4..a2d14f607 100644 --- a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/SelectTranslator.java +++ b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/db/SelectTranslator.java @@ -57,7 +57,14 @@ public DslSnippet translate(int id, SelectMessageProcessorType component, "org.springframework.boot:spring-boot-starter-jdbc:2.5.5", "org.springframework.integration:spring-integration-jdbc:5.5.4" )) - .beans(Set.of(new Bean("jdbcTemplate", "org.springframework.jdbc.core.JdbcTemplate"))) + .beans( + Set.of( + new Bean( + "jdbcTemplate", + "org.springframework.jdbc.core.JdbcTemplate" + ) + ) + ) .build(); } } diff --git a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLChoiceTest.java b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLChoiceTest.java index 419d5ee22..eddea0ac9 100644 --- a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLChoiceTest.java +++ b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLChoiceTest.java @@ -300,4 +300,77 @@ public void nestedChoiceDoesNotError() { addXMLFileToResource(xmlNestedChoice); runAction(); } + + @Test + public void otherwiseStatementShouldDoImportsBeansAndDependencies() { + String xml = "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "\n"; + + addXMLFileToResource(xml); + runAction(); + + assertThat(getGeneratedJavaFile()).isEqualTo( + "package com.example.javadsl;\n" + + "import org.springframework.context.annotation.Bean;\n" + + "import org.springframework.context.annotation.Configuration;\n" + + "import org.springframework.http.HttpMethod;\n" + + "import org.springframework.integration.dsl.IntegrationFlow;\n" + + "import org.springframework.integration.dsl.IntegrationFlows;\n" + + "import org.springframework.integration.handler.LoggingHandler;\n" + + "import org.springframework.integration.http.dsl.Http;\n" + + "import org.springframework.jdbc.core.JdbcTemplate;\n" + + "import org.springframework.util.LinkedMultiValueMap;\n" + + "\n" + + "@Configuration\n" + + "public class FlowConfigurations {\n" + + " @Bean\n" + + " IntegrationFlow post__insert_application_json_cmb_hsbcnet_ss_sa_entitlement_change_request_config(org.springframework.jdbc.core.JdbcTemplate jdbcTemplate) {\n" + + " // FIXME: the base path for Http.inboundGateway must be extracted from http:listener in flow containing apikit:router with config-ref=\"cmb-hsbcnet-ss-sa-entitlement-change-request-config\"\n" + + " // FIXME: add all JavaDSL generated components between http:listener and apikit:router with config-ref=\"cmb-hsbcnet-ss-sa-entitlement-change-request-config\" into this flow\n" + + " // FIXME: remove the JavaDSL generated method containing apikit:router with config-ref=\"cmb-hsbcnet-ss-sa-entitlement-change-request-config\"\n" + + " return IntegrationFlows.from(\n" + + " Http.inboundGateway(\"/insert\").requestMapping(r -> r.methods(HttpMethod.POST)))\n" + + " /* TODO: LinkedMultiValueMap might not be apt, substitute with right input type*/\n" + + " ., String>route(\n" + + " p -> p.getFirst(\"dataKey\") /*TODO: use apt condition*/,\n" + + " m -> m\n" + + " .subFlowMapping(\"dataValue\" /*TODO: Translate dataValue to #[payload == null || payload.size() == 0]*/,\n" + + " sf -> sf.log(LoggingHandler.Level.DEBUG, \"empty details list: change request id ${flowVars.changeRequestId}\")\n" + + " )\n" + + " .resolutionRequired(false)\n" + + " .defaultSubFlowMapping(sf -> sf.log(LoggingHandler.Level.DEBUG, \"insert details: change request id ${flowVars.changeRequestId}\")\n" + + " // TODO: payload type might not be always LinkedMultiValueMap please change it to appropriate type \n" + + " // TODO: mule expression language is not converted to java, do it manually. example: #[payload] etc \n" + + " .>handle((p, h) -> {\n" + + " jdbcTemplate.execute(\"INSERT INTO ${ORA_SCHEMA}.CHANGE_REQUEST_DETAILS (CHANGE_REQUEST_ID, CR_ATTRIBUTE_ID, SECONDARY_ATTRIBUTE, OLD_VALUE, NEW_VALUE) VALUES (#[flowVars.changeRequestId], #[payload.crAttributeId], #[payload.secondaryAttribute], #[payload.oldValue], #[payload.newValue])\");\n" + + " return p;\n" + + " }))\n" + + " )\n" + + " .get();\n" + + " }}"); + } } From 69eafc1060806e7a3fd19cb2fa45689a112ca1cf Mon Sep 17 00:00:00 2001 From: sanagaraj-pivotal Date: Tue, 31 May 2022 19:33:56 +0100 Subject: [PATCH 11/11] Fixing test --- .../sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java index de53eda24..7a9e6fdd0 100644 --- a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java +++ b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/db/MuleToJavaDSLDBInsertTest.java @@ -53,6 +53,7 @@ public void dbInsert() { "import org.springframework.integration.dsl.IntegrationFlows;\n" + "import org.springframework.integration.handler.LoggingHandler;\n" + "import org.springframework.integration.http.dsl.Http;\n" + + "import org.springframework.jdbc.core.JdbcTemplate;\n" + "import org.springframework.util.LinkedMultiValueMap;\n" + "\n" + "@Configuration\n" +