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