Skip to content

Commit ba3165b

Browse files
committed
refactor: ValueFactory
1 parent 9e16062 commit ba3165b

File tree

7 files changed

+78
-25
lines changed

7 files changed

+78
-25
lines changed

int-aws-support/src/main/java/org/springframework/integration/aws/config/xml/ExpressionBeanDefinitionFactory.java

Lines changed: 0 additions & 15 deletions
This file was deleted.

int-aws-support/src/main/java/org/springframework/integration/aws/config/xml/S3MessageHandlerParser.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.springframework.integration.aws.config.xml;
22

3-
import org.springframework.beans.factory.config.TypedStringValue;
43
import org.springframework.beans.factory.xml.ParserContext;
54
import org.springframework.integration.aws.outbound.S3MessageHandler;
65
import org.w3c.dom.Element;
@@ -16,7 +15,7 @@ public S3MessageHandlerParser(boolean produceReply) {
1615
public XmlBeanDefinitionBuilder parse(Element element, ParserContext parserContext) {
1716
return XmlBeanDefinitionBuilder.newInstance(element, parserContext, S3MessageHandler.class)
1817
.addExclusiveConstructorArgReference("s3", "transfer-manager")
19-
.addExclusiveConstructorArgValue("bucket", "bucket-expression", TypedStringValue::new, new ExpressionBeanDefinitionFactory()::createBeanDefinition)
18+
.addExclusiveConstructorArgValue("bucket", "bucket-expression", ValueFactory.typedString(), ValueFactory.expressionBean())
2019
.configure(def -> def.addConstructorArgValue(produceReply))
2120
.setPropertyOrExpressionIfAttributeDefined("key")
2221
.setPropertyOrExpressionIfAttributeDefined("destination-bucket")

int-aws-support/src/main/java/org/springframework/integration/aws/config/xml/SnsInboundChannelAdapterParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ protected AbstractBeanDefinition doParse(Element element, ParserContext parserCo
1616
.setProperty("handle-notification-status")
1717
.setPropertyIfAttributeDefined("send-timeout", "requestTimeout")
1818
.setPropertyIfAttributeDefined("error-channel", "errorChannelName")
19-
.setPropertyIfAttributeDefined("payload-expression", "payloadExpression", new ExpressionBeanDefinitionFactory()::createBeanDefinition)
19+
.setPropertyIfAttributeDefined("payload-expression", "payloadExpression", ValueFactory.expressionBean())
2020
.build();
2121
}
2222
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.springframework.integration.aws.config.xml;
2+
3+
import org.springframework.beans.factory.config.TypedStringValue;
4+
import org.springframework.beans.factory.support.AbstractBeanDefinition;
5+
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
6+
import org.springframework.integration.config.ExpressionFactoryBean;
7+
8+
import java.util.function.BiConsumer;
9+
import java.util.function.Function;
10+
11+
public interface ValueFactory<T> extends Function<String, T> {
12+
13+
static ValueFactory<TypedStringValue> typedString() {
14+
return TypedStringValue::new;
15+
}
16+
17+
static ValueFactory<TypedStringValue> typedString(Class<?> type) {
18+
return value -> new TypedStringValue(value, type);
19+
}
20+
21+
static ValueFactory<AbstractBeanDefinition> expressionBean() {
22+
return value -> BeanDefinitionBuilder.genericBeanDefinition(ExpressionFactoryBean.class)
23+
.addConstructorArgValue(value)
24+
.applyCustomizers(def -> def.setAutowireCandidate(false))
25+
.getBeanDefinition();
26+
}
27+
28+
default BiConsumer<BeanDefinitionBuilder, String> propertyValue(String name) {
29+
return (builder, value) -> builder.addPropertyValue(name, apply(value));
30+
}
31+
32+
default BiConsumer<BeanDefinitionBuilder, String> constructorValue(String name) {
33+
return (builder, value) -> builder.addConstructorArgValue(apply(value));
34+
}
35+
}

int-aws-support/src/main/java/org/springframework/integration/aws/config/xml/XmlBeanDefinitionBuilder.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.springframework.integration.aws.config.xml;
22

3-
import org.springframework.beans.factory.config.TypedStringValue;
43
import org.springframework.beans.factory.support.AbstractBeanDefinition;
54
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
65
import org.springframework.beans.factory.xml.ParserContext;
@@ -47,7 +46,7 @@ public XmlBeanDefinitionBuilder addConstructorArgReference(String attributeName)
4746
}
4847

4948
public XmlBeanDefinitionBuilder addConstructorArgValue(String attributeName) {
50-
builder.addConstructorArgValue(new TypedStringValue(element.getAttribute(attributeName)));
49+
builder.addConstructorArgValue(ValueFactory.typedString().apply(element.getAttribute(attributeName)));
5150
return this;
5251
}
5352

@@ -83,7 +82,7 @@ public XmlBeanDefinitionBuilder setProperty(String attributeName) {
8382
}
8483

8584
public XmlBeanDefinitionBuilder setProperty(String attributeName, String propertyName) {
86-
return setProperty(attributeName, propertyName, TypedStringValue::new);
85+
return setProperty(attributeName, propertyName, ValueFactory.typedString());
8786
}
8887

8988
public XmlBeanDefinitionBuilder setProperty(String attributeName, String propertyName, Function<String, ?> attributeValueMapper) {
@@ -96,7 +95,7 @@ public XmlBeanDefinitionBuilder setPropertyIfAttributeDefined(String attributeNa
9695
}
9796

9897
public XmlBeanDefinitionBuilder setPropertyIfAttributeDefined(String attributeName, String propertyName) {
99-
return setPropertyIfAttributeDefined(attributeName, propertyName, TypedStringValue::new);
98+
return setPropertyIfAttributeDefined(attributeName, propertyName, ValueFactory.typedString());
10099
}
101100

102101
public XmlBeanDefinitionBuilder setPropertyIfAttributeDefined(String attributeName, String propertyName, Function<String, ?> attributeValueMapper) {
@@ -120,15 +119,15 @@ public XmlBeanDefinitionBuilder setPropertyOrExpressionIfAttributeDefined(String
120119
}
121120

122121
public XmlBeanDefinitionBuilder setPropertyOrExpressionIfAttributeDefined(String attribute, String expressionAttribute, String property, String expressionProperty) {
123-
return setIfExclusiveAttributeDefined(attribute, expressionAttribute, (b, v) -> b.addPropertyValue(property, new TypedStringValue(v)), (b, v) -> b.addPropertyValue(expressionProperty, new ExpressionBeanDefinitionFactory().createBeanDefinition(v)));
122+
return setIfExclusiveAttributeDefined(attribute, expressionAttribute, ValueFactory.typedString().propertyValue(property), ValueFactory.expressionBean().propertyValue(expressionProperty));
124123
}
125124

126125
public XmlBeanDefinitionBuilder setPropertyIfExclusiveAttributeDefined(String attribute1, String attribute2) {
127126
return setPropertyIfExclusiveAttributeDefined(attribute1, attribute2, attributeNameToPropertyName(attribute1), attributeNameToPropertyName(attribute2));
128127
}
129128

130129
public XmlBeanDefinitionBuilder setPropertyIfExclusiveAttributeDefined(String attribute1, String attribute2, String property1, String property2) {
131-
return setIfExclusiveAttributeDefined(attribute1, attribute2, (b, v) -> b.addPropertyValue(property1, new TypedStringValue(v)), (b, v) -> b.addPropertyValue(property2, new TypedStringValue(v)));
130+
return setIfExclusiveAttributeDefined(attribute1, attribute2, ValueFactory.typedString().propertyValue(property1), ValueFactory.typedString().propertyValue(property2));
132131
}
133132

134133
public XmlBeanDefinitionBuilder setExclusiveAttribute(String attribute1, String attribute2, BiConsumer<BeanDefinitionBuilder, String> arg1, BiConsumer<BeanDefinitionBuilder, String> arg2) {
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.springframework.integration.aws.config.xml;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.springframework.beans.factory.config.ConstructorArgumentValues.ValueHolder;
5+
import org.springframework.beans.factory.config.TypedStringValue;
6+
import org.springframework.integration.config.ExpressionFactoryBean;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
import static org.springframework.integration.aws.config.xml.ValueFactory.*;
10+
11+
class ValueFactoryTest {
12+
13+
@Test
14+
void testTypedString() {
15+
assertThat(typedString().apply("val"))
16+
.isEqualTo(new TypedStringValue("val"));
17+
}
18+
19+
@Test
20+
void testTypedTargetString() {
21+
assertThat(typedString(ValueFactoryTest.class).apply("test"))
22+
.isEqualTo(new TypedStringValue("test", ValueFactoryTest.class));
23+
}
24+
25+
@Test
26+
void testExpressionBean() {
27+
var bean = expressionBean().apply("exp");
28+
29+
assertThat(bean.getBeanClass())
30+
.isSameAs(ExpressionFactoryBean.class);
31+
assertThat(bean.getConstructorArgumentValues().getIndexedArgumentValues().values())
32+
.extracting(ValueHolder::getValue)
33+
.containsOnly("exp");
34+
}
35+
}

int-aws-support/src/test/java/org/springframework/integration/aws/config/xml/XmlBeanDefinitionBuilderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ void testExclusiveProperties() {
112112
new PropertyValue("aExpectedProperty", new TypedStringValue("a")),
113113
new PropertyValue("bExpectedProperty", new TypedStringValue("b")),
114114
new PropertyValue("testProperty", new TypedStringValue("c")),
115-
new PropertyValue("testExpression", new ExpressionBeanDefinitionFactory().createBeanDefinition("d"))
115+
new PropertyValue("testExpression", ValueFactory.expressionBean().apply("d"))
116116
);
117117
}
118118

0 commit comments

Comments
 (0)