Skip to content

Commit 7fc5d72

Browse files
committed
Add triggermesh parameter and clean up mule to boot integration
1 parent 1352c83 commit 7fc5d72

File tree

8 files changed

+67
-7
lines changed

8 files changed

+67
-7
lines changed

applications/spring-shell/src/main/resources/application.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ spring.profiles.active=default, core
1818
spring.application.name=spring-boot-migrator
1919
# toggle support for git to sync and auto-commit
2020
sbm.gitSupportEnabled=true
21+
sbm.muleTriggerMeshTransformEnabled=true
2122
logging.level.org=ERROR
2223
logging.level.org.springframework.sbm.logging.MethodCallTraceInterceptor=DEBUG
2324
logging.level.org.springframework.sbm.logging.StopWatchTraceInterceptor=DEBUG

applications/spring-shell/src/main/resources/banner.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,15 @@ Base Package: ${sbm.defaultBasePackage}
3838

3939
Use -Dsbm.defaultBasePackage=com.acme.packagename as VM parameter on startup to set the property.
4040

41+
TriggerMesh transformation support of Dataweave: ${sbm.muleTriggerMeshTransformEnabled}
42+
43+
- When applying the mule-to-boot recipe, use `sbm.muleTriggerMeshTransformEnabled` to
44+
generate the code required to send the Dataweave transformation to TriggerMesh using
45+
the TriggerMesh Dataweave transformation service (https://docs.triggermesh.io/guides/dataweavetransformation/).
46+
- This will require a TriggerMesh transformation exist on your Kubernetes cluster to function. When running the
47+
service, be sure to set the `K_SINK` environment variable to your exposed service URL.
48+
49+
Use -Dsbm.muleTriggerMeshTransformEnabled=true|false as VM parameter on startup to set property.
4150

4251
Get Started:
4352
------------

components/sbm-core/src/main/java/org/springframework/sbm/project/resource/SbmApplicationProperties.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
@ConfigurationProperties(prefix = "sbm")
3131
public class SbmApplicationProperties {
3232
private boolean gitSupportEnabled;
33+
private boolean muleTriggerMeshTransformEnabled;
3334
private String defaultBasePackage;
3435
private boolean writeInMavenLocal;
3536
private boolean javaParserLoggingCompilationWarningsAndErrors;

components/sbm-core/src/main/resources/application-core.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
# toggle support for git to sync and auto-commit
2020
sbm.gitSupportEnabled=true
21+
# toggle support to use TriggerMesh for dataweave transformations
22+
sbm.muleTriggerMeshTransformEnabled=false
2123
# default base package when adding classes and no base package can be calculated
2224
sbm.defaultBasePackage=org.springframework.sbm
2325
# default groupId when creating a new build file

components/sbm-core/src/test/java/org/springframework/sbm/project/parser/ProjectContextInitializerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
JavaRefactoringFactoryImpl.class,
8888
ProjectResourceWrapperRegistry.class,
8989
RewriteSourceFileWrapper.class
90-
}, properties = {"sbm.gitSupportEnabled=false"})
90+
}, properties = {"sbm.gitSupportEnabled=false", "sbm.muleTriggerMeshTransformEnabled=false"})
9191
@Disabled
9292
class ProjectContextInitializerTest {
9393

components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/MigrateMuleToBoot.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.springframework.sbm.mule;
1717

18+
import lombok.RequiredArgsConstructor;
1819
import org.springframework.beans.factory.annotation.Autowired;
1920
import org.springframework.context.annotation.Bean;
2021
import org.springframework.context.annotation.Configuration;
@@ -30,23 +31,34 @@
3031
import org.springframework.sbm.java.migration.conditions.HasTypeAnnotation;
3132
import org.springframework.sbm.mule.actions.JavaDSLAction2;
3233
import org.springframework.sbm.mule.conditions.MuleConfigFileExist;
34+
import org.springframework.sbm.project.resource.SbmApplicationProperties;
3335

3436
import java.util.List;
3537

38+
@RequiredArgsConstructor
3639
@Configuration
3740
public class MigrateMuleToBoot {
41+
private final SbmApplicationProperties sbmProperties;
3842

3943
@Autowired
4044
private JavaDSLAction2 javaDSLAction2;
4145

42-
4346
@Bean
4447
public Recipe muleRecipe() {
48+
String name = "migrate-mule-to-boot";
49+
String description = "Migrate Mulesoft 3.9 to Spring Boot.";
50+
51+
// Flag to enable TriggerMesh ransformation mode
52+
if (sbmProperties.isMuleTriggerMeshTransformEnabled()) {
53+
name = "migrate-mule-to-triggermesh-boot";
54+
description = "Migrate Mulesoft 3.9 to Spring Boot using TriggerMesh.";
55+
javaDSLAction2.setMuleTriggerMeshTransformEnabled(true);
56+
}
57+
4558
return Recipe.builder()
46-
.name("migrate-mule-to-boot")
47-
.description("Migrate Mulesoft 3.9 to Spring Boot")
59+
.name(name)
60+
.description(description)
4861
.order(60)
49-
.description("Migrate Mulesoft to Spring Boot")
5062
.condition(new MuleConfigFileExist())
5163
.actions(List.of(
5264
/*

components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/JavaDSLAction2.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,10 @@
3030
import org.springframework.sbm.java.api.JavaSource;
3131
import org.springframework.sbm.java.api.JavaSourceAndType;
3232
import org.springframework.sbm.java.api.Type;
33+
import org.springframework.sbm.mule.actions.javadsl.translators.DslSnippet;
3334
import org.springframework.sbm.mule.api.MuleMigrationContext;
3435
import org.springframework.sbm.mule.api.MuleMigrationContextFactory;
36+
import org.springframework.sbm.mule.api.toplevel.AbstractTopLevelElement;
3537
import org.springframework.sbm.mule.api.toplevel.TopLevelElement;
3638
import org.springframework.sbm.mule.api.toplevel.TopLevelElementFactory;
3739
import org.springframework.sbm.mule.api.toplevel.UnknownTopLevelElement;
@@ -54,6 +56,8 @@ public class JavaDSLAction2 extends AbstractAction {
5456
private final MuleMigrationContextFactory muleMigrationContextFactory;
5557
private final Map<Class<?>, TopLevelElementFactory> topLevelTypeMap;
5658

59+
private boolean muleTriggerMeshTransformEnabled;
60+
5761
@Autowired
5862
public JavaDSLAction2(MuleMigrationContextFactory muleMigrationContextFactory, List<TopLevelElementFactory> topLevelTypeFactories) {
5963
topLevelTypeMap = topLevelTypeFactories.stream()
@@ -110,6 +114,11 @@ private void handleTopLevelElements(BuildFile buildFile, MuleMigrationContext mu
110114
buildFile.addDependencies(new ArrayList<>(dependencies));
111115
endProcess();
112116

117+
if (muleTriggerMeshTransformEnabled) {
118+
logEvent("Adding TriggerMesh Dataweave payload class");
119+
createClass(context, createTmDwPayloadClass(context));
120+
}
121+
113122
logEvent("Adding " + topLevelElements.size() + " methods");
114123
topLevelElements.forEach(topLevelElement -> {
115124
flowConfigurationSource.getType().addMethod(
@@ -228,4 +237,25 @@ private SpringBootApplicationProperties findOrCreateDefaultApplicationProperties
228237
.findFirst()
229238
.get();
230239
}
240+
241+
public void setMuleTriggerMeshTransformEnabled(boolean mode) {
242+
this.muleTriggerMeshTransformEnabled = mode;
243+
}
244+
245+
private String createTmDwPayloadClass(ProjectContext projectContext) {
246+
JavaSourceSet mainJavaSourceSet = projectContext.getApplicationModules().getTopmostApplicationModules().get(0).getMainJavaSourceSet();
247+
String packageName = mainJavaSourceSet.getJavaSourceLocation().getPackageName();
248+
return "package " + packageName + ";\n" +
249+
"import " + SPRING_CONFIGURATION_ANNOTATION + ";\n\n" +
250+
"import lombok.Data;\n\n" +
251+
"/* Included with the baseline to support bridging between the Flow configuration and the translation implementation. */\n\n" +
252+
"@Data\n" +
253+
"public class TmDwPayload {\n" +
254+
" private String id;\n" +
255+
" private String source;\n" +
256+
" private String sourceType;\n" +
257+
" private String payload;\n" +
258+
"}\n";
259+
}
260+
231261
}

components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/dwl/DwlTransformTranslator.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,14 +142,19 @@ public DslSnippet translate(
142142
String flowName,
143143
Map<Class, MuleComponentToSpringIntegrationDslTranslator> translatorsMap
144144
) {
145+
// Ugly hack to work around an inability to inject a sbm property into the mulesoft parser.
146+
String isTmTransformationEnabled = System.getProperty("sbm.muleTriggerMeshTransformEnabled");
145147

146148
if (component.getSetPayload() != null) {
147149
if (isComponentReferencingAnExternalFile(component)) {
148150
return formExternalFileBasedDSLSnippet(component);
149151
}
150152

151-
//return formEmbeddedDWLBasedDSLSnippet(component, Helper.sanitizeForBeanMethodName(flowName), id);
152-
return formTriggerMeshDWLBasedDSLSnippet(component, Helper.sanitizeForBeanMethodName(flowName), id);
153+
if (isTmTransformationEnabled != null && isTmTransformationEnabled.equals("true")) {
154+
return formTriggerMeshDWLBasedDSLSnippet(component, Helper.sanitizeForBeanMethodName(flowName), id);
155+
} else {
156+
return formEmbeddedDWLBasedDSLSnippet(component, Helper.sanitizeForBeanMethodName(flowName), id);
157+
}
153158
}
154159

155160
return noSupportDslSnippet();

0 commit comments

Comments
 (0)