1
2
3
4
5
6 package dev.metaschema.databind.model;
7
8 import java.io.IOException;
9 import java.lang.reflect.Field;
10
11 import dev.metaschema.core.model.IBoundObject;
12 import dev.metaschema.core.model.IChoiceGroupInstance;
13 import dev.metaschema.core.model.IFeatureContainerModelGrouped;
14 import dev.metaschema.core.qname.IEnhancedQName;
15 import dev.metaschema.core.util.ObjectUtils;
16 import dev.metaschema.databind.io.BindingException;
17 import dev.metaschema.databind.model.impl.InstanceModelChoiceGroup;
18 import dev.metaschema.databind.model.info.IItemReadHandler;
19 import dev.metaschema.databind.model.info.IItemWriteHandler;
20 import edu.umd.cs.findbugs.annotations.NonNull;
21 import edu.umd.cs.findbugs.annotations.Nullable;
22
23
24
25
26 public interface IBoundInstanceModelChoiceGroup
27 extends IBoundInstanceModel<IBoundObject>, IFeatureContainerModelGrouped<
28 IBoundInstanceModelGroupedNamed,
29 IBoundInstanceModelGroupedField,
30 IBoundInstanceModelGroupedAssembly>,
31 IChoiceGroupInstance {
32
33
34
35
36
37
38
39
40
41
42 @NonNull
43 static IBoundInstanceModelChoiceGroup newInstance(
44 @NonNull Field field,
45 @NonNull IBoundDefinitionModelAssembly containingDefinition) {
46 return InstanceModelChoiceGroup.newInstance(field, containingDefinition);
47 }
48
49 @Override
50 default String getJsonName() {
51
52 return ObjectUtils.requireNonNull(getGroupAsName());
53 }
54
55 @Override
56 @NonNull
57 IBoundDefinitionModelAssembly getOwningDefinition();
58
59 @Override
60 default IBoundDefinitionModelAssembly getContainingDefinition() {
61 return getOwningDefinition();
62 }
63
64
65
66
67
68
69
70
71
72 @Nullable
73 IBoundInstanceModelGroupedNamed getGroupedModelInstance(@NonNull Class<?> clazz);
74
75
76
77
78
79
80
81
82
83
84
85 @Nullable
86 IBoundInstanceModelGroupedNamed getGroupedModelInstance(@NonNull IEnhancedQName name);
87
88
89
90
91
92
93
94
95
96
97
98 @Nullable
99 IBoundInstanceModelGroupedNamed getGroupedModelInstance(@NonNull String discriminator);
100
101
102
103
104
105
106
107
108
109 @Override
110 @NonNull
111 default IBoundInstanceModelGroupedNamed getItemInstance(Object item) {
112 return ObjectUtils.requireNonNull(getGroupedModelInstance(item.getClass()));
113 }
114
115 @Override
116 default IBoundObject readItem(IBoundObject parent, IItemReadHandler handler) throws IOException {
117 return handler.readChoiceGroupItem(ObjectUtils.requireNonNull(parent, "parent"), this);
118 }
119
120 @Override
121 default void writeItem(IBoundObject item, IItemWriteHandler handler) throws IOException {
122 handler.writeChoiceGroupItem(item, this);
123 }
124
125 @Override
126 default IBoundObject deepCopyItem(IBoundObject item, IBoundObject parentInstance) throws BindingException {
127 IBoundInstanceModelGroupedNamed itemInstance = getItemInstance(item);
128 return itemInstance.deepCopyItem(item, parentInstance);
129 }
130
131 @Override
132 default boolean canHandleXmlQName(@NonNull IEnhancedQName qname) {
133 return getGroupedModelInstance(qname) != null;
134 }
135 }