/** * Creates a new instance with default replacement definitions. * * @return the created instance. * @see #newExtendedInstance(Map) */ public static PlaceholderSubstitution newInstance() { final Map<String, Function<DittoHeaders, String>> defaultReplacementDefinitions = createDefaultReplacementDefinitions(); return createInstance(defaultReplacementDefinitions); }
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); } }
/** * 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 Map<String, Function<DittoHeaders, String>> createDefaultReplacementDefinitions() { final Map<String, Function<DittoHeaders, String>> defaultReplacementDefinitions = new LinkedHashMap<>(); defaultReplacementDefinitions.put(SubjectIdReplacementDefinition.REPLACER_NAME, SubjectIdReplacementDefinition.getInstance()); defaultReplacementDefinitions.put(SubjectIdReplacementDefinition.LEGACY_REPLACER_NAME, SubjectIdReplacementDefinition.getInstance()); return Collections.unmodifiableMap(defaultReplacementDefinitions); }
newPreEnforcer(blockedNamespaces, PlaceholderSubstitution.newInstance());
/** * Creates a new instance with default replacement definitions, extended with * {@code additionalReplacementDefinitions}. * * @param additionalReplacementDefinitions the additional replacement definitions. * @return the created instance. * @see #newInstance() */ public static PlaceholderSubstitution newExtendedInstance( final Map<String, Function<DittoHeaders, String>> additionalReplacementDefinitions) { requireNonNull(additionalReplacementDefinitions); final Map<String, Function<DittoHeaders, String>> defaultReplacementDefinitions = createDefaultReplacementDefinitions(); final Map<String, Function<DittoHeaders, String>> allReplacementDefinitions = new LinkedHashMap<>(); allReplacementDefinitions.putAll(defaultReplacementDefinitions); allReplacementDefinitions.putAll(additionalReplacementDefinitions); return createInstance(allReplacementDefinitions); }
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()); } } }