Skip to content

Commit 0c3e55b

Browse files
committed
Address PR feedback and merge conflicts
1 parent 7fc5d72 commit 0c3e55b

File tree

2 files changed

+96
-76
lines changed

2 files changed

+96
-76
lines changed

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

Lines changed: 28 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,33 @@
1616

1717
package org.springframework.sbm.mule.actions.javadsl.translators.dwl;
1818

19+
import com.fasterxml.jackson.annotation.JsonIgnore;
20+
import freemarker.template.Configuration;
21+
import freemarker.template.Template;
22+
import lombok.Setter;
1923
import org.mulesoft.schema.mule.ee.dw.TransformMessageType;
24+
import org.springframework.beans.factory.annotation.Autowired;
2025
import org.springframework.sbm.java.util.Helper;
2126
import org.springframework.sbm.mule.actions.javadsl.translators.DslSnippet;
2227
import org.springframework.sbm.mule.actions.javadsl.translators.MuleComponentToSpringIntegrationDslTranslator;
2328
import org.springframework.sbm.mule.api.toplevel.configuration.MuleConfigurations;
2429
import org.springframework.stereotype.Component;
2530

2631
import javax.xml.namespace.QName;
32+
import java.io.StringWriter;
33+
import java.util.HashMap;
2734
import java.util.Map;
28-
import java.util.Set;
2935

3036
@Component
3137
public class DwlTransformTranslator implements MuleComponentToSpringIntegrationDslTranslator<TransformMessageType> {
3238
public static final String TRANSFORM_STATEMENT_CONTENT = ".transform($CLASSNAME::transform)";
3339
public static final String externalPackageName = "package com.example.javadsl;\n\n";
3440

41+
@Autowired
42+
@Setter
43+
@JsonIgnore
44+
private Configuration templateConfiguration;
45+
3546
/* Define the stubs for adding the transformation as a comment to be addressed */
3647
private static final String externalClassContentPrefixTemplate = externalPackageName +
3748
"public class $CLASSNAME {\n" +
@@ -47,21 +58,10 @@ public class DwlTransformTranslator implements MuleComponentToSpringIntegrationD
4758
" }\n" +
4859
"}";
4960

50-
/* Define the TriggerMesh specific stubs when enabled. This will capture the transformation, and send it along
61+
/*
62+
* Define the TriggerMesh specific stubs when enabled. This will capture the transformation, and send it along
5163
* with the payload to the TriggerMesh Dataweave Transformation Service.
5264
*/
53-
// Independent class to capture parts of the message header from the spring integration to inject into the transformation
54-
private static final String triggermeshDWPayload = "" +
55-
"package com.example.javadsl;\n\n" +
56-
"import lombok.Data;\n\n" +
57-
"@Data\n" +
58-
"public class TmDwPayload {\n" +
59-
"\tprivate String id;\n" +
60-
"\tprivate String source;\n" +
61-
"\tprivate String sourceType;\n" +
62-
"\tprivate String payload;\n" +
63-
"}\n";
64-
6565
private static final String triggermeshPayloadHandlerContent = "" +
6666
".handle((p, h) -> {\n" +
6767
" TmDwPayload dwPayload = new TmDwPayload();\n" +
@@ -71,62 +71,6 @@ public class DwlTransformTranslator implements MuleComponentToSpringIntegrationD
7171
" dwPayload.setPayload(p.toString());\n" +
7272
" return dwPayload;\n" +
7373
" })";
74-
private static final String triggermeshImportsTemplate = "import com.fasterxml.jackson.databind.ObjectMapper;\n\n" +
75-
"import java.net.URI;\n" +
76-
"import java.net.http.HttpClient;\n" +
77-
"import java.net.http.HttpRequest;\n" +
78-
"import java.net.http.HttpResponse;\n";
79-
80-
private static final String triggermeshDWTransformationClass = "" +
81-
"\tpublic static class DataWeavePayload {\n" +
82-
"\t public String input_data;\n" +
83-
"\t public String spell;\n" +
84-
"\t public String input_content_type;\n" +
85-
"\t public String output_content_type;\n" +
86-
"\t};";
87-
88-
private static final String triggermeshClassTemplate = externalPackageName + triggermeshImportsTemplate +
89-
"\npublic class $CLASSNAME {\n" +
90-
triggermeshDWTransformationClass + "\n\n" +
91-
"\tpublic static String transform(TmDwPayload payload) {\n" +
92-
"\t\tString uuid = payload.getId();\n" +
93-
"\t\tString url = System.getenv(\"K_SINK\");\n" + // NOTE: K_SINK is the URL for the target transformation service
94-
"\t\tHttpClient client = HttpClient.newHttpClient();\n" +
95-
"\t\tHttpRequest.Builder requestBuilder;\n" +
96-
"\t\tDataWeavePayload dwPayload = new DataWeavePayload();\n" +
97-
"\t\tif (payload.getSourceType().contains(\";\")) {\n" +
98-
"\t\t\tdwPayload.input_content_type = payload.getSourceType().split(\";\")[0];\n" +
99-
"\t\t} else {\n" +
100-
"\t\t\tdwPayload.input_content_type = payload.getSourceType();\n" +
101-
"\t\t}\n" +
102-
"\t\tdwPayload.output_content_type = \"$OUTPUT_CONTENT_TYPE\";\n" +
103-
"\t\t//TODO: Verify the spell conforms to Dataweave 2.x: https://docs.mulesoft.com/mule-runtime/4.4/migration-dataweave\n" +
104-
"\t\tdwPayload.spell = \"$DWSPELL\";\n" +
105-
"\t\tdwPayload.input_data = payload.getPayload();\n" +
106-
"\t\tString body;\n\n" +
107-
"\t\ttry {\n" +
108-
"\t\t\trequestBuilder = HttpRequest.newBuilder(new URI(url));\n" +
109-
"\t\t\tObjectMapper om = new ObjectMapper();\n" +
110-
"\t\t\tbody = om.writeValueAsString(dwPayload);\n" +
111-
"\t\t} catch (Exception e) {\n" +
112-
"\t\t\tSystem.out.println(\"Error sending request: \" + e.toString());\n" +
113-
"\t\t\treturn null;\n" +
114-
"\t\t}\n\n" +
115-
"\t\trequestBuilder.setHeader(\"content-type\", \"application/json\");\n" +
116-
"\t\trequestBuilder.setHeader(\"ce-specversion\", \"1.0\");\n" +
117-
"\t\trequestBuilder.setHeader(\"ce-source\", payload.getSource());\n" +
118-
"\t\trequestBuilder.setHeader(\"ce-type\", \"io.triggermesh.dataweave.transform\");\n" +
119-
"\t\trequestBuilder.setHeader(\"ce-id\", payload.getId());\n\n" +
120-
"\t\tHttpRequest request = requestBuilder.POST(HttpRequest.BodyPublishers.ofString(body)).build();\n\n" +
121-
"\t\ttry {\n" +
122-
"\t\t\tHttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());\n" +
123-
"\t\t\t // TODO: verify the response status and body\n" +
124-
"\t\t\treturn response.body();\n" +
125-
"\t\t} catch (Exception e) {\n" +
126-
"\t\t\tSystem.out.println(\"Error sending event: \" + e.toString());\n" +
127-
"\t\t\treturn null;\n" +
128-
"\t\t}\n" +
129-
"\t}\n";
13074

13175
@Override
13276
public Class<TransformMessageType> getSupportedMuleType() {
@@ -190,17 +134,25 @@ private DslSnippet formTriggerMeshDWLBasedDSLSnippet(TransformMessageType compon
190134
// Locate the output content type based on the spell. If it isn't present, default to
191135
// application/json
192136
String outputContentType = getSpellOutputType(dwlSpell);
193-
String tmTransformationContent = triggermeshClassTemplate
194-
.replace("$CLASSNAME", className)
195-
.replace("$OUTPUT_CONTENT_TYPE", outputContentType)
196-
.replace("$DWSPELL", sanitizeSpell(dwlSpell));
137+
Map<String, String> templateParams = new HashMap<>();
138+
templateParams.put("className", className);
139+
templateParams.put("outputContentType", outputContentType);
140+
templateParams.put("dwSpell", sanitizeSpell(dwlSpell));
141+
142+
StringWriter sw = new StringWriter();
143+
try {
144+
Template template = templateConfiguration.getTemplate("triggermesh-dw-transformation-template.ftl");
145+
template.process(templateParams, sw);
146+
} catch (Exception e) {
147+
throw new RuntimeException(e);
148+
}
149+
150+
String tmTransformationContent = sw.toString();
197151

198152
// Build the dw payload
199153
return DslSnippet.builder()
200-
.externalClassContent(triggermeshDWPayload)
201154
.renderedSnippet(triggermeshPayloadHandlerContent + "\n" + replaceClassName(TRANSFORM_STATEMENT_CONTENT, className))
202155
.externalClassContent(tmTransformationContent)
203-
.requiredImports(Set.of("java.net.URI", "java.net.http.HttpClient", "java.net.http.HttpRequest", "java.net.http.HttpResponse", "com.fasterxml.jackson.databind.ObjectMapper"))
204156
.build();
205157
}
206158

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<#if packageName?has_content>
2+
package ${packageName};
3+
4+
<#else>
5+
package com.example.javadsl;
6+
7+
</#if>
8+
import com.fasterxml.jackson.databind.ObjectMapper;
9+
10+
import java.net.URI;
11+
import java.net.http.HttpClient;
12+
import java.net.http.HttpRequest;
13+
import java.net.http.HttpResponse;
14+
15+
public class ${className} {
16+
public static class DataWeavePayload {
17+
public String input_data;
18+
public String spell;
19+
public String input_content_type;
20+
public String output_content_type;
21+
};
22+
23+
public static String transform(TmDwPayload payload) {
24+
String uuid = payload.getId();
25+
String url = System.getenv("K_SINK");
26+
HttpClient client = HttpClient.newHttpClient();
27+
HttpRequest.Builder requestBuilder;
28+
DataWeavePayload dwPayload = new DataWeavePayload();
29+
30+
if (payload.getSourceType().contains(";")) {
31+
dwPayload.input_content_type = payload.getSourceType().split(";")[0];
32+
} else {
33+
dwPayload.input_content_type = payload.getSourceType();
34+
}
35+
dwPayload.output_content_type = "${outputContentType}";
36+
37+
//TODO: Verify the spell conforms to Dataweave 2.x: https://docs.mulesoft.com/mule-runtime/4.4/migration-dataweave
38+
dwPayload.spell = "${dwSpell}";
39+
dwPayload.input_data = payload.getPayload();
40+
String body;
41+
42+
try {
43+
requestBuilder = HttpRequest.newBuilder(new URI(url));
44+
ObjectMapper om = new ObjectMapper();
45+
body = om.writeValueAsString(dwPayload);
46+
} catch (Exception e) {
47+
System.out.println("Error sending request: " + e.toString());
48+
return null;
49+
}
50+
51+
requestBuilder.setHeader("content-type", "application/json");
52+
requestBuilder.setHeader("ce-specversion", "1.0");
53+
requestBuilder.setHeader("ce-source", payload.getSource());
54+
requestBuilder.setHeader("ce-type", "io.triggermesh.dataweave.transform");
55+
requestBuilder.setHeader("ce-id", payload.getId());
56+
57+
HttpRequest request = requestBuilder.POST(HttpRequest.BodyPublishers.ofString(body)).build();
58+
59+
try {
60+
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
61+
// TODO: verify the response status and body
62+
return response.body();
63+
} catch (Exception e) {
64+
System.out.println("Error sending event: " + e.toString());
65+
return null;
66+
}
67+
}
68+
}

0 commit comments

Comments
 (0)