/** * Creates a new instance based on the given replacement definitions. * @param replacementDefinitions the replacement definitions. * * @return the created instance. */ public static HeaderBasedPlaceholderSubstitutionAlgorithm newInstance( final Map<String, Function<DittoHeaders, String>> replacementDefinitions) { return new HeaderBasedPlaceholderSubstitutionAlgorithm(requireNonNull(replacementDefinitions)); }
/** * Substitutes all placeholders contained in the {@code input} based on the {@code dittoHeaders}. * * @param input the input. * @param dittoHeaders the extracted {@link DittoHeaders}. * @return the replaced input, if the input contains placeholders; the (same) input object, if no placeholders * were contained in the input. */ public String substitute(final String input, final DittoHeaders dittoHeaders) { requireNonNull(input); requireNonNull(dittoHeaders); final Function<String, Optional<String>> placeholderReplacerFunction = createReplacerFunction(dittoHeaders); final Function<String, DittoRuntimeException> unresolvedInputHandler = createUnresolvedInputHandler(dittoHeaders); return Placeholders.substitute(input, placeholderReplacerFunction, unresolvedInputHandler); }
/** * Substitutes all placeholders contained in the {@code input} based on the {@link DittoHeaders} contained in * {@code withDittoHeaders}. * * @param input the input. * @param withDittoHeaders the instance of {@link WithDittoHeaders}, from which the headers are extracted * (normally a command). * @return the replaced input, if the input contains placeholders; the (same) input object, if no placeholders * were contained in the input. */ public String substitute(final String input, final WithDittoHeaders withDittoHeaders) { requireNonNull(input); requireNonNull(withDittoHeaders); return substitute(input, withDittoHeaders.getDittoHeaders()); }
private static PlaceholderSubstitution createInstance( final Map<String, Function<DittoHeaders, String>> replacementDefinitions) { final HeaderBasedPlaceholderSubstitutionAlgorithm algorithm = HeaderBasedPlaceholderSubstitutionAlgorithm.newInstance(replacementDefinitions); final SubstitutionStrategyRegistry substitutionStrategyRegistry = SubstitutionStrategyRegistry.newInstance(); return new PlaceholderSubstitution(algorithm, substitutionStrategyRegistry); } }
static AclEntry substituteAclEntry(final AclEntry existingAclEntry, final HeaderBasedPlaceholderSubstitutionAlgorithm substitutionAlgorithm, final DittoHeaders dittoHeaders) { final String subjectId = existingAclEntry.getAuthorizationSubject().getId(); final String substitutedSubjectId = substitutionAlgorithm.substitute(subjectId, dittoHeaders); final AclEntry resultAclEntry; if (subjectId.equals(substitutedSubjectId)) { resultAclEntry = existingAclEntry; } else { resultAclEntry = AclEntry.newInstance(AuthorizationSubject.newInstance(substitutedSubjectId), existingAclEntry.getPermissions()); } return resultAclEntry; }
static Subjects substituteSubjects(final Subjects subjects, final HeaderBasedPlaceholderSubstitutionAlgorithm substitutionAlgorithm, final DittoHeaders dittoHeaders) { Subjects newSubjects = subjects; for (final Subject subject : subjects) { final String subjectId = subject.getId().toString(); final String substitutedSubjectId = substitutionAlgorithm.substitute(subjectId, dittoHeaders); if (!subjectId.equals(substitutedSubjectId)) { final Subject newSubject = Subject.newInstance(substitutedSubjectId, subject.getType()); newSubjects = newSubjects.removeSubject(subjectId).setSubject(newSubject); } } return newSubjects; }
@Override public WithDittoHeaders apply(final ModifySubject modifySubject, final HeaderBasedPlaceholderSubstitutionAlgorithm substitutionAlgorithm) { requireNonNull(modifySubject); requireNonNull(substitutionAlgorithm); final String subjectId = modifySubject.getSubject().getId().toString(); final String substitutedSubjectId = substitutionAlgorithm.substitute(subjectId, modifySubject); if (subjectId.equals(substitutedSubjectId)) { return modifySubject; } else { final Subject newSubject = Subject.newInstance(substitutedSubjectId, modifySubject.getSubject().getType()); return ModifySubject.of(modifySubject.getId(), modifySubject.getLabel(), newSubject, modifySubject.getDittoHeaders()); } } }