1
1
package io .javaoperatorsdk .operator .sample .bulkdependent .external ;
2
2
3
- import java .util .HashMap ;
4
- import java .util .Map ;
5
- import java .util .Optional ;
6
- import java .util .Set ;
3
+ import java .util .*;
7
4
import java .util .stream .Collectors ;
8
5
9
6
import io .javaoperatorsdk .operator .api .reconciler .Context ;
10
7
import io .javaoperatorsdk .operator .processing .dependent .*;
11
8
import io .javaoperatorsdk .operator .processing .dependent .external .PollingDependentResource ;
12
9
import io .javaoperatorsdk .operator .processing .event .ResourceID ;
13
- import io .javaoperatorsdk .operator .processing .event .source .CacheKeyMapper ;
14
10
import io .javaoperatorsdk .operator .sample .bulkdependent .BulkDependentTestCustomResource ;
15
11
16
12
public class ExternalBulkDependentResource
@@ -23,15 +19,18 @@ public class ExternalBulkDependentResource
23
19
private ExternalServiceMock externalServiceMock = ExternalServiceMock .getInstance ();
24
20
25
21
public ExternalBulkDependentResource () {
26
- super (ExternalResource .class , CacheKeyMapper . singleResourceCacheKeyMapper () );
22
+ super (ExternalResource .class , ExternalResource :: getId );
27
23
}
28
24
29
25
@ Override
30
26
public Map <ResourceID , Set <ExternalResource >> fetchResources () {
31
- // todo
32
27
Map <ResourceID , Set <ExternalResource >> result = new HashMap <>();
33
28
var resources = externalServiceMock .listResources ();
34
-
29
+ resources .stream ().forEach (er -> {
30
+ var resourceID = toResourceID (er );
31
+ result .putIfAbsent (resourceID , new HashSet <>());
32
+ result .get (resourceID ).add (er );
33
+ });
35
34
return result ;
36
35
}
37
36
@@ -56,24 +55,17 @@ public void deleteBulkResourceWithIndex(BulkDependentTestCustomResource primary,
56
55
@ Override
57
56
public BulkResourceDiscriminatorFactory <ExternalResource , BulkDependentTestCustomResource > bulkResourceDiscriminatorFactory () {
58
57
return index -> (resource , primary , context ) -> {
59
- ExternalResource collect = context .getSecondaryResources (resource ).stream ()
58
+ return context .getSecondaryResources (resource ).stream ()
60
59
.filter (r -> r .getId ().endsWith (EXTERNAL_RESOURCE_NAME_DELIMITER + index ))
61
- .collect (Collectors .collectingAndThen (
62
- Collectors .toList (),
63
- list -> {
64
- if (list .size () > 1 ) {
65
- throw new IllegalStateException ("Found more than 1 object: " + list );
66
- }
67
- return list .get (0 );
68
- }));
69
- return Optional .ofNullable (collect );
60
+ .collect (Collectors .toList ()).stream ().findFirst ();
70
61
};
71
62
}
72
63
73
64
@ Override
74
65
public ExternalResource desired (BulkDependentTestCustomResource primary , int index ,
75
66
Context <BulkDependentTestCustomResource > context ) {
76
- return new ExternalResource (toExternalResourceId (primary , index ), "" + index );
67
+ return new ExternalResource (toExternalResourceId (primary , index ),
68
+ primary .getSpec ().getAdditionalData ());
77
69
}
78
70
79
71
@ Override
@@ -101,4 +93,9 @@ private static String toExternalResourceId(BulkDependentTestCustomResource prima
101
93
primary .getMetadata ().getNamespace () +
102
94
EXTERNAL_RESOURCE_NAME_DELIMITER + i ;
103
95
}
96
+
97
+ private ResourceID toResourceID (ExternalResource externalResource ) {
98
+ var parts = externalResource .getId ().split (EXTERNAL_RESOURCE_NAME_DELIMITER );
99
+ return new ResourceID (parts [0 ], parts [1 ]);
100
+ }
104
101
}
0 commit comments