1
2
3
4
5
6 package dev.metaschema.databind.model.impl;
7
8 import java.util.List;
9
10 import dev.metaschema.core.datatype.markup.MarkupMultiline;
11 import dev.metaschema.core.model.AbstractChoiceInstance;
12 import dev.metaschema.core.model.DefaultChoiceModelBuilder;
13 import dev.metaschema.core.model.IAssemblyInstanceAbsolute;
14 import dev.metaschema.core.model.IContainerModelSupport;
15 import dev.metaschema.core.model.IFieldInstanceAbsolute;
16 import dev.metaschema.core.model.IModelInstanceAbsolute;
17 import dev.metaschema.core.model.IModule;
18 import dev.metaschema.core.model.INamedModelInstanceAbsolute;
19 import dev.metaschema.databind.model.IBoundDefinitionModelAssembly;
20 import dev.metaschema.databind.model.IBoundInstanceModelAssembly;
21 import dev.metaschema.databind.model.IBoundInstanceModelField;
22 import dev.metaschema.databind.model.IBoundInstanceModelNamed;
23 import edu.umd.cs.findbugs.annotations.NonNull;
24 import edu.umd.cs.findbugs.annotations.Nullable;
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 public final class BoundInstanceModelChoice
40 extends AbstractChoiceInstance<
41 IBoundDefinitionModelAssembly,
42 IModelInstanceAbsolute,
43 INamedModelInstanceAbsolute,
44 IFieldInstanceAbsolute,
45 IAssemblyInstanceAbsolute> {
46
47 @NonNull
48 private final String choiceId;
49 @NonNull
50 private final IContainerModelSupport<
51 IModelInstanceAbsolute,
52 INamedModelInstanceAbsolute,
53 IFieldInstanceAbsolute,
54 IAssemblyInstanceAbsolute> modelContainer;
55
56
57
58
59
60
61
62
63
64
65
66
67 public BoundInstanceModelChoice(
68 @NonNull String choiceId,
69 @NonNull IBoundDefinitionModelAssembly parent,
70 @NonNull List<IBoundInstanceModelNamed<?>> instances) {
71 super(parent);
72 this.choiceId = choiceId;
73 this.modelContainer = buildModelContainer(instances);
74 }
75
76 @NonNull
77 private static IContainerModelSupport<
78 IModelInstanceAbsolute,
79 INamedModelInstanceAbsolute,
80 IFieldInstanceAbsolute,
81 IAssemblyInstanceAbsolute> buildModelContainer(
82 @NonNull List<IBoundInstanceModelNamed<?>> instances) {
83 if (instances.isEmpty()) {
84 return IContainerModelSupport.empty();
85 }
86
87 DefaultChoiceModelBuilder<
88 IModelInstanceAbsolute,
89 INamedModelInstanceAbsolute,
90 IFieldInstanceAbsolute,
91 IAssemblyInstanceAbsolute> builder = new DefaultChoiceModelBuilder<>();
92
93 for (IBoundInstanceModelNamed<?> instance : instances) {
94 if (instance instanceof IBoundInstanceModelField) {
95 builder.append((IFieldInstanceAbsolute) instance);
96 } else if (instance instanceof IBoundInstanceModelAssembly) {
97 builder.append((IAssemblyInstanceAbsolute) instance);
98 }
99 }
100
101 return builder.buildChoice();
102 }
103
104
105
106
107
108
109 @NonNull
110 public String getChoiceId() {
111 return choiceId;
112 }
113
114 @Override
115 public IContainerModelSupport<
116 IModelInstanceAbsolute,
117 INamedModelInstanceAbsolute,
118 IFieldInstanceAbsolute,
119 IAssemblyInstanceAbsolute> getModelContainer() {
120 return modelContainer;
121 }
122
123
124
125
126
127
128
129
130 @Override
131 public int getMinOccurs() {
132 return 0;
133 }
134
135 @Override
136 public IModule getContainingModule() {
137 return getContainingDefinition().getContainingModule();
138 }
139
140 @Override
141 @Nullable
142 public MarkupMultiline getRemarks() {
143
144 return null;
145 }
146 }