Skip to content

Commit

Permalink
[#1081] Allow customization of expression resolver in ImplicitThingCr…
Browse files Browse the repository at this point in the history
…eationMessageMapper.

Signed-off-by: Yufei Cai <yufei.cai@bosch.io>
  • Loading branch information
yufei-cai committed Jun 21, 2021
1 parent bf54828 commit f634bba
Showing 1 changed file with 24 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;

import javax.annotation.Nullable;

Expand Down Expand Up @@ -80,10 +81,29 @@ public final class ImplicitThingCreationMessageMapper extends AbstractMessageMap
private static final String POLICY_ID = "policyId";
private static final String POLICY_ID_CONFIGURATION_PROPERTY = THING_TEMPLATE + "/" + POLICY_ID;

private final Function<Map<String, String>, ExpressionResolver> resolverFactory;

private String thingTemplate;
private Map<String, String> commandHeaders;
private boolean allowPolicyLockout;

/**
* Default constructor that supports headers placeholders in mapped headers and templates.
*/
@SuppressWarnings("unused")
public ImplicitThingCreationMessageMapper() {
this(ImplicitThingCreationMessageMapper::getHeadersExpressionResolver);
}

/**
* Constructor with customizable expression resolver.
*
* @param resolverFactory the creator of expression resolver.
*/
public ImplicitThingCreationMessageMapper(final Function<Map<String, String>, ExpressionResolver> resolverFactory) {
this.resolverFactory = resolverFactory;
}

@Override
protected void doConfigure(final MappingConfig mappingConfig, final MessageMapperConfiguration configuration) {
thingTemplate = configuration.findProperty(THING_TEMPLATE).orElseThrow(
Expand Down Expand Up @@ -150,7 +170,7 @@ public List<Adaptable> map(final ExternalMessage message) {
LOGGER.withCorrelationId(message.getInternalHeaders()).debug("Received ExternalMessage: {}", message);

final Map<String, String> externalHeaders = message.getHeaders();
final ExpressionResolver expressionResolver = getExpressionResolver(externalHeaders);
final ExpressionResolver expressionResolver = resolverFactory.apply(externalHeaders);

final String resolvedTemplate;
if (Placeholders.containsAnyPlaceholder(thingTemplate)) {
Expand Down Expand Up @@ -179,7 +199,7 @@ public List<Adaptable> map(final ExternalMessage message) {
return Collections.singletonList(adaptableWithModifiedHeaders);
}

private static ExpressionResolver getExpressionResolver(final Map<String, String> headers) {
private static ExpressionResolver getHeadersExpressionResolver(final Map<String, String> headers) {
return PlaceholderFactory.newExpressionResolver(
PlaceholderFactory.newPlaceholderResolver(HEADERS_PLACEHOLDER, headers));
}
Expand All @@ -199,9 +219,9 @@ private Signal<CreateThing> getCreateThingSignal(final ExternalMessage message,
return CreateThing.of(newThing, inlinePolicyJson, copyPolicyFrom, dittoHeaders);
}

private static Map<String, String> resolveCommandHeaders(final ExternalMessage externalMessage,
private Map<String, String> resolveCommandHeaders(final ExternalMessage externalMessage,
final Map<String, String> errorResponseHeaders) {
final ExpressionResolver resolver = getExpressionResolver(externalMessage.getHeaders());
final ExpressionResolver resolver = resolverFactory.apply(externalMessage.getHeaders());
final Map<String, String> resolvedHeaders = new HashMap<>();
errorResponseHeaders.forEach((key, value) ->
resolver.resolve(value).toOptional().ifPresent(resolvedHeaderValue ->
Expand Down

0 comments on commit f634bba

Please sign in to comment.