Skip to content

Commit 56242a3

Browse files
committed
#96 implement partial read acess events emitting
1 parent 22372d4 commit 56242a3

File tree

40 files changed

+3326
-542
lines changed

40 files changed

+3326
-542
lines changed

base/model/src/main/java/org/eclipse/ditto/base/model/headers/DittoHeaderDefinition.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,38 @@ public enum DittoHeaderDefinition implements HeaderDefinition {
623623
false,
624624
HeaderValueValidators.getJsonObjectValidator()),
625625

626+
/**
627+
* Internal header containing partial access paths for subjects with partial READ permissions.
628+
* Used to enable partial change notifications for subjects with restricted READ permissions.
629+
* <p>
630+
* Key: {@code "ditto-partial-access-paths"}, Java type: {@link JsonObject}.
631+
* Format (indexed):
632+
* </p>
633+
* <pre>{@code
634+
* {
635+
* "subjects": [
636+
* "foo-idp:groupA",
637+
* "foo-idp:user1"
638+
* ],
639+
* "paths": {
640+
* "attributes/location": [0],
641+
* "features/A/properties/status": [0, 1]
642+
* }
643+
* }
644+
* }</pre>
645+
* <p>
646+
* Each path maps to integer indices referring to entries in the {@code subjects} array.
647+
* This indexed format reduces header size when multiple subjects share the same paths.
648+
* </p>
649+
*
650+
* @since 3.9.0
651+
*/
652+
PARTIAL_ACCESS_PATHS("ditto-partial-access-paths",
653+
JsonObject.class,
654+
false,
655+
false,
656+
HeaderValueValidators.getJsonObjectValidator()),
657+
626658
/**
627659
* Internal header containing pre-defined {@code extraFields} as JSON object sent along for emitted thing event.
628660
*

base/model/src/test/java/org/eclipse/ditto/base/model/headers/ImmutableDittoHeadersTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,8 @@ public void settingAllKnownHeadersWorksAsExpected() {
235235
KNOWN_PRE_DEFINED_EXTRA_FIELDS_READ_GRANT_OBJECT.formatAsString())
236236
.putHeader(DittoHeaderDefinition.PRE_DEFINED_EXTRA_FIELDS_OBJECT.getKey(),
237237
KNOWN_PRE_DEFINED_EXTRA_FIELDS_OBJECT.formatAsString())
238+
.putHeader(DittoHeaderDefinition.PARTIAL_ACCESS_PATHS.getKey(),
239+
"{\"subjects\":[\"test:subject\"],\"paths\":{\"attributes\":[0],\"features/fluxCompensator/properties/baz\":[0]}}")
238240
.putHeader(DittoHeaderDefinition.EXTERNAL_DRY_RUN.getKey(), String.valueOf(KNOWN_DITTO_EXTERNAL_DRY_RUN))
239241
.putHeader(DittoHeaderDefinition.DIVERT_RESPONSE_TO_CONNECTION.getKey(), KNOWN_DITTO_DIVERT_RESPONSE_TO)
240242
.putHeader(DittoHeaderDefinition.DIVERTED_RESPONSE_FROM_CONNECTION.getKey(), KNOWN_DITTO_DIVERTED_RESPONSE_FROM)
@@ -574,6 +576,20 @@ public void toJsonReturnsExpected() {
574576
KNOWN_PRE_DEFINED_EXTRA_FIELDS_READ_GRANT_OBJECT)
575577
.set(DittoHeaderDefinition.PRE_DEFINED_EXTRA_FIELDS_OBJECT.getKey(),
576578
KNOWN_PRE_DEFINED_EXTRA_FIELDS_OBJECT)
579+
.set(DittoHeaderDefinition.PARTIAL_ACCESS_PATHS.getKey(),
580+
JsonObject.newBuilder()
581+
.set("subjects", JsonArray.newBuilder()
582+
.add("test:subject")
583+
.build())
584+
.set("paths", JsonObject.newBuilder()
585+
.set("attributes", JsonArray.newBuilder()
586+
.add(0)
587+
.build())
588+
.set("features/fluxCompensator/properties/baz", JsonArray.newBuilder()
589+
.add(0)
590+
.build())
591+
.build())
592+
.build())
577593
.set(DittoHeaderDefinition.EXTERNAL_DRY_RUN.getKey(), KNOWN_DITTO_EXTERNAL_DRY_RUN)
578594
.set(DittoHeaderDefinition.PUT_METADATA.getKey(), KNOWN_METADATA_HEADERS.toJson())
579595
.set(DittoHeaderDefinition.GET_METADATA.getKey(), KNOWN_DITTO_GET_METADATA)
@@ -829,6 +845,8 @@ private static Map<String, String> createMapContainingAllKnownHeaders() {
829845
KNOWN_PRE_DEFINED_EXTRA_FIELDS_READ_GRANT_OBJECT.formatAsString());
830846
result.put(DittoHeaderDefinition.PRE_DEFINED_EXTRA_FIELDS_OBJECT.getKey(),
831847
KNOWN_PRE_DEFINED_EXTRA_FIELDS_OBJECT.formatAsString());
848+
result.put(DittoHeaderDefinition.PARTIAL_ACCESS_PATHS.getKey(),
849+
"{\"subjects\":[\"test:subject\"],\"paths\":{\"attributes\":[0],\"features/fluxCompensator/properties/baz\":[0]}}");
832850
result.put(DittoHeaderDefinition.EXTERNAL_DRY_RUN.getKey(),
833851
String.valueOf(KNOWN_DITTO_EXTERNAL_DRY_RUN));
834852
result.put(DittoHeaderDefinition.DIVERT_RESPONSE_TO_CONNECTION.getKey(), KNOWN_DITTO_DIVERT_RESPONSE_TO);

0 commit comments

Comments
 (0)