private static List<SubstitutionStrategy> createStrategies() { final List<SubstitutionStrategy> strategies = new LinkedList<>(); // replacement for policy-subject-id strategies.add(new ModifySubjectSubstitutionStrategy()); strategies.add(new ModifySubjectsSubstitutionStrategy()); strategies.add(new ModifyPolicyEntrySubstitutionStrategy()); strategies.add(new ModifyPolicyEntriesSubstitutionStrategy()); strategies.add(new ModifyPolicySubstitutionStrategy()); strategies.add(new CreatePolicySubstitutionStrategy()); // replacement for acl-subject-id strategies.add(new ModifyAclEntrySubstitutionStrategy()); strategies.add(new ModifyAclSubstitutionStrategy()); // replacement for both policy-subject-id and acl-subject-id strategies.add(new ModifyThingSubstitutionStrategy()); strategies.add(new CreateThingSubstitutionStrategy()); return strategies; } }
@Override public WithDittoHeaders apply(final ModifySubjects modifySubjects, final HeaderBasedPlaceholderSubstitutionAlgorithm substitutionAlgorithm) { requireNonNull(modifySubjects); requireNonNull(substitutionAlgorithm); final DittoHeaders dittoHeaders = modifySubjects.getDittoHeaders(); final Subjects existingSubjects = modifySubjects.getSubjects(); Subjects substitutedSubjects = substituteSubjects(existingSubjects, substitutionAlgorithm, dittoHeaders); if (existingSubjects.equals(substitutedSubjects)) { return modifySubjects; } else { return ModifySubjects.of(modifySubjects.getId(), modifySubjects.getLabel(), substitutedSubjects, dittoHeaders); } }