1919import java .util .Optional ;
2020import java .util .function .Function ;
2121
22+ import org .bson .conversions .Bson ;
2223import org .springframework .data .mongodb .core .mapping .Field ;
2324import org .springframework .data .mongodb .core .query .Collation ;
2425import org .springframework .data .mongodb .core .schema .MongoJsonSchema ;
4142 * @author Mark Paluch
4243 * @author Andreas Zink
4344 * @author Ben Foster
45+ * @author Ross Lawley
4446 */
4547public class CollectionOptions {
4648
@@ -51,10 +53,11 @@ public class CollectionOptions {
5153 private ValidationOptions validationOptions ;
5254 private @ Nullable TimeSeriesOptions timeSeriesOptions ;
5355 private @ Nullable CollectionChangeStreamOptions changeStreamOptions ;
56+ private @ Nullable Bson encryptedFields ;
5457
5558 private CollectionOptions (@ Nullable Long size , @ Nullable Long maxDocuments , @ Nullable Boolean capped ,
5659 @ Nullable Collation collation , ValidationOptions validationOptions , @ Nullable TimeSeriesOptions timeSeriesOptions ,
57- @ Nullable CollectionChangeStreamOptions changeStreamOptions ) {
60+ @ Nullable CollectionChangeStreamOptions changeStreamOptions , @ Nullable Bson encryptedFields ) {
5861
5962 this .maxDocuments = maxDocuments ;
6063 this .size = size ;
@@ -63,6 +66,7 @@ private CollectionOptions(@Nullable Long size, @Nullable Long maxDocuments, @Nul
6366 this .validationOptions = validationOptions ;
6467 this .timeSeriesOptions = timeSeriesOptions ;
6568 this .changeStreamOptions = changeStreamOptions ;
69+ this .encryptedFields = encryptedFields ;
6670 }
6771
6872 /**
@@ -76,7 +80,7 @@ public static CollectionOptions just(Collation collation) {
7680
7781 Assert .notNull (collation , "Collation must not be null" );
7882
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 );
8084 }
8185
8286 /**
@@ -86,7 +90,7 @@ public static CollectionOptions just(Collation collation) {
8690 * @since 2.0
8791 */
8892 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 );
9094 }
9195
9296 /**
@@ -136,7 +140,7 @@ public static CollectionOptions emitChangedRevisions() {
136140 */
137141 public CollectionOptions capped () {
138142 return new CollectionOptions (size , maxDocuments , true , collation , validationOptions , timeSeriesOptions ,
139- changeStreamOptions );
143+ changeStreamOptions , encryptedFields );
140144 }
141145
142146 /**
@@ -148,7 +152,7 @@ public CollectionOptions capped() {
148152 */
149153 public CollectionOptions maxDocuments (long maxDocuments ) {
150154 return new CollectionOptions (size , maxDocuments , capped , collation , validationOptions , timeSeriesOptions ,
151- changeStreamOptions );
155+ changeStreamOptions , encryptedFields );
152156 }
153157
154158 /**
@@ -160,7 +164,7 @@ public CollectionOptions maxDocuments(long maxDocuments) {
160164 */
161165 public CollectionOptions size (long size ) {
162166 return new CollectionOptions (size , maxDocuments , capped , collation , validationOptions , timeSeriesOptions ,
163- changeStreamOptions );
167+ changeStreamOptions , encryptedFields );
164168 }
165169
166170 /**
@@ -172,7 +176,7 @@ public CollectionOptions size(long size) {
172176 */
173177 public CollectionOptions collation (@ Nullable Collation collation ) {
174178 return new CollectionOptions (size , maxDocuments , capped , collation , validationOptions , timeSeriesOptions ,
175- changeStreamOptions );
179+ changeStreamOptions , encryptedFields );
176180 }
177181
178182 /**
@@ -293,7 +297,7 @@ public CollectionOptions validation(ValidationOptions validationOptions) {
293297
294298 Assert .notNull (validationOptions , "ValidationOptions must not be null" );
295299 return new CollectionOptions (size , maxDocuments , capped , collation , validationOptions , timeSeriesOptions ,
296- changeStreamOptions );
300+ changeStreamOptions , encryptedFields );
297301 }
298302
299303 /**
@@ -307,7 +311,7 @@ public CollectionOptions timeSeries(TimeSeriesOptions timeSeriesOptions) {
307311
308312 Assert .notNull (timeSeriesOptions , "TimeSeriesOptions must not be null" );
309313 return new CollectionOptions (size , maxDocuments , capped , collation , validationOptions , timeSeriesOptions ,
310- changeStreamOptions );
314+ changeStreamOptions , encryptedFields );
311315 }
312316
313317 /**
@@ -321,7 +325,19 @@ public CollectionOptions changeStream(CollectionChangeStreamOptions changeStream
321325
322326 Assert .notNull (changeStreamOptions , "ChangeStreamOptions must not be null" );
323327 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 );
325341 }
326342
327343 /**
@@ -392,12 +408,22 @@ public Optional<CollectionChangeStreamOptions> getChangeStreamOptions() {
392408 return Optional .ofNullable (changeStreamOptions );
393409 }
394410
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+
395421 @ Override
396422 public String toString () {
397423 return "CollectionOptions{" + "maxDocuments=" + maxDocuments + ", size=" + size + ", capped=" + capped
398424 + ", 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="
401427 + moderateValidation () + ", warnOnValidationError=" + warnOnValidationError () + ", failOnValidationError="
402428 + failOnValidationError () + '}' ;
403429 }
@@ -431,7 +457,10 @@ public boolean equals(@Nullable Object o) {
431457 if (!ObjectUtils .nullSafeEquals (timeSeriesOptions , that .timeSeriesOptions )) {
432458 return false ;
433459 }
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 );
435464 }
436465
437466 @ Override
@@ -443,6 +472,7 @@ public int hashCode() {
443472 result = 31 * result + ObjectUtils .nullSafeHashCode (validationOptions );
444473 result = 31 * result + ObjectUtils .nullSafeHashCode (timeSeriesOptions );
445474 result = 31 * result + ObjectUtils .nullSafeHashCode (changeStreamOptions );
475+ result = 31 * result + ObjectUtils .nullSafeHashCode (encryptedFields );
446476 return result ;
447477 }
448478
0 commit comments