@@ -22,24 +22,25 @@ public abstract class AbstractDependentResource<R, P extends HasMetadata>
22
22
23
23
protected final boolean creatable = this instanceof Creator ;
24
24
protected final boolean updatable = this instanceof Updater ;
25
+ protected final boolean bulk = this instanceof BulkDependentResource ;
25
26
26
27
protected Creator <R , P > creator ;
27
28
protected Updater <R , P > updater ;
29
+ protected BulkDependentResource <R , P > bulkDependentResource ;
28
30
29
31
protected List <ResourceDiscriminator <R , P >> resourceDiscriminator = new ArrayList <>(1 );
30
- // used just for bulk creation
31
- protected BulkResourceDiscriminatorFactory <R , P > bulkResourceDiscriminatorFactory ;
32
32
33
33
@ SuppressWarnings ("unchecked" )
34
34
public AbstractDependentResource () {
35
35
creator = creatable ? (Creator <R , P >) this : null ;
36
36
updater = updatable ? (Updater <R , P >) this : null ;
37
+ bulkDependentResource = bulk ? (BulkDependentResource <R , P >) this : null ;
37
38
}
38
39
39
40
@ Override
40
41
public ReconcileResult <R > reconcile (P primary , Context <P > context ) {
41
- var count = count (primary , context ). orElse ( 1 ) ;
42
- if (isBulkResourceCreation ( primary , context ) ) {
42
+ var count = bulk ? bulkDependentResource . count (primary , context ) : 1 ;
43
+ if (bulk ) {
43
44
cleanupBulkResourcesIfRequired (count , resourceDiscriminator .size (), primary , context );
44
45
adjustDiscriminators (count );
45
46
}
@@ -59,23 +60,19 @@ private void cleanupBulkResourcesIfRequired(int targetCount, int actualCount, P
59
60
for (int i = targetCount ; i < actualCount ; i ++) {
60
61
var resource = getSecondaryResourceIndexAware (primary , i , context );
61
62
var index = i ;
62
- resource .ifPresent (r -> {
63
- deleteBulkResourceWithIndex (primary , r , index , context );
64
- });
63
+ resource .ifPresent (
64
+ r -> bulkDependentResource .deleteBulkResourceWithIndex (primary , r , index , context ));
65
65
}
66
66
}
67
67
68
- protected void deleteBulkResourceWithIndex (P primary , R resource , int i , Context <P > context ) {
69
- throw new IllegalStateException ("Implement if handling bulk resources." );
70
- }
71
-
72
68
private void adjustDiscriminators (int count ) {
73
69
if (resourceDiscriminator .size () == count ) {
74
70
return ;
75
71
}
76
72
if (resourceDiscriminator .size () < count ) {
77
73
for (int i = resourceDiscriminator .size (); i < count ; i ++) {
78
- resourceDiscriminator .add (bulkResourceDiscriminatorFactory .createResourceDiscriminator (i ));
74
+ resourceDiscriminator .add (bulkDependentResource .bulkResourceDiscriminatorFactory ()
75
+ .createResourceDiscriminator (i ));
79
76
}
80
77
}
81
78
if (resourceDiscriminator .size () > count ) {
@@ -98,7 +95,7 @@ protected ReconcileResult<R> reconcileIndexAware(P primary, int i, Context<P> co
98
95
final var actual = maybeActual .get ();
99
96
if (updatable ) {
100
97
final Matcher .Result <R > match ;
101
- if (isBulkResourceCreation ( primary , context ) ) {
98
+ if (bulk ) {
102
99
match = updater .match (actual , primary , i , context );
103
100
} else {
104
101
match = updater .match (actual , primary , context );
@@ -124,7 +121,7 @@ protected ReconcileResult<R> reconcileIndexAware(P primary, int i, Context<P> co
124
121
}
125
122
126
123
private R desiredIndexAware (P primary , int i , Context <P > context ) {
127
- return isBulkResourceCreation ( primary , context ) ? desired (primary , i , context )
124
+ return bulk ? desired (primary , i , context )
128
125
: desired (primary , context );
129
126
}
130
127
@@ -142,7 +139,7 @@ protected Optional<R> getSecondaryResourceIndexAware(P primary, int index, Conte
142
139
throw new IllegalStateException (
143
140
"Handling resources in bulk bot no resource discriminators set." );
144
141
}
145
- if (!isBulkResourceCreation ( primary , context ) ) {
142
+ if (!bulk ) {
146
143
return getSecondaryResource (primary , context );
147
144
}
148
145
@@ -207,7 +204,7 @@ protected R desired(P primary, Context<P> context) {
207
204
}
208
205
209
206
protected R desired (P primary , int index , Context <P > context ) {
210
- if (!isBulkResourceCreation ( primary , context ) ) {
207
+ if (!bulk ) {
211
208
return desired (primary , context );
212
209
} else {
213
210
throw new IllegalStateException (
@@ -222,30 +219,4 @@ public AbstractDependentResource<R, P> setResourceDiscriminator(
222
219
}
223
220
return this ;
224
221
}
225
-
226
- /**
227
- * @param primary resource
228
- * @param context actual context
229
- * @return empty optional if it's not a bulk resource management, number of instances otherwise.
230
- */
231
- protected Optional <Integer > count (P primary , Context <P > context ) {
232
- return Optional .empty ();
233
- }
234
-
235
- /**
236
- * Override in case the count() is a more heavy
237
- */
238
- protected boolean isBulkResourceCreation (P primary , Context <P > context ) {
239
- return count (primary , context ).isPresent ();
240
- }
241
-
242
- public BulkResourceDiscriminatorFactory <R , P > getBulkResourceDiscriminatorFactory () {
243
- return bulkResourceDiscriminatorFactory ;
244
- }
245
-
246
- public AbstractDependentResource <R , P > setBulkResourceDiscriminatorFactory (
247
- BulkResourceDiscriminatorFactory <R , P > bulkResourceDiscriminatorFactory ) {
248
- this .bulkResourceDiscriminatorFactory = bulkResourceDiscriminatorFactory ;
249
- return this ;
250
- }
251
222
}
0 commit comments