1
2 package dev.metaschema.core.metapath.item.node;
3
4 import java.net.URI;
5 import java.util.Collection;
6 import java.util.Collections;
7 import java.util.List;
8 import java.util.stream.Stream;
9
10 import dev.metaschema.core.metapath.DynamicContext;
11 import dev.metaschema.core.metapath.StaticContext;
12 import dev.metaschema.core.metapath.format.IPathFormatter;
13 import dev.metaschema.core.metapath.item.ICollectionValue;
14 import dev.metaschema.core.metapath.type.IAtomicOrUnionType;
15 import dev.metaschema.core.metapath.type.IItemType;
16 import dev.metaschema.core.metapath.type.IKindTest;
17 import dev.metaschema.core.model.IFlagDefinition;
18 import dev.metaschema.core.model.IFlagInstance;
19 import dev.metaschema.core.qname.IEnhancedQName;
20 import edu.umd.cs.findbugs.annotations.NonNull;
21 import edu.umd.cs.findbugs.annotations.Nullable;
22
23
24
25
26
27 public interface IFlagNodeItem
28 extends IDefinitionNodeItem<IFlagDefinition, IFlagInstance>, IAtomicValuedNodeItem {
29
30
31
32
33
34 @NonNull
35 static IItemType type() {
36 return IItemType.flag();
37 }
38
39 @Override
40 default NodeItemKind getNodeItemKind() {
41 return NodeItemKind.FLAG;
42 }
43
44 @Override
45 default NodeType getNodeType() {
46 return NodeType.FLAG;
47 }
48
49 @Override
50 default IFlagNodeItem getNodeItem() {
51 return this;
52 }
53
54 @Override
55 IFlagDefinition getDefinition();
56
57 @Override
58 IFlagInstance getInstance();
59
60 @Override
61 default IKindTest<IFlagNodeItem> getType() {
62 StaticContext staticContext = getStaticContext();
63 return IItemType.flag(
64 getQName(),
65 getDefinition().getDefinitionQName().toEQName(staticContext),
66 staticContext);
67 }
68
69 @Override
70 default IAtomicOrUnionType<?> getValueItemType() {
71 return getDefinition().getJavaTypeAdapter().getItemType();
72 }
73
74 @Override
75 @Nullable
76 default URI getBaseUri() {
77 INodeItem parent = getParentNodeItem();
78 return parent == null ? null : parent.getBaseUri();
79 }
80
81
82
83
84
85 @SuppressWarnings("null")
86 @Override
87 default Collection<? extends IFlagNodeItem> getFlags() {
88
89 return Collections.emptyList();
90 }
91
92
93
94
95 @Override
96 default IFlagNodeItem getFlagByName(@NonNull IEnhancedQName name) {
97
98 return null;
99 }
100
101
102
103
104
105 @SuppressWarnings("null")
106 @Override
107 @NonNull
108 default Stream<? extends IFlagNodeItem> flags() {
109
110 return Stream.empty();
111 }
112
113
114
115
116
117 @SuppressWarnings("null")
118 @Override
119 @NonNull
120 default Collection<? extends List<? extends IModelNodeItem<?, ?>>> getModelItems() {
121
122 return Collections.emptyList();
123 }
124
125
126
127
128 @SuppressWarnings("null")
129 @Override
130 default List<? extends IModelNodeItem<?, ?>> getModelItemsByName(IEnhancedQName name) {
131
132 return Collections.emptyList();
133 }
134
135
136
137
138
139 @SuppressWarnings("null")
140 @NonNull
141 @Override
142 default Stream<? extends IModelNodeItem<?, ?>> modelItems() {
143
144 return Stream.empty();
145 }
146
147 @Override
148 @NonNull
149 default String format(@NonNull IPathFormatter formatter) {
150 return formatter.formatFlag(this);
151 }
152
153 @Override
154 default <CONTEXT, RESULT> RESULT accept(@NonNull INodeItemVisitor<CONTEXT, RESULT> visitor, CONTEXT context) {
155 return visitor.visitFlag(this, context);
156 }
157
158 @Override
159 default boolean deepEquals(ICollectionValue other, DynamicContext dynamicContext) {
160 return other instanceof IFlagNodeItem
161 && NodeComparators.compareAsFlag(this, (IFlagNodeItem) other, dynamicContext);
162 }
163 }