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