1
2
3
4
5
6 package dev.metaschema.core.testsupport.builder;
7
8 import java.util.ArrayList;
9 import java.util.Arrays;
10 import java.util.List;
11 import java.util.function.Consumer;
12
13 import dev.metaschema.core.model.ISource;
14 import dev.metaschema.core.model.constraint.IConstraintSet;
15 import dev.metaschema.core.model.constraint.MetaConstraintSet;
16 import dev.metaschema.core.util.ObjectUtils;
17 import edu.umd.cs.findbugs.annotations.NonNull;
18
19
20
21
22
23 public class ConstraintSetBuilder implements IConstraintSetBuilder {
24 private ISource source;
25 @NonNull
26 private final List<IConstraintSet> imports = new ArrayList<>();
27 @NonNull
28 private final List<ContextBuilder> contexts = new ArrayList<>();
29
30
31
32
33 public ConstraintSetBuilder() {
34
35 }
36
37 @Override
38 @NonNull
39 public IConstraintSetBuilder source(@NonNull ISource source) {
40 this.source = source;
41 return this;
42 }
43
44 @Override
45 @NonNull
46 public IConstraintSetBuilder imports(@NonNull IConstraintSet... imports) {
47 this.imports.addAll(Arrays.asList(imports));
48 return this;
49 }
50
51 @Override
52 @NonNull
53 public IConstraintSetBuilder context(@NonNull Consumer<IContextBuilder> contextConfigurer) {
54 ContextBuilder contextBuilder = new ContextBuilder(
55 ObjectUtils.requireNonNull(source, "source must be set before adding contexts"));
56 contextConfigurer.accept(contextBuilder);
57 this.contexts.add(contextBuilder);
58 return this;
59 }
60
61 @Override
62 @NonNull
63 public IConstraintSet build() {
64 ISource constraintSource = ObjectUtils.requireNonNull(source, "source must be set");
65
66
67 List<MetaConstraintSet.Context> builtContexts = new ArrayList<>();
68 for (ContextBuilder contextBuilder : contexts) {
69 builtContexts.add(contextBuilder.build(null));
70 }
71
72 return new MetaConstraintSet(constraintSource, imports, builtContexts);
73 }
74 }