1
2
3
4
5
6 package dev.metaschema.core.model;
7
8 import java.util.Locale;
9
10 import dev.metaschema.core.datatype.markup.MarkupMultiline;
11 import dev.metaschema.core.util.ObjectUtils;
12 import edu.umd.cs.findbugs.annotations.NonNull;
13 import edu.umd.cs.findbugs.annotations.Nullable;
14
15
16
17
18
19 public interface IChoiceGroupInstance
20 extends IModelInstanceAbsolute, IContainerModelGrouped, IJsonInstance {
21
22
23
24
25
26 int DEFAULT_CHOICE_GROUP_GROUP_AS_MAX_OCCURS = -1;
27
28
29
30
31
32 @NonNull
33 String DEFAULT_JSON_DISCRIMINATOR_PROPERTY_NAME = "object-type";
34
35
36
37
38
39
40 @Override
41 default int getMaxOccurs() {
42 return DEFAULT_CHOICE_GROUP_GROUP_AS_MAX_OCCURS;
43 }
44
45
46
47
48
49
50 @Override
51 default ModelType getModelType() {
52 return ModelType.CHOICE_GROUP;
53 }
54
55 @Override
56 default String getJsonName() {
57 return ObjectUtils.requireNonNull(getGroupAsName(), "Missing group-as name");
58 }
59
60
61
62
63
64
65
66 @NonNull
67 String getJsonDiscriminatorProperty();
68
69 @Override
70 default boolean isEffectiveValueWrappedInXml() {
71 return true;
72 }
73
74
75
76
77
78
79
80
81
82
83 @Nullable
84 String getJsonKeyFlagInstanceName();
85
86
87
88
89
90
91
92
93 @NonNull
94 default INamedModelInstanceGrouped getItemInstance(@NonNull Object item) {
95 throw new UnsupportedOperationException("Method not needed.");
96 }
97
98 @Override
99 default MarkupMultiline getRemarks() {
100
101 return null;
102 }
103
104 @SuppressWarnings("null")
105 @Override
106 default String toCoordinates() {
107 return String.format("%s-instance:%s:%s/%s@%d",
108 getModelType().toString().toLowerCase(Locale.ROOT),
109 getContainingDefinition().getContainingModule().getShortName(),
110 getContainingDefinition().getName(),
111 getGroupAsName(),
112 hashCode());
113 }
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128 @Override
129 default <CONTEXT, RESULT> RESULT accept(@NonNull IModelElementVisitor<CONTEXT, RESULT> visitor, CONTEXT context) {
130 return visitor.visitChoiceGroupInstance(this, context);
131 }
132 }