@Override public String toString() { return getKey(); }
private DefaultDittoHeadersBuilder(final Map<String, String> headers) { super(headers, Arrays.asList(DittoHeaderDefinition.values()), DefaultDittoHeadersBuilder.class); }
private Class<?> getSerializationTypeForKey(final CharSequence key) { return getSpecificDefinitionByKey(key) .map(HeaderDefinition::getSerializationType) .orElseGet(() -> DittoHeaderDefinition.forKey(key) .map(HeaderDefinition::getSerializationType) .orElse(String.class)); }
private static boolean hasPlainTextContentType(final DittoHeaders dittoHeaders) { final String contentTypeHeader = DittoHeaderDefinition.CONTENT_TYPE.name(); return dittoHeaders.containsKey(contentTypeHeader) && "text/plain".equalsIgnoreCase(dittoHeaders.get(contentTypeHeader)); }
@Override public String toString() { return getKey(); }
private DefaultDittoHeadersBuilder(final Map<String, String> headers) { super(headers, Arrays.asList(DittoHeaderDefinition.values()), DefaultDittoHeadersBuilder.class); }
private Class<?> getSerializationTypeForKey(final CharSequence key) { return getSpecificDefinitionByKey(key) .map(HeaderDefinition::getSerializationType) .orElseGet(() -> DittoHeaderDefinition.forKey(key) .map(HeaderDefinition::getSerializationType) .orElse(String.class)); }
private static HeaderTranslator createHeaderTranslator(final ProtocolConfigReader protocolConfigReader) { final HeaderDefinition[] blacklist = protocolConfigReader.blacklist() .stream() .map(Ignored::new) .toArray(HeaderDefinition[]::new); return HeaderTranslator.of(DittoHeaderDefinition.values(), MessageHeaderDefinition.values(), blacklist); } }
/** * Create a default header translator for this protocol adapter. * * @return the default header translator. */ public static HeaderTranslator headerTranslator() { return HeaderTranslator.of(DittoHeaderDefinition.values(), MessageHeaderDefinition.values()); }
@Override public DittoHeaders apply(final ExternalMessage externalMessage, final DittoHeaders dittoHeaders) { final DittoHeadersBuilder dittoHeadersBuilder = dittoHeaders.toBuilder(); final String beforeMapping = externalMessage .findHeader(DittoHeaderDefinition.AUTHORIZATION_SUBJECTS.getKey()) .orElseThrow(() -> new IllegalArgumentException( "Missing header " + DittoHeaderDefinition.AUTHORIZATION_SUBJECTS.getKey())); // do not use dittoHeadersBuilder.authorizationSubjects(beforeMapping); // because beforeMapping is a JsonArray String, we need to set AUTHORIZATION_SUBJECTS header directly dittoHeadersBuilder.putHeader(DittoHeaderDefinition.AUTHORIZATION_SUBJECTS.getKey(), beforeMapping); if (!dittoHeaders.getOrigin().isPresent()) { dittoHeadersBuilder.origin(connectionId); } // overwrite the auth-subjects to the configured ones after mapping in order to be sure that the mapping // does not choose/change the auth-subjects itself: return dittoHeadersBuilder.build(); }
/** * Create a default header translator for this protocol adapter. * * @return the default header translator. */ public static HeaderTranslator headerTranslator() { return HeaderTranslator.of(DittoHeaderDefinition.values(), MessageHeaderDefinition.values()); }
@Override public DittoHeaders apply(final ExternalMessage externalMessage, final DittoHeaders dittoHeaders) { final DittoHeadersBuilder dittoHeadersBuilder = dittoHeaders.toBuilder(); final String beforeMapping = externalMessage .findHeader(DittoHeaderDefinition.AUTHORIZATION_SUBJECTS.getKey()) .orElseThrow(() -> new IllegalArgumentException( "Missing header " + DittoHeaderDefinition.AUTHORIZATION_SUBJECTS.getKey())); // do not use dittoHeadersBuilder.authorizationSubjects(beforeMapping); // because beforeMapping is a JsonArray String, we need to set AUTHORIZATION_SUBJECTS header directly dittoHeadersBuilder.putHeader(DittoHeaderDefinition.AUTHORIZATION_SUBJECTS.getKey(), beforeMapping); if (!dittoHeaders.getOrigin().isPresent()) { dittoHeadersBuilder.origin(connectionId); } // overwrite the auth-subjects to the configured ones after mapping in order to be sure that the mapping // does not choose/change the auth-subjects itself: return dittoHeadersBuilder.build(); }
/** * Constructs a new {@code AbstractDittoHeadersBuilder} object. * * @param initialHeaders initial key-value-pairs or an empty map. * @param definitions a collection of all well known {@link HeaderDefinition}s of this builder. The definitions * are used for header value validation. * @param selfType this type is used to simulate the "self type" of the returned object for Method Chaining of * the builder methods. * @throws NullPointerException if any argument is {@code null}. */ @SuppressWarnings("unchecked") protected AbstractDittoHeadersBuilder(final Map<String, String> initialHeaders, final Collection<HeaderDefinition> definitions, final Class<?> selfType) { checkNotNull(initialHeaders, "initial headers"); checkNotNull(definitions, "header definitions"); validateValueTypes(initialHeaders, definitions); myself = (S) selfType.cast(this); headers = new HashMap<>(initialHeaders); this.definitions = new HashSet<>(definitions); Collections.addAll(this.definitions, DittoHeaderDefinition.values()); }
@Override public S schemaVersion(@Nullable final JsonSchemaVersion schemaVersion) { if (null != schemaVersion) { putCharSequence(DittoHeaderDefinition.SCHEMA_VERSION, schemaVersion.toString()); } else { removeHeader(DittoHeaderDefinition.SCHEMA_VERSION.getKey()); } return myself; }
/** * Constructs a new {@code AbstractDittoHeadersBuilder} object. * * @param initialHeaders initial key-value-pairs or an empty map. * @param definitions a collection of all well known {@link HeaderDefinition}s of this builder. The definitions * are used for header value validation. * @param selfType this type is used to simulate the "self type" of the returned object for Method Chaining of * the builder methods. * @throws NullPointerException if any argument is {@code null}. */ @SuppressWarnings("unchecked") protected AbstractDittoHeadersBuilder(final Map<String, String> initialHeaders, final Collection<HeaderDefinition> definitions, final Class<?> selfType) { checkNotNull(initialHeaders, "initial headers"); checkNotNull(definitions, "header definitions"); validateValueTypes(initialHeaders, definitions); myself = (S) selfType.cast(this); headers = new HashMap<>(initialHeaders); this.definitions = new HashSet<>(definitions); Collections.addAll(this.definitions, DittoHeaderDefinition.values()); }
@Override public S schemaVersion(@Nullable final JsonSchemaVersion schemaVersion) { if (null != schemaVersion) { putCharSequence(DittoHeaderDefinition.SCHEMA_VERSION, schemaVersion.toString()); } else { removeHeader(DittoHeaderDefinition.SCHEMA_VERSION.getKey()); } return myself; }
@Override public ExternalMessage apply(final ExternalMessage externalMessage) { final AuthorizationContext authorizationContext = getAuthorizationContextFromMessage(externalMessage); final AuthorizationContext filteredContext = PlaceholderFilter.filterAuthorizationContext(authorizationContext, externalMessage.getHeaders()); final JsonArray authSubjectsArray = mapAuthorizationContextToSubjectsArray(filteredContext); final ExternalMessage externalMessageWithSourceHeader = authSubjectsArray.get(0) .map(JsonValue::asString) .map(firstAuthorizationSubject -> externalMessage.withHeader(DittoHeaderDefinition.SOURCE.getKey(), firstAuthorizationSubject)) .orElse(externalMessage); return externalMessageWithSourceHeader.withHeader(DittoHeaderDefinition.AUTHORIZATION_SUBJECTS.getKey(), authSubjectsArray.toString()); }
@Override public ExternalMessage apply(final ExternalMessage externalMessage) { final AuthorizationContext authorizationContext = getAuthorizationContextFromMessage(externalMessage); final AuthorizationContext filteredContext = PlaceholderFilter.filterAuthorizationContext(authorizationContext, externalMessage.getHeaders()); final JsonArray authSubjectsArray = mapAuthorizationContextToSubjectsArray(filteredContext); final ExternalMessage externalMessageWithSourceHeader = authSubjectsArray.get(0) .map(JsonValue::asString) .map(firstAuthorizationSubject -> externalMessage.withHeader(DittoHeaderDefinition.SOURCE.getKey(), firstAuthorizationSubject)) .orElse(externalMessage); return externalMessageWithSourceHeader.withHeader(DittoHeaderDefinition.AUTHORIZATION_SUBJECTS.getKey(), authSubjectsArray.toString()); }