Skip to content

Commit 8625b27

Browse files
committed
feat: add arbitrary attributes to Context
1 parent c850f8f commit 8625b27

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java

+10
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,14 @@ default <T> Optional<T> getSecondaryResource(Class<T> expectedType) {
1111
}
1212

1313
<T> Optional<T> getSecondaryResource(Class<T> expectedType, String eventSourceName);
14+
15+
<T> Optional<T> get(Object key, Class<T> expectedType);
16+
17+
default <T> T getMandatory(Object key, Class<T> expectedType) {
18+
return get(key, expectedType).orElseThrow(() -> new IllegalStateException(
19+
"Mandatory attribute (key: " + key + ", type: " + expectedType.getName()
20+
+ ") is missing or not of the expected type"));
21+
}
22+
23+
Optional put(Object key, Object value);
1424
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContext.java

+18
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
package io.javaoperatorsdk.operator.api.reconciler;
22

3+
import java.util.Map;
34
import java.util.Optional;
45

56
import io.fabric8.kubernetes.api.model.HasMetadata;
67
import io.javaoperatorsdk.operator.processing.Controller;
8+
import java.util.concurrent.ConcurrentHashMap;
79

810
public class DefaultContext<P extends HasMetadata> implements Context {
911

1012
private final RetryInfo retryInfo;
1113
private final Controller<P> controller;
1214
private final P primaryResource;
15+
private final ConcurrentHashMap attributes = new ConcurrentHashMap();
1316

1417
public DefaultContext(RetryInfo retryInfo, Controller<P> controller, P primaryResource) {
1518
this.retryInfo = retryInfo;
@@ -28,4 +31,19 @@ public <T> Optional<T> getSecondaryResource(Class<T> expectedType, String eventS
2831
.getResourceEventSourceFor(expectedType, eventSourceName)
2932
.flatMap(es -> es.getAssociated(primaryResource));
3033
}
34+
35+
@Override
36+
public <T> Optional<T> get(Object key, Class<T> expectedType) {
37+
return Optional.ofNullable(attributes.get(key))
38+
.filter(expectedType::isInstance)
39+
.map(expectedType::cast);
40+
}
41+
42+
@Override
43+
public Optional put(Object key, Object value) {
44+
if (value == null) {
45+
return Optional.ofNullable(attributes.remove(key));
46+
}
47+
return Optional.ofNullable(attributes.put(key, value));
48+
}
3149
}

0 commit comments

Comments
 (0)