1
2 package dev.metaschema.core.metapath.item.node;
3
4 import java.net.URI;
5
6 import dev.metaschema.core.metapath.DynamicContext;
7 import dev.metaschema.core.metapath.StaticContext;
8 import dev.metaschema.core.metapath.format.IPathFormatter;
9 import dev.metaschema.core.metapath.item.ICollectionValue;
10 import dev.metaschema.core.metapath.type.IAtomicOrUnionType;
11 import dev.metaschema.core.metapath.type.IItemType;
12 import dev.metaschema.core.metapath.type.IKindTest;
13 import dev.metaschema.core.model.IFieldDefinition;
14 import dev.metaschema.core.model.IFieldInstance;
15 import edu.umd.cs.findbugs.annotations.NonNull;
16 import edu.umd.cs.findbugs.annotations.Nullable;
17
18
19
20
21 public interface IFieldNodeItem
22 extends IModelNodeItem<IFieldDefinition, IFieldInstance>,
23 IAtomicValuedNodeItem {
24
25
26
27
28
29 @NonNull
30 static IItemType type() {
31 return IItemType.field();
32 }
33
34 @Override
35 default NodeItemKind getNodeItemKind() {
36 return NodeItemKind.FIELD;
37 }
38
39 @Override
40 default NodeType getNodeType() {
41 return NodeType.FIELD;
42 }
43
44 @Override
45 default IFieldNodeItem getNodeItem() {
46 return this;
47 }
48
49 @Override
50 default IKindTest<IFieldNodeItem> getType() {
51 StaticContext staticContext = getStaticContext();
52 return IItemType.field(
53 getQName(),
54 getDefinition().getDefinitionQName().toEQName(staticContext),
55 staticContext);
56 }
57
58 @Override
59 default IAtomicOrUnionType<?> getValueItemType() {
60 return getDefinition().getJavaTypeAdapter().getItemType();
61 }
62
63 @Override
64 @Nullable
65 default URI getBaseUri() {
66 INodeItem parent = getParentNodeItem();
67 return parent == null ? null : parent.getBaseUri();
68 }
69
70 @Override
71 @NonNull
72 default String format(@NonNull IPathFormatter formatter) {
73 return formatter.formatField(this);
74 }
75
76 @Override
77 default <CONTEXT, RESULT> RESULT accept(@NonNull INodeItemVisitor<CONTEXT, RESULT> visitor, CONTEXT context) {
78 return visitor.visitField(this, context);
79 }
80
81 @Override
82 default boolean deepEquals(ICollectionValue other, DynamicContext dynamicContext) {
83 return other instanceof IFieldNodeItem
84 && NodeComparators.compareNodeItem(this, (IFieldNodeItem) other, dynamicContext);
85 }
86 }