generated from amazon-archives/__template_Apache-2.0
-
Notifications
You must be signed in to change notification settings - Fork 31
Expand file tree
/
Copy pathEntityUID.java
More file actions
131 lines (110 loc) · 3.55 KB
/
EntityUID.java
File metadata and controls
131 lines (110 loc) · 3.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
* Copyright 2022-2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.cedarpolicy.value;
import java.util.Optional;
import java.util.Objects;
import java.util.function.Supplier;
import com.cedarpolicy.serializer.JsonEUID;
/**
* Represents a Cedar Entity UID. An entity UID contains both the entity type and a unique
* identifier for the entity formatted as <code>TYPE::"ID"</code>.
*/
public final class EntityUID extends Value {
private final EntityTypeName type;
private final EntityIdentifier id;
private final Supplier<String> euidRepr;
static {
System.load(System.getenv("CEDAR_JAVA_FFI_LIB"));
}
/**
* Construct an EntityUID from a tyep name and an id
* @param type the Entity Type of this EUID
* @param id the id portion of the EUID
*/
public EntityUID(EntityTypeName type, EntityIdentifier id) {
this.type = type;
this.id = id;
this.euidRepr = new Supplier<String>() {
String uidRepr = null;
public String get() {
if (uidRepr == null) {
uidRepr = getEUIDRepr(type, id);
}
return uidRepr;
}
};
}
/**
* Construct an EntityUID from a type name and an id
* @param type the Entity Type of this EUID
* @param id the id portion of the EUID
*/
public EntityUID(EntityTypeName type, String id) {
this(type, new EntityIdentifier(id));
}
/**
* Get the Type of this EUID
* @return The EntityTypeName portion of this EUID
*/
public EntityTypeName getType() {
return type;
}
/**
* Get the ID of this EUID
* @return The EntityIdentifier portion of this EUID
*/
public EntityIdentifier getId() {
return id;
}
@Override
public String toString() {
return euidRepr.get();
}
@Override
public boolean equals(Object o) {
if (o == null) {
return false;
} if (o == this) {
return true;
} else {
try {
var rhs = (EntityUID) o;
return this.type.equals(rhs.type) && this.id.equals(rhs.id);
} catch (ClassCastException e) {
return false;
}
}
}
@Override
public int hashCode() {
return Objects.hash(type, id);
}
@Override
public String toCedarExpr() {
return euidRepr.get();
}
public static Optional<EntityUID> parse(String src) {
return parseEntityUID(src);
}
public JsonEUID asJson() {
return new JsonEUID(type.toString(), id.toString());
}
public static Optional<EntityUID> parseFromJson(JsonEUID euid) {
return EntityTypeName.parse(euid.type).map(type -> new EntityUID(type, new EntityIdentifier(euid.id)));
}
private static native Optional<EntityUID> parseEntityUID(String src);
private static native String getEUIDRepr(EntityTypeName type, EntityIdentifier id);
}