19
19
import java .util .Optional ;
20
20
import java .util .function .Function ;
21
21
22
+ import org .bson .conversions .Bson ;
22
23
import org .springframework .data .mongodb .core .mapping .Field ;
23
24
import org .springframework .data .mongodb .core .query .Collation ;
24
25
import org .springframework .data .mongodb .core .schema .MongoJsonSchema ;
@@ -51,10 +52,11 @@ public class CollectionOptions {
51
52
private ValidationOptions validationOptions ;
52
53
private @ Nullable TimeSeriesOptions timeSeriesOptions ;
53
54
private @ Nullable CollectionChangeStreamOptions changeStreamOptions ;
55
+ private @ Nullable Bson encryptedFields ;
54
56
55
57
private CollectionOptions (@ Nullable Long size , @ Nullable Long maxDocuments , @ Nullable Boolean capped ,
56
58
@ Nullable Collation collation , ValidationOptions validationOptions , @ Nullable TimeSeriesOptions timeSeriesOptions ,
57
- @ Nullable CollectionChangeStreamOptions changeStreamOptions ) {
59
+ @ Nullable CollectionChangeStreamOptions changeStreamOptions , @ Nullable Bson encryptedFields ) {
58
60
59
61
this .maxDocuments = maxDocuments ;
60
62
this .size = size ;
@@ -63,6 +65,7 @@ private CollectionOptions(@Nullable Long size, @Nullable Long maxDocuments, @Nul
63
65
this .validationOptions = validationOptions ;
64
66
this .timeSeriesOptions = timeSeriesOptions ;
65
67
this .changeStreamOptions = changeStreamOptions ;
68
+ this .encryptedFields = encryptedFields ;
66
69
}
67
70
68
71
/**
@@ -76,7 +79,7 @@ public static CollectionOptions just(Collation collation) {
76
79
77
80
Assert .notNull (collation , "Collation must not be null" );
78
81
79
- return new CollectionOptions (null , null , null , collation , ValidationOptions .none (), null , null );
82
+ return new CollectionOptions (null , null , null , collation , ValidationOptions .none (), null , null , null );
80
83
}
81
84
82
85
/**
@@ -86,7 +89,7 @@ public static CollectionOptions just(Collation collation) {
86
89
* @since 2.0
87
90
*/
88
91
public static CollectionOptions empty () {
89
- return new CollectionOptions (null , null , null , null , ValidationOptions .none (), null , null );
92
+ return new CollectionOptions (null , null , null , null , ValidationOptions .none (), null , null , null );
90
93
}
91
94
92
95
/**
@@ -136,7 +139,7 @@ public static CollectionOptions emitChangedRevisions() {
136
139
*/
137
140
public CollectionOptions capped () {
138
141
return new CollectionOptions (size , maxDocuments , true , collation , validationOptions , timeSeriesOptions ,
139
- changeStreamOptions );
142
+ changeStreamOptions , encryptedFields );
140
143
}
141
144
142
145
/**
@@ -148,7 +151,7 @@ public CollectionOptions capped() {
148
151
*/
149
152
public CollectionOptions maxDocuments (long maxDocuments ) {
150
153
return new CollectionOptions (size , maxDocuments , capped , collation , validationOptions , timeSeriesOptions ,
151
- changeStreamOptions );
154
+ changeStreamOptions , encryptedFields );
152
155
}
153
156
154
157
/**
@@ -160,7 +163,7 @@ public CollectionOptions maxDocuments(long maxDocuments) {
160
163
*/
161
164
public CollectionOptions size (long size ) {
162
165
return new CollectionOptions (size , maxDocuments , capped , collation , validationOptions , timeSeriesOptions ,
163
- changeStreamOptions );
166
+ changeStreamOptions , encryptedFields );
164
167
}
165
168
166
169
/**
@@ -172,7 +175,7 @@ public CollectionOptions size(long size) {
172
175
*/
173
176
public CollectionOptions collation (@ Nullable Collation collation ) {
174
177
return new CollectionOptions (size , maxDocuments , capped , collation , validationOptions , timeSeriesOptions ,
175
- changeStreamOptions );
178
+ changeStreamOptions , encryptedFields );
176
179
}
177
180
178
181
/**
@@ -293,7 +296,7 @@ public CollectionOptions validation(ValidationOptions validationOptions) {
293
296
294
297
Assert .notNull (validationOptions , "ValidationOptions must not be null" );
295
298
return new CollectionOptions (size , maxDocuments , capped , collation , validationOptions , timeSeriesOptions ,
296
- changeStreamOptions );
299
+ changeStreamOptions , encryptedFields );
297
300
}
298
301
299
302
/**
@@ -307,7 +310,7 @@ public CollectionOptions timeSeries(TimeSeriesOptions timeSeriesOptions) {
307
310
308
311
Assert .notNull (timeSeriesOptions , "TimeSeriesOptions must not be null" );
309
312
return new CollectionOptions (size , maxDocuments , capped , collation , validationOptions , timeSeriesOptions ,
310
- changeStreamOptions );
313
+ changeStreamOptions , encryptedFields );
311
314
}
312
315
313
316
/**
@@ -321,7 +324,19 @@ public CollectionOptions changeStream(CollectionChangeStreamOptions changeStream
321
324
322
325
Assert .notNull (changeStreamOptions , "ChangeStreamOptions must not be null" );
323
326
return new CollectionOptions (size , maxDocuments , capped , collation , validationOptions , timeSeriesOptions ,
324
- changeStreamOptions );
327
+ changeStreamOptions , encryptedFields );
328
+ }
329
+
330
+ /**
331
+ * Create new {@link CollectionOptions} with the given {@code encryptedFields}.
332
+ *
333
+ * @param encryptedFields can be null
334
+ * @return new instance of {@link CollectionOptions}.
335
+ * @since QERange
336
+ */
337
+ public CollectionOptions encryptedFields (@ Nullable Bson encryptedFields ) {
338
+ return new CollectionOptions (size , maxDocuments , capped , collation , validationOptions , timeSeriesOptions ,
339
+ changeStreamOptions , encryptedFields );
325
340
}
326
341
327
342
/**
@@ -392,12 +407,22 @@ public Optional<CollectionChangeStreamOptions> getChangeStreamOptions() {
392
407
return Optional .ofNullable (changeStreamOptions );
393
408
}
394
409
410
+ /**
411
+ * Get the {@code encryptedFields} if available.
412
+ *
413
+ * @return {@link Optional#empty()} if not specified.
414
+ * @since QERange
415
+ */
416
+ public Optional <Bson > getEncryptedFields () {
417
+ return Optional .ofNullable (encryptedFields );
418
+ }
419
+
395
420
@ Override
396
421
public String toString () {
397
422
return "CollectionOptions{" + "maxDocuments=" + maxDocuments + ", size=" + size + ", capped=" + capped
398
423
+ ", collation=" + collation + ", validationOptions=" + validationOptions + ", timeSeriesOptions="
399
- + timeSeriesOptions + ", changeStreamOptions=" + changeStreamOptions + ", disableValidation="
400
- + disableValidation () + ", strictValidation=" + strictValidation () + ", moderateValidation="
424
+ + timeSeriesOptions + ", changeStreamOptions=" + changeStreamOptions + ", encryptedFields=" + encryptedFields
425
+ + ", disableValidation=" + disableValidation () + ", strictValidation=" + strictValidation () + ", moderateValidation="
401
426
+ moderateValidation () + ", warnOnValidationError=" + warnOnValidationError () + ", failOnValidationError="
402
427
+ failOnValidationError () + '}' ;
403
428
}
@@ -431,7 +456,10 @@ public boolean equals(@Nullable Object o) {
431
456
if (!ObjectUtils .nullSafeEquals (timeSeriesOptions , that .timeSeriesOptions )) {
432
457
return false ;
433
458
}
434
- return ObjectUtils .nullSafeEquals (changeStreamOptions , that .changeStreamOptions );
459
+ if (!ObjectUtils .nullSafeEquals (changeStreamOptions , that .changeStreamOptions )) {
460
+ return false ;
461
+ }
462
+ return ObjectUtils .nullSafeEquals (encryptedFields , that .encryptedFields );
435
463
}
436
464
437
465
@ Override
@@ -443,6 +471,7 @@ public int hashCode() {
443
471
result = 31 * result + ObjectUtils .nullSafeHashCode (validationOptions );
444
472
result = 31 * result + ObjectUtils .nullSafeHashCode (timeSeriesOptions );
445
473
result = 31 * result + ObjectUtils .nullSafeHashCode (changeStreamOptions );
474
+ result = 31 * result + ObjectUtils .nullSafeHashCode (encryptedFields );
446
475
return result ;
447
476
}
448
477
0 commit comments