Skip to content

Commit a1d4651

Browse files
marythoughtclaude
andauthored
feat(sdk): add shorthand enum constants for policy types (#357)
## Summary - Add `PolicyEnums` utility class with readable constant aliases for verbose protobuf enum names so developers can write `PolicyEnums.OPERATOR_IN` instead of `SubjectMappingOperatorEnum.SUBJECT_MAPPING_OPERATOR_ENUM_IN` - Update all examples to use the new shorthand constants via static imports - Companion to opentdf/platform#3408 (Go SDK equivalent) ### Constants added | Shorthand | Full proto name | |---|---| | `OPERATOR_IN` | `SUBJECT_MAPPING_OPERATOR_ENUM_IN` | | `OPERATOR_NOT_IN` | `SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN` | | `OPERATOR_IN_CONTAINS` | `SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS` | | `BOOLEAN_AND` | `CONDITION_BOOLEAN_TYPE_ENUM_AND` | | `BOOLEAN_OR` | `CONDITION_BOOLEAN_TYPE_ENUM_OR` | | `RULE_ALL_OF` | `ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF` | | `RULE_ANY_OF` | `ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF` | | `RULE_HIERARCHY` | `ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY` | | `STATE_ACTIVE` | `ACTIVE_STATE_ENUM_ACTIVE` | | `STATE_INACTIVE` | `ACTIVE_STATE_ENUM_INACTIVE` | | `STATE_ANY` | `ACTIVE_STATE_ENUM_ANY` | ### Before / After ```java // Before ConditionGroup.newBuilder() .setBooleanOperator(ConditionBooleanTypeEnum.CONDITION_BOOLEAN_TYPE_ENUM_AND) .addConditions(Condition.newBuilder() .setOperator(SubjectMappingOperatorEnum.SUBJECT_MAPPING_OPERATOR_ENUM_IN)); // After import static io.opentdf.platform.sdk.PolicyEnums.*; ConditionGroup.newBuilder() .setBooleanOperator(BOOLEAN_AND) .addConditions(Condition.newBuilder() .setOperator(OPERATOR_IN)); ``` ## Test plan - [x] `mvn compile` passes (full project including examples) - [x] `mvn test -Dtest=PolicyEnumsTest` — 4 tests, all pass - [ ] CI passes 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Introduced simplified static constants for policy configuration, making attribute rules, operators, and boolean conditions more readable and intuitive to use. * **Documentation** * Updated example code to demonstrate the new simplified policy constants. * **Tests** * Added test coverage validating the new policy configuration constants. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Mary Dickson <mary.dickson@virtru.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 1d2fde6 commit a1d4651

5 files changed

Lines changed: 138 additions & 16 deletions

File tree

examples/src/main/java/io/opentdf/platform/CreateAttribute.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package io.opentdf.platform;
22

33
import com.connectrpc.ResponseMessageKt;
4-
import io.opentdf.platform.policy.AttributeRuleTypeEnum;
54
import io.opentdf.platform.policy.Namespace;
65
import io.opentdf.platform.policy.attributes.CreateAttributeRequest;
76
import io.opentdf.platform.policy.attributes.CreateAttributeResponse;
87
import io.opentdf.platform.policy.namespaces.GetNamespaceRequest;
98
import io.opentdf.platform.sdk.*;
9+
import static io.opentdf.platform.sdk.PolicyEnums.*;
1010
import org.apache.logging.log4j.LogManager;
1111
import org.apache.logging.log4j.Logger;
1212

@@ -51,9 +51,7 @@ public static void main(String[] args) {
5151
CreateAttributeRequest.newBuilder()
5252
.setNamespaceId(namespace.getId())
5353
.setName("test-attribute")
54-
.setRule(
55-
AttributeRuleTypeEnum.forNumber(
56-
AttributeRuleTypeEnum.ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF_VALUE))
54+
.setRule(RULE_ALL_OF)
5755
.addAllValues(Arrays.asList("test1", "test2"))
5856
.build();
5957

examples/src/main/java/io/opentdf/platform/CreateSubjectConditionSet.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22

33
import com.connectrpc.ResponseMessageKt;
44
import io.opentdf.platform.policy.Condition;
5-
import io.opentdf.platform.policy.ConditionBooleanTypeEnum;
65
import io.opentdf.platform.policy.ConditionGroup;
76
import io.opentdf.platform.policy.SubjectConditionSet;
8-
import io.opentdf.platform.policy.SubjectMappingOperatorEnum;
97
import io.opentdf.platform.policy.SubjectSet;
8+
import static io.opentdf.platform.sdk.PolicyEnums.*;
109
import io.opentdf.platform.policy.subjectmapping.CreateSubjectConditionSetRequest;
1110
import io.opentdf.platform.policy.subjectmapping.CreateSubjectConditionSetResponse;
1211
import io.opentdf.platform.policy.subjectmapping.SubjectConditionSetCreate;
@@ -39,12 +38,11 @@ public static void main(String[] args) {
3938
SubjectSet.newBuilder()
4039
.addConditionGroups(
4140
ConditionGroup.newBuilder()
42-
.setBooleanOperator(ConditionBooleanTypeEnum.CONDITION_BOOLEAN_TYPE_ENUM_AND)
41+
.setBooleanOperator(BOOLEAN_AND)
4342
.addConditions(
4443
Condition.newBuilder()
4544
.setSubjectExternalSelectorValue(".myfield")
46-
.setOperator(
47-
SubjectMappingOperatorEnum.SUBJECT_MAPPING_OPERATOR_ENUM_IN)
45+
.setOperator(OPERATOR_IN)
4846
.addSubjectExternalValues("myvalue")));
4947

5048
CreateSubjectConditionSetRequest createSubjectConditionSetRequest =

examples/src/main/java/io/opentdf/platform/CreateSubjectMapping.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,12 @@
44
import io.opentdf.platform.policy.Action;
55
import io.opentdf.platform.policy.Attribute;
66
import io.opentdf.platform.policy.Condition;
7-
import io.opentdf.platform.policy.ConditionBooleanTypeEnum;
87
import io.opentdf.platform.policy.ConditionGroup;
98
import io.opentdf.platform.policy.Namespace;
109
import io.opentdf.platform.policy.SubjectConditionSet;
1110
import io.opentdf.platform.policy.SubjectMapping;
12-
import io.opentdf.platform.policy.SubjectMappingOperatorEnum;
1311
import io.opentdf.platform.policy.SubjectSet;
12+
import static io.opentdf.platform.sdk.PolicyEnums.*;
1413
import io.opentdf.platform.policy.attributes.GetAttributeRequest;
1514
import io.opentdf.platform.policy.namespaces.GetNamespaceRequest;
1615
import io.opentdf.platform.policy.subjectmapping.CreateSubjectConditionSetRequest;
@@ -100,14 +99,11 @@ public static void main(String[] args) {
10099
SubjectSet.newBuilder()
101100
.addConditionGroups(
102101
ConditionGroup.newBuilder()
103-
.setBooleanOperator(
104-
ConditionBooleanTypeEnum.CONDITION_BOOLEAN_TYPE_ENUM_AND)
102+
.setBooleanOperator(BOOLEAN_AND)
105103
.addConditions(
106104
Condition.newBuilder()
107105
.setSubjectExternalSelectorValue(".myfield")
108-
.setOperator(
109-
SubjectMappingOperatorEnum
110-
.SUBJECT_MAPPING_OPERATOR_ENUM_IN)
106+
.setOperator(OPERATOR_IN)
111107
.addSubjectExternalValues("myvalue")))))
112108
.build();
113109

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package io.opentdf.platform.sdk;
2+
3+
import io.opentdf.platform.common.ActiveStateEnum;
4+
import io.opentdf.platform.policy.AttributeRuleTypeEnum;
5+
import io.opentdf.platform.policy.ConditionBooleanTypeEnum;
6+
import io.opentdf.platform.policy.SubjectMappingOperatorEnum;
7+
8+
/**
9+
* Shorthand constants for commonly used policy enum values.
10+
*
11+
* <p>These aliases provide a more readable alternative to the verbose protobuf
12+
* enum names. Use them anywhere the corresponding enum type is accepted.
13+
*
14+
* <pre>{@code
15+
* // Before
16+
* Condition.newBuilder()
17+
* .setOperator(SubjectMappingOperatorEnum.SUBJECT_MAPPING_OPERATOR_ENUM_IN);
18+
*
19+
* // After (with static import)
20+
* import static io.opentdf.platform.sdk.PolicyEnums.*;
21+
* Condition.newBuilder()
22+
* .setOperator(OPERATOR_IN);
23+
* }</pre>
24+
*/
25+
public final class PolicyEnums {
26+
27+
private PolicyEnums() {}
28+
29+
// --- Subject Mapping Operators ---
30+
31+
public static final SubjectMappingOperatorEnum OPERATOR_IN =
32+
SubjectMappingOperatorEnum.SUBJECT_MAPPING_OPERATOR_ENUM_IN;
33+
34+
public static final SubjectMappingOperatorEnum OPERATOR_NOT_IN =
35+
SubjectMappingOperatorEnum.SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN;
36+
37+
public static final SubjectMappingOperatorEnum OPERATOR_IN_CONTAINS =
38+
SubjectMappingOperatorEnum.SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS;
39+
40+
// --- Condition Boolean Types ---
41+
42+
public static final ConditionBooleanTypeEnum BOOLEAN_AND =
43+
ConditionBooleanTypeEnum.CONDITION_BOOLEAN_TYPE_ENUM_AND;
44+
45+
public static final ConditionBooleanTypeEnum BOOLEAN_OR =
46+
ConditionBooleanTypeEnum.CONDITION_BOOLEAN_TYPE_ENUM_OR;
47+
48+
// --- Attribute Rule Types ---
49+
50+
public static final AttributeRuleTypeEnum RULE_ALL_OF =
51+
AttributeRuleTypeEnum.ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF;
52+
53+
public static final AttributeRuleTypeEnum RULE_ANY_OF =
54+
AttributeRuleTypeEnum.ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF;
55+
56+
public static final AttributeRuleTypeEnum RULE_HIERARCHY =
57+
AttributeRuleTypeEnum.ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY;
58+
59+
// --- Active States ---
60+
61+
public static final ActiveStateEnum STATE_ACTIVE =
62+
ActiveStateEnum.ACTIVE_STATE_ENUM_ACTIVE;
63+
64+
public static final ActiveStateEnum STATE_INACTIVE =
65+
ActiveStateEnum.ACTIVE_STATE_ENUM_INACTIVE;
66+
67+
public static final ActiveStateEnum STATE_ANY =
68+
ActiveStateEnum.ACTIVE_STATE_ENUM_ANY;
69+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package io.opentdf.platform.sdk;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import io.opentdf.platform.common.ActiveStateEnum;
6+
import io.opentdf.platform.policy.AttributeRuleTypeEnum;
7+
import io.opentdf.platform.policy.ConditionBooleanTypeEnum;
8+
import io.opentdf.platform.policy.SubjectMappingOperatorEnum;
9+
import org.junit.jupiter.api.Test;
10+
11+
class PolicyEnumsTest {
12+
13+
@Test
14+
void operatorConstants() {
15+
assertEquals(
16+
SubjectMappingOperatorEnum.SUBJECT_MAPPING_OPERATOR_ENUM_IN,
17+
PolicyEnums.OPERATOR_IN);
18+
assertEquals(
19+
SubjectMappingOperatorEnum.SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN,
20+
PolicyEnums.OPERATOR_NOT_IN);
21+
assertEquals(
22+
SubjectMappingOperatorEnum.SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS,
23+
PolicyEnums.OPERATOR_IN_CONTAINS);
24+
}
25+
26+
@Test
27+
void booleanConstants() {
28+
assertEquals(
29+
ConditionBooleanTypeEnum.CONDITION_BOOLEAN_TYPE_ENUM_AND,
30+
PolicyEnums.BOOLEAN_AND);
31+
assertEquals(
32+
ConditionBooleanTypeEnum.CONDITION_BOOLEAN_TYPE_ENUM_OR,
33+
PolicyEnums.BOOLEAN_OR);
34+
}
35+
36+
@Test
37+
void ruleConstants() {
38+
assertEquals(
39+
AttributeRuleTypeEnum.ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF,
40+
PolicyEnums.RULE_ALL_OF);
41+
assertEquals(
42+
AttributeRuleTypeEnum.ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF,
43+
PolicyEnums.RULE_ANY_OF);
44+
assertEquals(
45+
AttributeRuleTypeEnum.ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY,
46+
PolicyEnums.RULE_HIERARCHY);
47+
}
48+
49+
@Test
50+
void stateConstants() {
51+
assertEquals(
52+
ActiveStateEnum.ACTIVE_STATE_ENUM_ACTIVE,
53+
PolicyEnums.STATE_ACTIVE);
54+
assertEquals(
55+
ActiveStateEnum.ACTIVE_STATE_ENUM_INACTIVE,
56+
PolicyEnums.STATE_INACTIVE);
57+
assertEquals(
58+
ActiveStateEnum.ACTIVE_STATE_ENUM_ANY,
59+
PolicyEnums.STATE_ANY);
60+
}
61+
}

0 commit comments

Comments
 (0)