1
2
3
4
5
6 package dev.metaschema.core.testsupport.builder;
7
8 import static org.mockito.Mockito.doReturn;
9
10 import dev.metaschema.core.datatype.IDataTypeAdapter;
11 import dev.metaschema.core.datatype.adapter.MetaschemaDataTypeProvider;
12 import dev.metaschema.core.model.IFlagDefinition;
13 import dev.metaschema.core.model.IFlagInstance;
14 import dev.metaschema.core.model.IModelDefinition;
15 import dev.metaschema.core.model.IModule;
16 import dev.metaschema.core.model.INamedModelElement;
17 import dev.metaschema.core.model.ModelType;
18 import dev.metaschema.core.model.constraint.ValueConstraintSet;
19 import dev.metaschema.core.util.ObjectUtils;
20 import edu.umd.cs.findbugs.annotations.NonNull;
21 import edu.umd.cs.findbugs.annotations.Nullable;
22
23
24
25
26 final class FlagBuilder
27 extends AbstractMetaschemaBuilder<IFlagBuilder>
28 implements IFlagBuilder {
29
30 private IDataTypeAdapter<?> dataTypeAdapter;
31 private Object defaultValue = null;
32 private boolean required;
33
34 FlagBuilder() {
35
36 }
37
38 @Override
39 public FlagBuilder reset() {
40 this.dataTypeAdapter = MetaschemaDataTypeProvider.DEFAULT_DATA_TYPE;
41 this.defaultValue = null;
42 this.required = IFlagInstance.DEFAULT_FLAG_REQUIRED;
43 return this;
44 }
45
46 @Override
47 public FlagBuilder required(boolean required) {
48 this.required = required;
49 return this;
50 }
51
52 @Override
53 public FlagBuilder dataTypeAdapter(@NonNull IDataTypeAdapter<?> dataTypeAdapter) {
54 this.dataTypeAdapter = dataTypeAdapter;
55 return this;
56 }
57
58 @Override
59 public FlagBuilder defaultValue(@NonNull Object defaultValue) {
60 this.defaultValue = defaultValue;
61 return this;
62 }
63
64 @Override
65 @NonNull
66 public IFlagInstance toInstance(
67 @NonNull IModelDefinition parent,
68 @NonNull IFlagDefinition definition) {
69 validate();
70
71 IFlagInstance retval = mock(IFlagInstance.class);
72
73 applyNamedInstance(retval, definition, parent);
74
75 doReturn(required).when(retval).isRequired();
76 return retval;
77 }
78
79
80
81
82
83
84 @Override
85 @NonNull
86 public IFlagDefinition toDefinition() {
87 return toDefinition(null);
88 }
89
90 @Override
91 @NonNull
92 public IFlagDefinition toDefinition(@Nullable IModule module) {
93 validate();
94
95 IFlagDefinition retval = mock(IFlagDefinition.class);
96 applyDefinition(retval, module);
97
98 doReturn(new ValueConstraintSet(ObjectUtils.notNull(getSource()))).when(retval).getConstraintSupport();
99 doReturn(dataTypeAdapter).when(retval).getJavaTypeAdapter();
100 doReturn(defaultValue).when(retval).getDefaultValue();
101
102 return retval;
103 }
104
105 @Override
106 protected void applyNamed(INamedModelElement element) {
107 super.applyNamed(element);
108 doReturn(ModelType.FLAG).when(element).getModelType();
109 }
110 }