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