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 testValidate() {
          // no whitespace
          PlaceholderFilter.validate("{{thing:namespace}}/{{thing:name}}:{{header:device-id}}", placeholders);
  
          // multi whitespace
          PlaceholderFilter.validate("{{  thing:namespace  }}/{{  thing:name  }}:{{  header:device-id  }}", placeholders);
  
          // mixed whitespace
          PlaceholderFilter.validate("{{thing:namespace }}/{{  thing:name }}:{{header:device-id }}", placeholders);
  
          // no separators
          PlaceholderFilter.validate("{{thing:namespace }}{{  thing:name }}{{header:device-id }}", placeholders);
  
          // whitespace separators
          PlaceholderFilter.validate("{{thing:namespace }}  {{  thing:name }}  {{header:device-id }}", placeholders);
  
          // pre/postfix whitespace
          PlaceholderFilter.validate("  {{thing:namespace }}{{  thing:name }}{{header:device-id }}  ", placeholders);
  
          // pre/postfix
          PlaceholderFilter.validate("-----{{thing:namespace }}{{  thing:name }}{{header:device-id }}-----",
                  placeholders);
  
          // pre/postfix and separators
          PlaceholderFilter.validate("-----{{thing:namespace }}///{{  thing:name }}///{{header:device-id }}-----",
                  placeholders);
  
          // placeholders with pipeline functions
          PlaceholderFilter.validate("{{ thing:namespace }}:{{thing:id | fn:substring-after(':')}}",
                  placeholders);
      }
test_case.class_method_signature: PlaceholderFilterTest.testValidate()
test_case.full_signature: @Test public void testValidate()
test_case.identifier: testValidate
test_case.invocations: validate validate validate validate validate validate validate validate validate
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testValidate()
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 void validate(final String template, final Placeholder<?>... placeholders) {
          applyOrElseRetain(template, PlaceholderFactory.newExpressionResolverForValidation(placeholders));
      }
focal_method.class_method_signature: PlaceholderFilter.validate(final String template, final Placeholder<?>... placeholders)
focal_method.full_signature: public static void validate(final String template, final Placeholder<?>... placeholders)
focal_method.identifier: validate
focal_method.invocations: applyOrElseRetain newExpressionResolverForValidation
focal_method.modifiers: public static
focal_method.parameters: (final String template, final Placeholder<?>... placeholders)
focal_method.return: void
focal_method.signature: void validate(final String template, final Placeholder<?>... placeholders)