Skip to content

Commit e7fe085

Browse files
Adding support for Transaction (closes #138)
1 parent 80cacbc commit e7fe085

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+512
-326
lines changed

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,24 @@ private void handleTopLevelElements(BuildFile buildFile, MuleMigrationContext mu
109109

110110
logEvent("Adding " + topLevelElements.size() + " methods");
111111
topLevelElements.forEach(topLevelElement -> {
112-
flowConfigurationSource.getType().addMethod(topLevelElement.renderDslSnippet(), topLevelElement.getRequiredImports());
112+
flowConfigurationSource.getType().addMethod(
113+
topLevelElement.renderDslSnippet(),
114+
topLevelElement.getRequiredImports()
115+
);
116+
117+
if (topLevelElement.hasGeneratedDependentFlows()) {
118+
topLevelElement
119+
.generatedDependentFlows()
120+
.forEach(methodContents -> flowConfigurationSource
121+
.getType()
122+
.addMethod(
123+
methodContents,
124+
topLevelElement.getRequiredImports()
125+
)
126+
);
127+
128+
}
129+
113130
createExternalClasses(context, topLevelElement);
114131
});
115132
}

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

Lines changed: 48 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -15,68 +15,44 @@
1515
*/
1616
package org.springframework.sbm.mule.actions.javadsl.translators;
1717

18+
import lombok.Builder;
1819
import lombok.Getter;
19-
import lombok.RequiredArgsConstructor;
20+
import org.springframework.sbm.mule.api.toplevel.AbstractTopLevelElement;
2021

21-
import java.util.Collections;
22-
import java.util.List;
23-
import java.util.Set;
22+
import java.util.*;
2423
import java.util.stream.Collectors;
2524

2625
/**
2726
* Keeps all information for a snippet of Spring Integration DSL.
2827
*/
2928

3029
@Getter
31-
@RequiredArgsConstructor
30+
@Builder(toBuilder=true)
3231
public class DslSnippet {
3332

34-
private final String renderedSnippet;
33+
private String renderedSnippet;
3534

36-
/**
37-
* Imports for the types required for this snippet
38-
*/
39-
private final Set<String> requiredImports;
35+
@Builder.Default
36+
private Set<String> requiredImports = Collections.emptySet();
4037

4138
/**
4239
* Dependencies required to be added to the classpath
4340
* <p>
44-
* the dependencies mst be provided as Maven coordinates
41+
* the dependencies must be provided as Maven coordinates
4542
*/
46-
private final Set<String> requiredDependencies;
47-
48-
private final Set<Bean> beans;
49-
50-
private final boolean isUnknownStatement;
43+
@Builder.Default
44+
private Set<String> requiredDependencies = Collections.emptySet();
5145

52-
private final String externalClassContent;
46+
@Builder.Default
47+
private Set<Bean> beans = Collections.emptySet();
5348

54-
public DslSnippet(String renderedSnippet,
55-
Set<String> requiredImports) {
56-
this(renderedSnippet, requiredImports, Collections.emptySet(), Collections.emptySet(), false, "");
57-
}
58-
59-
public DslSnippet(String renderedSnippet,
60-
Set<String> requiredImports,
61-
Set<String> requiredDependencies,
62-
Set<Bean> beans) {
63-
this(renderedSnippet, requiredImports, requiredDependencies, beans, false, "");
64-
}
49+
private boolean isUnknownStatement;
6550

66-
public DslSnippet(String renderedSnippet,
67-
Set<String> requiredImports,
68-
Set<String> requiredDependencies,
69-
Set<Bean> beans,
70-
boolean isUnknownStatement) {
71-
this(renderedSnippet, requiredImports, requiredDependencies, beans, isUnknownStatement, "");
72-
}
51+
@Builder.Default
52+
private String externalClassContent = "";
7353

74-
public DslSnippet(String renderedSnippet,
75-
Set<String> requiredImports,
76-
Set<String> requiredDependencies,
77-
String externalClassContent) {
78-
this(renderedSnippet, requiredImports, requiredDependencies, Collections.emptySet(), false, externalClassContent);
79-
}
54+
@Builder.Default
55+
private String renderedDependentFlows = "";
8056

8157
public static String renderMethodParameters(List<DslSnippet> dslSnippets) {
8258
return dslSnippets.stream()
@@ -85,4 +61,35 @@ public static String renderMethodParameters(List<DslSnippet> dslSnippets) {
8561
.map(b -> b.getBeanClass() + " " + b.getBeanName())
8662
.collect(Collectors.joining(", "));
8763
}
64+
65+
public static DslSnippet createDSLSnippetFromTopLevelElement(AbstractTopLevelElement topLevelElement) {
66+
67+
Set<Bean> beans = new HashSet<>();
68+
Set<String> requiredImports = new HashSet<>();
69+
Set<String> dependencies = new HashSet<>();
70+
topLevelElement
71+
.getDslSnippets()
72+
.forEach(dslSnippet -> {
73+
beans.addAll(dslSnippet.getBeans());
74+
requiredImports.addAll(dslSnippet.getRequiredImports());
75+
dependencies.addAll(dslSnippet.getRequiredDependencies());
76+
if (dslSnippet.getExternalClassContent() != null
77+
&& !dslSnippet.getExternalClassContent().isBlank()) {
78+
}
79+
});
80+
81+
Optional<String> optionalExternalClassContent = topLevelElement
82+
.getDslSnippets()
83+
.stream()
84+
.map(DslSnippet::getExternalClassContent)
85+
.filter(k -> k !=null && !k.isBlank())
86+
.findFirst();
87+
88+
return DslSnippet.builder()
89+
.beans(beans)
90+
.requiredImports(requiredImports)
91+
.requiredDependencies(dependencies)
92+
.externalClassContent(optionalExternalClassContent.orElse(null))
93+
.build();
94+
}
8895
}

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,10 @@ public Class getSupportedMuleType() {
3232
}
3333

3434
public DslSnippet translate(int id, Object component, QName qname, MuleConfigurations muleConfigurations, String flowName, Map<Class, MuleComponentToSpringIntegrationDslTranslator> translatorsMap) {
35-
return new DslSnippet(
36-
generateDSLStatement(component, qname),
37-
Collections.emptySet(),
38-
Collections.emptySet(),
39-
Collections.emptySet(),
40-
true
41-
);
35+
return DslSnippet.builder()
36+
.renderedSnippet(generateDSLStatement(component, qname))
37+
.isUnknownStatement(true)
38+
.build();
4239
}
4340

4441
@NotNull

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ public DslSnippet translate(int id, AmqpConnectorType component,
4242
QName name,
4343
MuleConfigurations muleConfigurations,
4444
String flowName, Map<Class, MuleComponentToSpringIntegrationDslTranslator> translatorsMap) {
45-
return new DslSnippet("// FIXME: <amq:connector/> cannot be translated yet.", Collections.emptySet(), Set.of(), Collections.emptySet());
45+
return DslSnippet.builder()
46+
.renderedSnippet("// FIXME: <amq:connector/> cannot be translated yet.")
47+
.build();
4648
}
4749
}

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,20 @@ public Class getSupportedMuleType() {
3838
}
3939

4040
@Override
41-
public DslSnippet translate(int id, InboundEndpointType inboundEndpointType, QName name, MuleConfigurations muleConfigurations, String flowName, Map<Class, MuleComponentToSpringIntegrationDslTranslator> translatorsMap) {
41+
public DslSnippet translate(int id,
42+
InboundEndpointType inboundEndpointType,
43+
QName name,
44+
MuleConfigurations muleConfigurations,
45+
String flowName,
46+
Map<Class, MuleComponentToSpringIntegrationDslTranslator> translatorsMap) {
4247
String queueName = inboundEndpointType.getQueueName();
4348
String renderedSnippet = snippetTemplate.replace("${queueName}", queueName);
4449
Bean amqpConnectionFactoryBean = new Bean("connectionFactory", "org.springframework.amqp.rabbit.connection.ConnectionFactory");
45-
return new DslSnippet(renderedSnippet, Set.of("org.springframework.integration.amqp.dsl.Amqp"), Set.of("org.springframework.integration:spring-integration-amqp:5.4.4"), Set.of(amqpConnectionFactoryBean));
50+
return DslSnippet.builder()
51+
.renderedSnippet(renderedSnippet)
52+
.requiredImports(Set.of("org.springframework.integration.amqp.dsl.Amqp"))
53+
.requiredDependencies(Set.of("org.springframework.integration:spring-integration-amqp:5.4.4"))
54+
.beans(Set.of(amqpConnectionFactoryBean))
55+
.build();
4656
}
4757
}

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

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,32 +38,28 @@ public Class<OutboundEndpointType> getSupportedMuleType() {
3838

3939
@Override
4040
public DslSnippet translate(int id, OutboundEndpointType component, QName name, MuleConfigurations muleConfigurations, String flowName, Map<Class, MuleComponentToSpringIntegrationDslTranslator> translatorsMap) {
41-
42-
4341
addExchange(snippet, component.getExchangeName());
44-
return new DslSnippet(
45-
addRoutingKey(
42+
return DslSnippet.builder()
43+
.renderedSnippet(addRoutingKey(
4644
addExchange(snippet, component.getExchangeName()),
4745
component.getRoutingKey(),
4846
component.getQueueName()
49-
),
50-
Set.of("org.springframework.amqp.rabbit.core.RabbitTemplate"),
51-
Set.of(),
52-
Set.of(new Bean("rabbitTemplate", "org.springframework.amqp.rabbit.core.RabbitTemplate")
53-
)
54-
);
47+
))
48+
.requiredImports(Set.of("org.springframework.amqp.rabbit.core.RabbitTemplate"))
49+
.beans(Set.of(new Bean("rabbitTemplate", "org.springframework.amqp.rabbit.core.RabbitTemplate")))
50+
.build();
5551
}
5652

5753
private String addRoutingKey(String template, String routingKey, String queueName) {
5854

5955
String key = routingKey == null ? queueName : routingKey;
60-
return template.replace("--ROUTING-KEY--", ".routingKey(\""+key+"\")");
56+
return template.replace("--ROUTING-KEY--", ".routingKey(\"" + key + "\")");
6157
}
6258

6359
private String addExchange(String template, String exchangeName) {
6460
String exchangeSnippet = "";
6561
if (exchangeName != null) {
66-
exchangeSnippet = ".exchangeName(\""+emptyStringOrValue(exchangeName)+"\")";
62+
exchangeSnippet = ".exchangeName(\"" + emptyStringOrValue(exchangeName) + "\")";
6763
}
6864
return template.replace("--EXCHANGE--", exchangeSnippet);
6965
}

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,17 +108,17 @@ public DslSnippet translate(int id, SelectiveOutboundRouterType component,
108108
.flatMap(Collection::stream)
109109
.collect(Collectors.toSet());
110110

111-
return new DslSnippet(
112-
"/* TODO: LinkedMultiValueMap might not be apt, substitute with right input type*/\n" +
111+
return DslSnippet.builder()
112+
.renderedSnippet("/* TODO: LinkedMultiValueMap might not be apt, substitute with right input type*/\n" +
113113
" .<LinkedMultiValueMap<String, String>, String>route(\n" +
114114
" p -> p.getFirst(\"dataKey\") /*TODO: use apt condition*/,\n" +
115115
" m -> m\n" +
116116
whenSubflowMappings +
117117
otherwiseSubflowMappings +
118-
" )",
119-
requiredImports,
120-
requiredDependencies,
121-
requiredBeans
122-
);
118+
" )")
119+
.requiredImports(requiredImports)
120+
.requiredDependencies(requiredDependencies)
121+
.beans(requiredBeans)
122+
.build();
123123
}
124124
}

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,11 @@ public Class getSupportedMuleType() {
5050
public DslSnippet translate(int id, FlowRef component, QName name, MuleConfigurations muleConfigurations, String flowName, Map<Class, MuleComponentToSpringIntegrationDslTranslator> translatorsMap) {
5151
String subFlowName = Helper.sanitizeForBeanMethodName(translateToJavaName(component.getName()));
5252
String flowRefSnippet = javaDslFlowRefTemplate.replace(SUBFLOW_NAME, subFlowName);
53-
return new DslSnippet(flowRefSnippet,
54-
Collections.emptySet(),
55-
Collections.emptySet(),
56-
Set.of(new Bean(subFlowName, "org.springframework.integration.dsl.IntegrationFlow")));
53+
54+
return DslSnippet.builder()
55+
.renderedSnippet(flowRefSnippet)
56+
.beans(Set.of(new Bean(subFlowName, "org.springframework.integration.dsl.IntegrationFlow")))
57+
.build();
5758
}
5859

5960
private String translateToJavaName(String name) {

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

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,15 @@
1616
package org.springframework.sbm.mule.actions.javadsl.translators.core;
1717

1818
import org.mulesoft.schema.mule.core.ForeachProcessorType;
19-
import org.springframework.sbm.mule.actions.javadsl.translators.Bean;
2019
import org.springframework.sbm.mule.actions.javadsl.translators.DslSnippet;
2120
import org.springframework.sbm.mule.actions.javadsl.translators.MuleComponentToSpringIntegrationDslTranslator;
2221
import org.springframework.sbm.mule.api.toplevel.ForeachTopLevelElement;
2322
import org.springframework.sbm.mule.api.toplevel.configuration.MuleConfigurations;
2423
import org.springframework.stereotype.Component;
2524

2625
import javax.xml.namespace.QName;
27-
import java.util.Collection;
28-
import java.util.Map;
29-
import java.util.Set;
30-
import java.util.stream.Collectors;
26+
import java.util.*;
3127

32-
import static java.util.Collections.emptySet;
3328

3429
@Component
3530
public class ForeachTranslator implements MuleComponentToSpringIntegrationDslTranslator<ForeachProcessorType> {
@@ -55,37 +50,15 @@ public DslSnippet translate(int id,
5550
translatorsMap
5651
);
5752

58-
Set<Bean> beans = forEachTopLevelTranslations
59-
.getDslSnippets()
60-
.stream()
61-
.map(DslSnippet::getBeans)
62-
.flatMap(Collection::stream)
63-
.collect(Collectors.toSet());
64-
65-
66-
Set<String> requiredImports = forEachTopLevelTranslations
67-
.getDslSnippets()
68-
.stream()
69-
.map(DslSnippet::getRequiredImports)
70-
.flatMap(Collection::stream)
71-
.collect(Collectors.toSet());
72-
73-
Set<String> dependencies = forEachTopLevelTranslations
74-
.getDslSnippets()
75-
.stream()
76-
.map(DslSnippet::getRequiredDependencies)
77-
.flatMap(Collection::stream)
78-
.collect(Collectors.toSet());
79-
80-
return new DslSnippet(
81-
" //TODO: translate expression " + component.getCollection() + " which must produces an array\n" +
53+
return DslSnippet
54+
.createDSLSnippetFromTopLevelElement(forEachTopLevelTranslations)
55+
.toBuilder()
56+
.renderedSnippet(" //TODO: translate expression " + component.getCollection() + " which must produces an array\n" +
8257
" // to iterate over\n" +
8358
" .split()\n" +
8459
" " + forEachTopLevelTranslations.renderDslSnippet() + "\n" +
85-
" .aggregate()",
86-
requiredImports,
87-
dependencies,
88-
beans
89-
);
60+
" .aggregate()")
61+
.build();
62+
9063
}
9164
}

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import java.util.Map;
2727

2828
@Component
29-
public class SetPayloadTranslator implements MuleComponentToSpringIntegrationDslTranslator<SetPayloadTransformerType> {
29+
public class SetPayloadTranslator implements MuleComponentToSpringIntegrationDslTranslator<SetPayloadTransformerType> {
3030
@Override
3131
public Class<SetPayloadTransformerType> getSupportedMuleType() {
3232
return SetPayloadTransformerType.class;
@@ -36,6 +36,9 @@ public Class<SetPayloadTransformerType> getSupportedMuleType() {
3636
public DslSnippet translate(int id, SetPayloadTransformerType component, QName name, MuleConfigurations muleConfigurations, String flowName, Map<Class, MuleComponentToSpringIntegrationDslTranslator> translatorsMap) {
3737
String valueWithoutNewLines = component.getValue().replace("\n", "");
3838
String withEscapedChars = valueWithoutNewLines.replace("\"", "\\\"");
39-
return new DslSnippet(".handle((p, h) -> " + "\"" + withEscapedChars + "\")", Collections.emptySet());
39+
40+
return DslSnippet.builder()
41+
.renderedSnippet(".handle((p, h) -> " + "\"" + withEscapedChars + "\")")
42+
.build();
4043
}
4144
}

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,11 @@ public Class<SetPropertyType> getSupportedMuleType() {
3535

3636
@Override
3737
public DslSnippet translate(int id, SetPropertyType component, QName name, MuleConfigurations muleConfigurations, String flowName, Map<Class, MuleComponentToSpringIntegrationDslTranslator> translatorsMap) {
38-
return new DslSnippet(
39-
".enrichHeaders(h -> h.header(\"" + component.getPropertyName() + "\", \"" + component.getValue() + "\"))",
40-
Collections.emptySet()
41-
);
38+
39+
return DslSnippet.builder()
40+
.renderedSnippet(
41+
".enrichHeaders(h -> h.header(\"" + component.getPropertyName() + "\", \"" + component.getValue() + "\"))"
42+
)
43+
.build();
4244
}
4345
}

0 commit comments

Comments
 (0)