/** * Validates the values of the specified headers with the help of the specified definitions. * * @param headers the key-value-pairs to be validated. * @param definitions perform the actual validation. */ protected void validateValueTypes(final Map<String, String> headers, final Collection<HeaderDefinition> definitions) { for (final HeaderDefinition definition : definitions) { final String value = headers.get(definition.getKey()); if (null != value) { definition.validateValue(value); } } }
private static IllegalStateException newIllegalStateException(final HeaderDefinition definition) { final String msgTemplate = "MessageHeaders did not contain a value for key <{0}>!"; return new IllegalStateException(MessageFormat.format(msgTemplate, definition.getKey())); }
@Override public void accept(@Nonnull final HeaderDefinition definition, @Nullable final CharSequence charSequence) { final Class<?> definitionJavaType = checkNotNull(definition, "Definition").getJavaType(); if (isInt(definitionJavaType)) { validateIntegerValue(definition.getKey(), charSequence); } else if (isLong(definitionJavaType)) { validateLongValue(definition.getKey(), charSequence); } else if (isBoolean(definitionJavaType)) { validateBooleanValue(definition.getKey(), charSequence); } else if (isJsonArray(definitionJavaType)) { validateJsonArrayValue(definition.getKey(), charSequence); } else if (isEntityTag(definitionJavaType)) { validateEntityTag(definition.getKey(), charSequence); } else if (isEntityTagMatchers(definitionJavaType)) { validateEntityTagMatchers(definition.getKey(), charSequence); } }
@Override protected void validateValueType(final CharSequence key, final CharSequence value) { super.validateValueType(key, value); MessageHeaderDefinition.forKey(key).ifPresent(definition -> { if (MANDATORY_HEADERS.contains(definition)) { final String msgTemplate = "Value for mandatory header with key <{0}> cannot be overwritten!"; throw new IllegalArgumentException(MessageFormat.format(msgTemplate, key)); } definition.validateValue(value); }); }
/** * Publish Ditto headers to external headers. * * @param dittoHeaders Ditto headers to publish. * @return external headers. */ public Map<String, String> toExternalHeaders(final DittoHeaders dittoHeaders) { final Map<String, String> headers = new HashMap<>(); dittoHeaders.forEach((key, value) -> { final HeaderDefinition definition = headerDefinitionMap.get(key); if (definition == null || definition.shouldWriteToExternalHeaders()) { headers.put(key, value); } }); return headers; }
/** * Read Ditto headers from external headers. * * @param externalHeaders external headers as a map. * @return Ditto headers initialized with values from external headers. */ public DittoHeaders fromExternalHeaders(final Map<String, String> externalHeaders) { final DittoHeadersBuilder builder = DittoHeaders.newBuilder(); externalHeaders.forEach((externalKey, value) -> { if (value == null) { return; } final String key = externalKey.toLowerCase(); final HeaderDefinition definition = headerDefinitionMap.get(key); if (definition == null || definition.shouldReadFromExternalHeaders()) { builder.putHeader(key, value); } }); return builder.build(); }
protected Optional<String> getStringForDefinition(final HeaderDefinition definition) { return Optional.ofNullable(headers.get(definition.getKey())); }
@Override public void accept(@Nonnull final HeaderDefinition definition, @Nullable final CharSequence charSequence) { final Class<?> definitionJavaType = checkNotNull(definition, "Definition").getJavaType(); if (isInt(definitionJavaType)) { validateIntegerValue(definition.getKey(), charSequence); } else if (isLong(definitionJavaType)) { validateLongValue(definition.getKey(), charSequence); } else if (isBoolean(definitionJavaType)) { validateBooleanValue(definition.getKey(), charSequence); } else if (isJsonArray(definitionJavaType)) { validateJsonArrayValue(definition.getKey(), charSequence); } else if (isEntityTag(definitionJavaType)) { validateEntityTag(definition.getKey(), charSequence); } else if (isEntityTagMatchers(definitionJavaType)) { validateEntityTagMatchers(definition.getKey(), charSequence); } }
/** * Publish Ditto headers to external headers. * * @param dittoHeaders Ditto headers to publish. * @return external headers. */ public Map<String, String> toExternalHeaders(final DittoHeaders dittoHeaders) { final Map<String, String> headers = new HashMap<>(); dittoHeaders.forEach((key, value) -> { final HeaderDefinition definition = headerDefinitionMap.get(key); if (definition == null || definition.shouldWriteToExternalHeaders()) { headers.put(key, value); } }); return headers; }
/** * Read Ditto headers from external headers. * * @param externalHeaders external headers as a map. * @return Ditto headers initialized with values from external headers. */ public DittoHeaders fromExternalHeaders(final Map<String, String> externalHeaders) { final DittoHeadersBuilder builder = DittoHeaders.newBuilder(); externalHeaders.forEach((externalKey, value) -> { if (value == null) { return; } final String key = externalKey.toLowerCase(); final HeaderDefinition definition = headerDefinitionMap.get(key); if (definition == null || definition.shouldReadFromExternalHeaders()) { builder.putHeader(key, value); } }); return builder.build(); }
/** * Validates the values of the specified headers with the help of the specified definitions. * * @param headers the key-value-pairs to be validated. * @param definitions perform the actual validation. */ protected void validateValueTypes(final Map<String, String> headers, final Collection<HeaderDefinition> definitions) { for (final HeaderDefinition definition : definitions) { final String value = headers.get(definition.getKey()); if (null != value) { definition.validateValue(value); } } }
protected Optional<String> getStringForDefinition(final HeaderDefinition definition) { return Optional.ofNullable(headers.get(definition.getKey())); }
protected void validateValueType(final CharSequence key, final CharSequence value) { definitions.stream() .filter(definition -> Objects.equals(definition.getKey(), key)) .findAny() .ifPresent(definition -> definition.validateValue(value)); }
/** * Puts the specified CharSequence value to this builder using the key of the specified definition. If the value * is {@code null} a possibly existing value for the same key is removed; thus putting a {@code null} value is same * as removing the key-value-pair. * * @param definition provides the key to be associated with {@code value}. * @param value the value to be associated with the key of {@code definition}. */ protected void putCharSequence(final HeaderDefinition definition, @Nullable final CharSequence value) { if (null != value) { checkNotEmpty(value, definition.getKey()); headers.put(definition.getKey(), value.toString()); } else { removeHeader(definition.getKey()); } }
protected void validateValueType(final CharSequence key, final CharSequence value) { definitions.stream() .filter(definition -> Objects.equals(definition.getKey(), key)) .findAny() .ifPresent(definition -> definition.validateValue(value)); }
/** * Puts the specified CharSequence value to this builder using the key of the specified definition. If the value * is {@code null} a possibly existing value for the same key is removed; thus putting a {@code null} value is same * as removing the key-value-pair. * * @param definition provides the key to be associated with {@code value}. * @param value the value to be associated with the key of {@code definition}. */ protected void putCharSequence(final HeaderDefinition definition, @Nullable final CharSequence value) { if (null != value) { checkNotEmpty(value, definition.getKey()); headers.put(definition.getKey(), value.toString()); } else { removeHeader(definition.getKey()); } }
protected void putStringCollection(final HeaderDefinition definition, final Collection<String> collection) { checkNotNull(collection, definition.getKey()); putJsonValue(definition, toJsonValueArray(collection)); }
protected void putStringCollection(final HeaderDefinition definition, final Collection<String> collection) { checkNotNull(collection, definition.getKey()); putJsonValue(definition, toJsonValueArray(collection)); }