test_class.declarator: HEADERS = new HashMap<>()
test_class.modifier: private static final
test_class.original_string: private static final Map<String, String> HEADERS = new HashMap<>();
test_class.type: Map<String, String>
test_class.var_name: HEADERS
test_class.declarator: DEVICE_ID = "device-12345"
test_class.modifier: private static final
test_class.original_string: private static final String DEVICE_ID = "device-12345";
test_class.type: String
test_class.var_name: DEVICE_ID
test_class.declarator: THING_ID = ThingId.of("eclipse", "ditto")
test_class.modifier: private static final
test_class.original_string: private static final ThingId THING_ID = ThingId.of("eclipse", "ditto");
test_class.type: ThingId
test_class.var_name: THING_ID
test_class.declarator: KNOWN_NAMESPACE = "org.eclipse.ditto.test"
test_class.modifier: private static final
test_class.original_string: private static final String KNOWN_NAMESPACE = "org.eclipse.ditto.test";
test_class.type: String
test_class.var_name: KNOWN_NAMESPACE
test_class.declarator: KNOWN_ID = "myThing"
test_class.modifier: private static final
test_class.original_string: private static final String KNOWN_ID = "myThing";
test_class.type: String
test_class.var_name: KNOWN_ID
test_class.declarator: KNOWN_SUBJECT = "mySubject"
test_class.modifier: private static final
test_class.original_string: private static final String KNOWN_SUBJECT = "mySubject";
test_class.type: String
test_class.var_name: KNOWN_SUBJECT
test_class.declarator: KNOWN_SUBJECT2 = "$set.configuration/steps"
test_class.modifier: private static final
test_class.original_string: private static final String KNOWN_SUBJECT2 = "$set.configuration/steps";
test_class.type: String
test_class.var_name: KNOWN_SUBJECT2
test_class.declarator: KNOWN_TOPIC_PATH = TopicPath.newBuilder(ThingId.of(KNOWN_NAMESPACE, KNOWN_ID))
              .twin().things().commands().modify().build()
test_class.modifier: private static final
test_class.original_string: private static final TopicPath KNOWN_TOPIC_PATH = TopicPath.newBuilder(ThingId.of(KNOWN_NAMESPACE, KNOWN_ID))
              .twin().things().commands().modify().build();
test_class.type: TopicPath
test_class.var_name: KNOWN_TOPIC_PATH
test_class.declarator: KNOWN_TOPIC_PATH_SUBJECT1 =
              TopicPath.newBuilder(ThingId.of(KNOWN_NAMESPACE, KNOWN_ID))
                      .live().things().messages().subject(KNOWN_SUBJECT).build()
test_class.modifier: private static final
test_class.original_string: private static final TopicPath KNOWN_TOPIC_PATH_SUBJECT1 =
              TopicPath.newBuilder(ThingId.of(KNOWN_NAMESPACE, KNOWN_ID))
                      .live().things().messages().subject(KNOWN_SUBJECT).build();
test_class.type: TopicPath
test_class.var_name: KNOWN_TOPIC_PATH_SUBJECT1
test_class.declarator: KNOWN_TOPIC_PATH_SUBJECT2 =
              TopicPath.newBuilder(ThingId.of(KNOWN_NAMESPACE, KNOWN_ID))
                      .live().things().messages().subject(KNOWN_SUBJECT2).build()
test_class.modifier: private static final
test_class.original_string: private static final TopicPath KNOWN_TOPIC_PATH_SUBJECT2 =
              TopicPath.newBuilder(ThingId.of(KNOWN_NAMESPACE, KNOWN_ID))
                      .live().things().messages().subject(KNOWN_SUBJECT2).build();
test_class.type: TopicPath
test_class.var_name: KNOWN_TOPIC_PATH_SUBJECT2
test_class.declarator: headersPlaceholder = PlaceholderFactory.newHeadersPlaceholder()
test_class.modifier: private static final
test_class.original_string: private static final HeadersPlaceholder headersPlaceholder = PlaceholderFactory.newHeadersPlaceholder();
test_class.type: HeadersPlaceholder
test_class.var_name: headersPlaceholder
test_class.declarator: thingPlaceholder = PlaceholderFactory.newThingPlaceholder()
test_class.modifier: private static final
test_class.original_string: private static final ThingPlaceholder thingPlaceholder = PlaceholderFactory.newThingPlaceholder();
test_class.type: ThingPlaceholder
test_class.var_name: thingPlaceholder
test_class.declarator: topicPlaceholder = PlaceholderFactory.newTopicPathPlaceholder()
test_class.modifier: private static final
test_class.original_string: private static final TopicPathPlaceholder topicPlaceholder = PlaceholderFactory.newTopicPathPlaceholder();
test_class.type: TopicPathPlaceholder
test_class.var_name: topicPlaceholder
test_class.declarator: filterChain = new PlaceholderResolver[]{
              PlaceholderFactory.newPlaceholderResolver(headersPlaceholder, HEADERS),
              PlaceholderFactory.newPlaceholderResolver(thingPlaceholder, THING_ID)
      }
test_class.modifier: private static final
test_class.original_string: private static final PlaceholderResolver[] filterChain = new PlaceholderResolver[]{
              PlaceholderFactory.newPlaceholderResolver(headersPlaceholder, HEADERS),
              PlaceholderFactory.newPlaceholderResolver(thingPlaceholder, THING_ID)
      };
test_class.type: PlaceholderResolver[]
test_class.var_name: filterChain
test_class.declarator: placeholders = new Placeholder[]{
              headersPlaceholder,
              thingPlaceholder
      }
test_class.modifier: private static final
test_class.original_string: private static final Placeholder[] placeholders = new Placeholder[]{
              headersPlaceholder,
              thingPlaceholder
      };
test_class.type: Placeholder[]
test_class.var_name: placeholders
test_class.file: model/placeholders/src/test/java/org/eclipse/ditto/model/placeholders/PlaceholderFilterTest.java
test_class.identifier: PlaceholderFilterTest
test_case.body: @Test
      public void testValidateAndReplace() {
          final String replacement = UUID.randomUUID().toString();
          // no whitespace
          assertThat(PlaceholderFilter.validateAndReplace("{{thing:namespace}}/{{thing:name}}:{{header:device-id}}",
                  replacement, placeholders))
                  .isEqualTo(String.format("%s/%s:%s", replacement, replacement, replacement));
  
          // multi whitespace
          assertThat(PlaceholderFilter.validateAndReplace(
                  "{{  thing:namespace  }}/{{  thing:name  }}:{{  header:device-id  }}", replacement, placeholders))
                  .isEqualTo(String.format("%s/%s:%s", replacement, replacement, replacement));
  
          // mixed whitespace
          assertThat(PlaceholderFilter.validateAndReplace("{{thing:namespace }}/{{  thing:name }}:{{header:device-id }}",
                  replacement, placeholders))
                  .isEqualTo(String.format("%s/%s:%s", replacement, replacement, replacement));
  
          // no separators
          assertThat(PlaceholderFilter.validateAndReplace("{{thing:namespace }}{{  thing:name }}{{header:device-id }}",
                  replacement, placeholders))
                  .isEqualTo(String.format("%s%s%s", replacement, replacement, replacement));
  
          // whitespace separators
          assertThat(
                  PlaceholderFilter.validateAndReplace("{{thing:namespace }}  {{  thing:name }}  {{header:device-id }}",
                          replacement, placeholders))
                  .isEqualTo(String.format("%s  %s  %s", replacement, replacement, replacement));
  
          // pre/postfix whitespace
          assertThat(
                  PlaceholderFilter.validateAndReplace("  {{thing:namespace }}{{  thing:name }}{{header:device-id }}  ",
                          replacement, placeholders))
                  .isEqualTo(String.format("  %s%s%s  ", replacement, replacement, replacement));
  
          // pre/postfix
          assertThat(PlaceholderFilter.validateAndReplace(
                  "-----{{thing:namespace }}{{  thing:name }}{{header:device-id }}-----", replacement, placeholders))
                  .isEqualTo(String.format("-----%s%s%s-----", replacement, replacement, replacement));
  
          // pre/postfix and separators
          assertThat(PlaceholderFilter.validateAndReplace(
                  "-----{{thing:namespace }}///{{  thing:name }}///{{header:device-id }}-----", replacement,
                  placeholders))
                  .isEqualTo(String.format("-----%s///%s///%s-----", replacement, replacement, replacement));
      }
test_case.class_method_signature: PlaceholderFilterTest.testValidateAndReplace()
test_case.full_signature: @Test public void testValidateAndReplace()
test_case.identifier: testValidateAndReplace
test_case.invocations: toString randomUUID isEqualTo assertThat validateAndReplace format isEqualTo assertThat validateAndReplace format isEqualTo assertThat validateAndReplace format isEqualTo assertThat validateAndReplace format isEqualTo assertThat validateAndReplace format isEqualTo assertThat validateAndReplace format isEqualTo assertThat validateAndReplace format isEqualTo assertThat validateAndReplace format
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testValidateAndReplace()
focal_class.file: model/placeholders/src/main/java/org/eclipse/ditto/model/placeholders/PlaceholderFilter.java
focal_class.identifier: PlaceholderFilter
focal_class.class_method_signature: PlaceholderFilter.applyHeadersPlaceholderToAuthContext(
              final AuthorizationContext authorizationContext,
              final Map<String, String> headers)
focal_class.full_signature: public static AuthorizationContext applyHeadersPlaceholderToAuthContext(
              final AuthorizationContext authorizationContext,
              final Map<String, String> headers)
focal_class.identifier: applyHeadersPlaceholderToAuthContext
focal_class.modifiers: public static
focal_class.parameters: (
              final AuthorizationContext authorizationContext,
              final Map<String, String> headers)
focal_class.return: AuthorizationContext
focal_class.signature: AuthorizationContext applyHeadersPlaceholderToAuthContext(
              final AuthorizationContext authorizationContext,
              final Map<String, String> headers)
focal_class.class_method_signature: PlaceholderFilter.apply(final String template, final T placeholderSource, final Placeholder<T> placeholder)
focal_class.full_signature: public static String apply(final String template, final T placeholderSource, final Placeholder<T> placeholder)
focal_class.identifier: apply
focal_class.modifiers: public static
focal_class.parameters: (final String template, final T placeholderSource, final Placeholder<T> placeholder)
focal_class.return: String
focal_class.signature: String apply(final String template, final T placeholderSource, final Placeholder<T> placeholder)
focal_class.class_method_signature: PlaceholderFilter.apply(final String template, final ExpressionResolver expressionResolver)
focal_class.full_signature: public static String apply(final String template, final ExpressionResolver expressionResolver)
focal_class.identifier: apply
focal_class.modifiers: public static
focal_class.parameters: (final String template, final ExpressionResolver expressionResolver)
focal_class.return: String
focal_class.signature: String apply(final String template, final ExpressionResolver expressionResolver)
focal_class.class_method_signature: PlaceholderFilter.applyOrElseDelete(final String template, final ExpressionResolver resolver)
focal_class.full_signature: public static Optional<String> applyOrElseDelete(final String template, final ExpressionResolver resolver)
focal_class.identifier: applyOrElseDelete
focal_class.modifiers: public static
focal_class.parameters: (final String template, final ExpressionResolver resolver)
focal_class.return: Optional<String>
focal_class.signature: Optional<String> applyOrElseDelete(final String template, final ExpressionResolver resolver)
focal_class.class_method_signature: PlaceholderFilter.applyOrElseRetain(final String template, final ExpressionResolver resolver)
focal_class.full_signature: public static String applyOrElseRetain(final String template, final ExpressionResolver resolver)
focal_class.identifier: applyOrElseRetain
focal_class.modifiers: public static
focal_class.parameters: (final String template, final ExpressionResolver resolver)
focal_class.return: String
focal_class.signature: String applyOrElseRetain(final String template, final ExpressionResolver resolver)
focal_class.class_method_signature: PlaceholderFilter.validate(final String template, final Placeholder<?>... placeholders)
focal_class.full_signature: public static void validate(final String template, final Placeholder<?>... placeholders)
focal_class.identifier: validate
focal_class.modifiers: public static
focal_class.parameters: (final String template, final Placeholder<?>... placeholders)
focal_class.return: void
focal_class.signature: void validate(final String template, final Placeholder<?>... placeholders)
focal_class.class_method_signature: PlaceholderFilter.validateAndReplace(final String template, final String stringUsedInPlaceholderReplacement,
              final Placeholder<?>... placeholders)
focal_class.full_signature: public static String validateAndReplace(final String template, final String stringUsedInPlaceholderReplacement,
              final Placeholder<?>... placeholders)
focal_class.identifier: validateAndReplace
focal_class.modifiers: public static
focal_class.parameters: (final String template, final String stringUsedInPlaceholderReplacement,
              final Placeholder<?>... placeholders)
focal_class.return: String
focal_class.signature: String validateAndReplace(final String template, final String stringUsedInPlaceholderReplacement,
              final Placeholder<?>... placeholders)
focal_class.class_method_signature: PlaceholderFilter.doApply(final String template, final ExpressionResolver expressionResolver)
focal_class.full_signature: private static String doApply(final String template, final ExpressionResolver expressionResolver)
focal_class.identifier: doApply
focal_class.modifiers: private static
focal_class.parameters: (final String template, final ExpressionResolver expressionResolver)
focal_class.return: String
focal_class.signature: String doApply(final String template, final ExpressionResolver expressionResolver)
focal_class.class_method_signature: PlaceholderFilter.PlaceholderFilter()
focal_class.full_signature: private  PlaceholderFilter()
focal_class.identifier: PlaceholderFilter
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.signature:  PlaceholderFilter()
focal_method.body: public static String validateAndReplace(final String template, final String stringUsedInPlaceholderReplacement,
              final Placeholder<?>... placeholders) {
          return doApply(template,
                  PlaceholderFactory.newExpressionResolverForValidation(stringUsedInPlaceholderReplacement, placeholders)
          );
      }
focal_method.class_method_signature: PlaceholderFilter.validateAndReplace(final String template, final String stringUsedInPlaceholderReplacement,
              final Placeholder<?>... placeholders)
focal_method.full_signature: public static String validateAndReplace(final String template, final String stringUsedInPlaceholderReplacement,
              final Placeholder<?>... placeholders)
focal_method.identifier: validateAndReplace
focal_method.invocations: doApply newExpressionResolverForValidation
focal_method.modifiers: public static
focal_method.parameters: (final String template, final String stringUsedInPlaceholderReplacement,
              final Placeholder<?>... placeholders)
focal_method.return: String
focal_method.signature: String validateAndReplace(final String template, final String stringUsedInPlaceholderReplacement,
              final Placeholder<?>... placeholders)