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 ;
@@ -51,10 +52,11 @@ public class CollectionOptions {
5152 private ValidationOptions validationOptions ;
5253 private @ Nullable TimeSeriesOptions timeSeriesOptions ;
5354 private @ Nullable CollectionChangeStreamOptions changeStreamOptions ;
55+ private @ Nullable Bson encryptedFields ;
5456
5557 private CollectionOptions (@ Nullable Long size , @ Nullable Long maxDocuments , @ Nullable Boolean capped ,
5658 @ Nullable Collation collation , ValidationOptions validationOptions , @ Nullable TimeSeriesOptions timeSeriesOptions ,
57- @ Nullable CollectionChangeStreamOptions changeStreamOptions ) {
59+ @ Nullable CollectionChangeStreamOptions changeStreamOptions , @ Nullable Bson encryptedFields ) {
5860
5961 this .maxDocuments = maxDocuments ;
6062 this .size = size ;
@@ -63,6 +65,7 @@ private CollectionOptions(@Nullable Long size, @Nullable Long maxDocuments, @Nul
6365 this .validationOptions = validationOptions ;
6466 this .timeSeriesOptions = timeSeriesOptions ;
6567 this .changeStreamOptions = changeStreamOptions ;
68+ this .encryptedFields = encryptedFields ;
6669 }
6770
6871 /**
@@ -76,7 +79,7 @@ public static CollectionOptions just(Collation collation) {
7679
7780 Assert .notNull (collation , "Collation must not be null" );
7881
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 );
8083 }
8184
8285 /**
@@ -86,7 +89,7 @@ public static CollectionOptions just(Collation collation) {
8689 * @since 2.0
8790 */
8891 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 );
9093 }
9194
9295 /**
@@ -136,7 +139,7 @@ public static CollectionOptions emitChangedRevisions() {
136139 */
137140 public CollectionOptions capped () {
138141 return new CollectionOptions (size , maxDocuments , true , collation , validationOptions , timeSeriesOptions ,
139- changeStreamOptions );
142+ changeStreamOptions , encryptedFields );
140143 }
141144
142145 /**
@@ -148,7 +151,7 @@ public CollectionOptions capped() {
148151 */
149152 public CollectionOptions maxDocuments (long maxDocuments ) {
150153 return new CollectionOptions (size , maxDocuments , capped , collation , validationOptions , timeSeriesOptions ,
151- changeStreamOptions );
154+ changeStreamOptions , encryptedFields );
152155 }
153156
154157 /**
@@ -160,7 +163,7 @@ public CollectionOptions maxDocuments(long maxDocuments) {
160163 */
161164 public CollectionOptions size (long size ) {
162165 return new CollectionOptions (size , maxDocuments , capped , collation , validationOptions , timeSeriesOptions ,
163- changeStreamOptions );
166+ changeStreamOptions , encryptedFields );
164167 }
165168
166169 /**
@@ -172,7 +175,7 @@ public CollectionOptions size(long size) {
172175 */
173176 public CollectionOptions collation (@ Nullable Collation collation ) {
174177 return new CollectionOptions (size , maxDocuments , capped , collation , validationOptions , timeSeriesOptions ,
175- changeStreamOptions );
178+ changeStreamOptions , encryptedFields );
176179 }
177180
178181 /**
@@ -293,7 +296,7 @@ public CollectionOptions validation(ValidationOptions validationOptions) {
293296
294297 Assert .notNull (validationOptions , "ValidationOptions must not be null" );
295298 return new CollectionOptions (size , maxDocuments , capped , collation , validationOptions , timeSeriesOptions ,
296- changeStreamOptions );
299+ changeStreamOptions , encryptedFields );
297300 }
298301
299302 /**
@@ -307,7 +310,7 @@ public CollectionOptions timeSeries(TimeSeriesOptions timeSeriesOptions) {
307310
308311 Assert .notNull (timeSeriesOptions , "TimeSeriesOptions must not be null" );
309312 return new CollectionOptions (size , maxDocuments , capped , collation , validationOptions , timeSeriesOptions ,
310- changeStreamOptions );
313+ changeStreamOptions , encryptedFields );
311314 }
312315
313316 /**
@@ -321,7 +324,19 @@ public CollectionOptions changeStream(CollectionChangeStreamOptions changeStream
321324
322325 Assert .notNull (changeStreamOptions , "ChangeStreamOptions must not be null" );
323326 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 );
325340 }
326341
327342 /**
@@ -392,12 +407,22 @@ public Optional<CollectionChangeStreamOptions> getChangeStreamOptions() {
392407 return Optional .ofNullable (changeStreamOptions );
393408 }
394409
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+
395420 @ Override
396421 public String toString () {
397422 return "CollectionOptions{" + "maxDocuments=" + maxDocuments + ", size=" + size + ", capped=" + capped
398423 + ", 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="
401426 + moderateValidation () + ", warnOnValidationError=" + warnOnValidationError () + ", failOnValidationError="
402427 + failOnValidationError () + '}' ;
403428 }
@@ -431,7 +456,10 @@ public boolean equals(@Nullable Object o) {
431456 if (!ObjectUtils .nullSafeEquals (timeSeriesOptions , that .timeSeriesOptions )) {
432457 return false ;
433458 }
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 );
435463 }
436464
437465 @ Override
@@ -443,6 +471,7 @@ public int hashCode() {
443471 result = 31 * result + ObjectUtils .nullSafeHashCode (validationOptions );
444472 result = 31 * result + ObjectUtils .nullSafeHashCode (timeSeriesOptions );
445473 result = 31 * result + ObjectUtils .nullSafeHashCode (changeStreamOptions );
474+ result = 31 * result + ObjectUtils .nullSafeHashCode (encryptedFields );
446475 return result ;
447476 }
448477
0 commit comments