@Override public Policy build() { return delegate.build(); }
@Override public ImmutablePolicyBuilderLabelScoped setAll(final Iterable<PolicyEntry> entries) { delegate.setAll(entries); return this; }
@Override public ImmutablePolicyBuilderLabelScoped remove(final PolicyEntry entry) { delegate.remove(entry); return this; }
.setLifecycle(PolicyLifecycle.ACTIVE) .setRevision(lastSequenceNr()) .setModified(pc.getTimestamp().orElse(null)) .build()) copyBuilder.removeAll(policy); // remove all old policyEntries! copyBuilder.setAll(pm.getPolicy().getEntriesSet()); // add the new ones policy = copyBuilder.setRevision(lastSequenceNr()) .setModified(pm.getTimestamp().orElse(null)) .build(); }) if (policy != null) { policy = policy.toBuilder() .setLifecycle(PolicyLifecycle.DELETED) .setRevision(lastSequenceNr()) .setModified(pd.getTimestamp().orElse(null)) .build(); } else { log.warning("Policy was null when 'PolicyDeleted' event should have been applied on recovery."); .removeAll(policy.getEntriesSet()) .setAll(pem.getPolicyEntries()) .setRevision(lastSequenceNr()) .setModified(pem.getTimestamp().orElse(null)) .build()) .set(pec.getPolicyEntry()) .setRevision(lastSequenceNr())
@Override protected void doApply(final CreatePolicy command) { // Policy not yet created - do so .. final Policy newPolicy = command.getPolicy(); final PolicyBuilder newPolicyBuilder = PoliciesModelFactory.newPolicyBuilder(newPolicy); final DittoHeaders dittoHeaders = command.getDittoHeaders(); if (!newPolicy.getLifecycle().isPresent()) { newPolicyBuilder.setLifecycle(PolicyLifecycle.ACTIVE); } final Policy newPolicyWithLifecycle = newPolicyBuilder.build(); final PoliciesValidator validator = PoliciesValidator.newInstance(newPolicyWithLifecycle); if (validator.isValid()) { final PolicyCreated policyCreated = PolicyCreated.of(newPolicyWithLifecycle, getNextRevision(), getEventTimestamp(), dittoHeaders); processEvent(policyCreated, event -> { final CreatePolicyResponse response = CreatePolicyResponse.of(policyId, PolicyPersistenceActor.this.policy, dittoHeaders); sendSuccessResponse(command, response); log.debug("Created new Policy with ID <{}>.", policyId); becomePolicyCreatedHandler(); }); } else { policyInvalid(validator.getReason().orElse(null), dittoHeaders); } }
static Policy substitutePolicy(final Policy policy, final HeaderBasedPlaceholderSubstitutionAlgorithm substitutionAlgorithm, final DittoHeaders dittoHeaders) { final Iterable<PolicyEntry> existingEntries = policy.getEntriesSet(); final Iterable<PolicyEntry> substitutedEntries = substitutePolicyEntries(existingEntries, substitutionAlgorithm, dittoHeaders); final Policy resultPolicy; if (existingEntries.equals(substitutedEntries)) { resultPolicy = policy; } else { resultPolicy = PoliciesModelFactory.newPolicyBuilder(policy).setAll(substitutedEntries).build(); } return resultPolicy; }
/** * Returns a {@code label} scoped PolicyBuilder where the {@link Label} can be omitted in the builder methods. * * @param label the Label to scope to. * @return the label scoped PolicyBuilder. */ default LabelScoped forLabel(final CharSequence label) { return forLabel(Label.of(label)); }
@Override public ImmutablePolicyBuilderLabelScoped setRevision(@Nullable final PolicyRevision revision) { delegate.setRevision(revision); return this; }
@Override public ImmutablePolicyBuilderLabelScoped set(final PolicyEntry entry) { delegate.set(entry); return this; }
@Override public ImmutablePolicyBuilderLabelScoped removeAll(final Iterable<PolicyEntry> entries) { delegate.removeAll(entries); return this; }
@Override public ImmutablePolicyBuilderLabelScoped setModified(@Nullable final Instant modified) { delegate.setModified(modified); return this; }
@Override public ImmutablePolicyBuilderLabelScoped setLifecycle(@Nullable final PolicyLifecycle lifecycle) { delegate.setLifecycle(lifecycle); return this; }
.setLifecycle(PolicyLifecycle.ACTIVE) .setRevision(lastSequenceNr()) .setModified(pc.getTimestamp().orElse(null)) .build()) copyBuilder.removeAll(policy); // remove all old policyEntries! copyBuilder.setAll(pm.getPolicy().getEntriesSet()); // add the new ones policy = copyBuilder.setRevision(lastSequenceNr()) .setModified(pm.getTimestamp().orElse(null)) .build(); }) if (policy != null) { policy = policy.toBuilder() .setLifecycle(PolicyLifecycle.DELETED) .setRevision(lastSequenceNr()) .setModified(pd.getTimestamp().orElse(null)) .build(); } else { log.warning("Policy was null when 'PolicyDeleted' event should have been applied on recovery."); .removeAll(policy.getEntriesSet()) .setAll(pem.getPolicyEntries()) .setRevision(lastSequenceNr()) .setModified(pem.getTimestamp().orElse(null)) .build()) .set(pec.getPolicyEntry()) .setRevision(lastSequenceNr())
@Override protected void doApply(final CreatePolicy command) { // Policy not yet created - do so .. final Policy newPolicy = command.getPolicy(); final PolicyBuilder newPolicyBuilder = PoliciesModelFactory.newPolicyBuilder(newPolicy); final DittoHeaders dittoHeaders = command.getDittoHeaders(); if (!newPolicy.getLifecycle().isPresent()) { newPolicyBuilder.setLifecycle(PolicyLifecycle.ACTIVE); } final Policy newPolicyWithLifecycle = newPolicyBuilder.build(); final PoliciesValidator validator = PoliciesValidator.newInstance(newPolicyWithLifecycle); if (validator.isValid()) { final PolicyCreated policyCreated = PolicyCreated.of(newPolicyWithLifecycle, getNextRevision(), getEventTimestamp(), dittoHeaders); processEvent(policyCreated, event -> { final CreatePolicyResponse response = CreatePolicyResponse.of(policyId, PolicyPersistenceActor.this.policy, dittoHeaders); sendSuccessResponse(command, response); log.debug("Created new Policy with ID <{}>.", policyId); becomePolicyCreatedHandler(); }); } else { policyInvalid(validator.getReason().orElse(null), dittoHeaders); } }
private static Optional<Policy> getDefaultPolicy(final AuthorizationContext authorizationContext, final CharSequence thingId) { final Optional<Subject> subjectOptional = authorizationContext.getFirstAuthorizationSubject() .map(AuthorizationSubject::getId) .map(SubjectId::newInstance) .map(Subject::newInstance); return subjectOptional.map(subject -> Policy.newBuilder(thingId) .forLabel(DEFAULT_POLICY_ENTRY_LABEL) .setSubject(subject) .setGrantedPermissions(PoliciesResourceType.thingResource("/"), org.eclipse.ditto.services.models.things.Permission.DEFAULT_THING_PERMISSIONS) .setGrantedPermissions(PoliciesResourceType.policyResource("/"), org.eclipse.ditto.services.models.policies.Permission.DEFAULT_POLICY_PERMISSIONS) .setGrantedPermissions(PoliciesResourceType.messageResource("/"), org.eclipse.ditto.services.models.policies.Permission.DEFAULT_POLICY_PERMISSIONS) .build()); }
/** * Sets the given revision number to this builder. * * @param revisionNumber the revision number to be set. * @return this builder to allow method chaining. */ default PolicyBuilder setRevision(final long revisionNumber) { return setRevision(PolicyRevision.newInstance(revisionNumber)); }
@Override public ImmutablePolicyBuilderLabelScoped remove(final CharSequence label) { delegate.remove(label); return this; }
/** * Removes the given entry from this builder. * * @param entry the entry to be removed. * @return this builder to allow method chaining. * @throws NullPointerException if {@code entry} is {@code null}. */ default PolicyBuilder remove(final PolicyEntry entry) { return remove(checkNotNull(entry, "entry to be removed").getLabel()); }