21
21
22
22
import org .springframework .data .mongodb .core .query .Collation ;
23
23
import org .springframework .data .mongodb .core .schema .MongoJsonSchema ;
24
+ import org .springframework .data .mongodb .core .validation .ValidatorDefinition ;
24
25
import org .springframework .data .util .Optionals ;
25
26
import org .springframework .lang .Nullable ;
26
27
import org .springframework .util .Assert ;
34
35
* @author Thomas Risberg
35
36
* @author Christoph Strobl
36
37
* @author Mark Paluch
38
+ * @author Andreas Zink
37
39
*/
38
40
public class CollectionOptions {
39
41
@@ -144,7 +146,11 @@ public CollectionOptions collation(@Nullable Collation collation) {
144
146
* @since 2.1
145
147
*/
146
148
public CollectionOptions schema (@ Nullable MongoJsonSchema schema ) {
147
- return validation (new Validator (schema , validator .validationLevel , validator .validationAction ));
149
+ return validation (new Validator (schema , null , validator .validationLevel , validator .validationAction ));
150
+ }
151
+
152
+ public CollectionOptions validatorDefinition (@ Nullable ValidatorDefinition definition ) {
153
+ return validation (new Validator (null , definition , validator .validationLevel , validator .validationAction ));
148
154
}
149
155
150
156
/**
@@ -213,7 +219,7 @@ public CollectionOptions failOnValidationError() {
213
219
public CollectionOptions schemaValidationLevel (ValidationLevel validationLevel ) {
214
220
215
221
Assert .notNull (validationLevel , "ValidationLevel must not be null!" );
216
- return validation (new Validator (validator .schema , validationLevel , validator .validationAction ));
222
+ return validation (new Validator (validator .schema , validator . validatorDefinition , validationLevel , validator .validationAction ));
217
223
}
218
224
219
225
/**
@@ -227,7 +233,7 @@ public CollectionOptions schemaValidationLevel(ValidationLevel validationLevel)
227
233
public CollectionOptions schemaValidationAction (ValidationAction validationAction ) {
228
234
229
235
Assert .notNull (validationAction , "ValidationAction must not be null!" );
230
- return validation (new Validator (validator .schema , validator .validationLevel , validationAction ));
236
+ return validation (new Validator (validator .schema , validator .validatorDefinition , validator . validationLevel , validationAction ));
231
237
}
232
238
233
239
/**
@@ -295,14 +301,16 @@ public Optional<Validator> getValidator() {
295
301
* Encapsulation of Validator options.
296
302
*
297
303
* @author Christoph Strobl
304
+ * @author Andreas Zink
298
305
* @since 2.1
299
306
*/
300
307
@ RequiredArgsConstructor
301
308
public static class Validator {
302
309
303
- private static final Validator NONE = new Validator (null , null , null );
310
+ private static final Validator NONE = new Validator (null , null , null , null );
304
311
305
312
private final @ Nullable MongoJsonSchema schema ;
313
+ private final @ Nullable ValidatorDefinition validatorDefinition ;
306
314
private final @ Nullable ValidationLevel validationLevel ;
307
315
private final @ Nullable ValidationAction validationAction ;
308
316
@@ -324,6 +332,10 @@ public Optional<MongoJsonSchema> getSchema() {
324
332
return Optional .ofNullable (schema );
325
333
}
326
334
335
+ public Optional <ValidatorDefinition > getValidatorDefinition () {
336
+ return Optional .ofNullable (validatorDefinition );
337
+ }
338
+
327
339
/**
328
340
* Get the {@code validationLevel} to apply.
329
341
*
@@ -346,7 +358,7 @@ public Optional<ValidationAction> getValidationAction() {
346
358
* @return {@literal true} if no arguments set.
347
359
*/
348
360
boolean isEmpty () {
349
- return !Optionals .isAnyPresent (getSchema (), getValidationAction (), getValidationLevel ());
361
+ return !Optionals .isAnyPresent (getSchema (), getValidatorDefinition (), getValidationAction (), getValidationLevel ());
350
362
}
351
363
}
352
364
}
0 commit comments