@Override public WithDittoHeaders apply(final ModifyPolicy modifyPolicy, final HeaderBasedPlaceholderSubstitutionAlgorithm substitutionAlgorithm) { requireNonNull(modifyPolicy); requireNonNull(substitutionAlgorithm); final DittoHeaders dittoHeaders = modifyPolicy.getDittoHeaders(); final Policy existingPolicy = modifyPolicy.getPolicy(); final Policy substitutedPolicy = substitutePolicy(existingPolicy, substitutionAlgorithm, dittoHeaders); if (existingPolicy.equals(substitutedPolicy)) { return modifyPolicy; } else { return ModifyPolicy.of(modifyPolicy.getId(), substitutedPolicy, dittoHeaders); } }
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; } }