Skip to content

Commit e3ec94b

Browse files
committed
Optimize DefaultFileNameGenerator for expression
The default expression in the `DefaultFileNameGenerator` is based on a message header which simply can be retrieved with much faster `FunctionExpression` * Some other code style refactoring in the `DefaultFileNameGenerator`
1 parent ece3198 commit e3ec94b

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

spring-integration-file/src/main/java/org/springframework/integration/file/DefaultFileNameGenerator.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2019 the original author or authors.
2+
* Copyright 2002-2022 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -19,6 +19,7 @@
1919
import java.io.File;
2020

2121
import org.springframework.expression.Expression;
22+
import org.springframework.integration.expression.FunctionExpression;
2223
import org.springframework.integration.util.AbstractExpressionEvaluator;
2324
import org.springframework.messaging.Message;
2425
import org.springframework.util.Assert;
@@ -43,7 +44,7 @@
4344
public class DefaultFileNameGenerator extends AbstractExpressionEvaluator implements FileNameGenerator {
4445

4546
private volatile Expression expression =
46-
EXPRESSION_PARSER.parseExpression("headers['" + FileHeaders.FILENAME + "']");
47+
new FunctionExpression<Message<?>>((message) -> message.getHeaders().get(FileHeaders.FILENAME));
4748

4849
/**
4950
* Specify an expression to be evaluated against the Message
@@ -62,17 +63,18 @@ public void setExpression(String expression) {
6263
*/
6364
public void setHeaderName(String headerName) {
6465
Assert.notNull(headerName, "'headerName' must not be null");
65-
this.expression = EXPRESSION_PARSER.parseExpression("headers['" + headerName + "']");
66+
this.expression = new FunctionExpression<Message<?>>((message) -> message.getHeaders().get(headerName));
6667
}
6768

6869
@Override
6970
public String generateFileName(Message<?> message) {
70-
Object filename = this.evaluateExpression(this.expression, message);
71-
if (filename instanceof String && StringUtils.hasText((String) filename)) {
72-
return (String) filename;
71+
Object filename = evaluateExpression(this.expression, message);
72+
if (filename instanceof String name && StringUtils.hasText(name)) {
73+
return name;
7374
}
74-
if (message.getPayload() instanceof File) {
75-
return ((File) message.getPayload()).getName();
75+
Object payload = message.getPayload();
76+
if (payload instanceof File file) {
77+
return file.getName();
7678
}
7779
return message.getHeaders().getId() + ".msg";
7880
}

0 commit comments

Comments
 (0)