INT-1919 added removeHeaders(String...) method to MessageBuilder to support plural semantics of possibly removing multiple headers with a single callback

This commit is contained in:
Oleg Zhurakousky
2011-05-31 17:21:55 -04:00
parent 8424fe24f1
commit bd896ab986
2 changed files with 32 additions and 25 deletions

View File

@@ -113,36 +113,44 @@ public final class MessageBuilder<T> {
}
return this;
}
/**
* Removes all headers provided via array of 'headerPatterns'. As the name suggests the array
* may contain simple matching patterns for header names. Supported pattern styles are:
* "xxx*", "*xxx", "*xxx*" and "xxx*yyy".
*
* @param headerPatterns
*/
public MessageBuilder<T> removeHeaders(String... headerPatterns) {
List<String> headersToRemove = new ArrayList<String>();
for (String pattern : headerPatterns) {
if (StringUtils.hasLength(pattern)){
if (pattern.contains("*")){
for (String headerName : this.headers.keySet()) {
if (PatternMatchUtils.simpleMatch(pattern, headerName)){
headersToRemove.add(headerName);
}
}
}
else {
headersToRemove.add(pattern);
}
}
}
for (String headerToRemove : headersToRemove) {
this.removeHeader(headerToRemove);
}
return this;
}
/**
* Remove the value for the given header name.
*/
public MessageBuilder<T> removeHeader(String headerName) {
if (StringUtils.hasLength(headerName)){
if (headerName.contains("*")){
List<String> headersToRemove = new ArrayList<String>();
for (String hdrName : this.headers.keySet()) {
if (PatternMatchUtils.simpleMatch(headerName, hdrName)){
headersToRemove.add(hdrName);
}
}
for (String headerToRemove : headersToRemove) {
this.doRemoveHeader(headerToRemove);
}
}
else {
this.doRemoveHeader(headerName);
}
}
return this;
}
private void doRemoveHeader(String headerName){
if (StringUtils.hasLength(headerName) && !headerName.equals(MessageHeaders.ID)
&& !headerName.equals(MessageHeaders.TIMESTAMP)) {
this.modified = true;
this.headers.remove(headerName);
}
return this;
}
/**

View File

@@ -24,6 +24,7 @@ import org.springframework.util.Assert;
* Transformer that removes Message headers.
*
* @author Mark Fisher
* @author Oleg Zhurakousky
* @since 2.0
*/
public class HeaderFilter implements Transformer {
@@ -38,10 +39,8 @@ public class HeaderFilter implements Transformer {
public Message<?> transform(Message<?> message) {
MessageBuilder<?> builder = MessageBuilder.fromMessage(message);
for (String headerName : headersToRemove) {
builder.removeHeader(headerName);
}
MessageBuilder<?> builder = MessageBuilder.fromMessage(message);
builder.removeHeaders(headersToRemove);
return builder.build();
}