1
2
3
4
5
6 package dev.metaschema.core.metapath.item.atomic;
7
8 import dev.metaschema.core.datatype.adapter.MetaschemaDataTypeProvider;
9 import dev.metaschema.core.metapath.function.InvalidValueForCastFunctionException;
10 import dev.metaschema.core.metapath.item.atomic.impl.QNameItemImpl;
11 import dev.metaschema.core.metapath.type.IAtomicOrUnionType;
12 import dev.metaschema.core.metapath.type.InvalidTypeMetapathException;
13 import dev.metaschema.core.qname.EQNameFactory;
14 import dev.metaschema.core.qname.IEnhancedQName;
15 import edu.umd.cs.findbugs.annotations.NonNull;
16
17
18
19
20 public interface IQNameItem extends IAnyAtomicItem {
21
22
23
24
25
26 @NonNull
27 static IAtomicOrUnionType<IQNameItem> type() {
28 return MetaschemaDataTypeProvider.QNAME.getItemType();
29 }
30
31 @Override
32 default IAtomicOrUnionType<IQNameItem> getType() {
33 return type();
34 }
35
36
37
38
39
40
41
42
43
44 @NonNull
45 static IQNameItem valueOf(@NonNull String value) {
46 return valueOf(EQNameFactory.instance().parseUriQualifiedName(value));
47 }
48
49
50
51
52
53
54
55
56 @NonNull
57 static IQNameItem valueOf(@NonNull IEnhancedQName value) {
58 return new QNameItemImpl(value);
59 }
60
61
62
63
64
65
66
67
68
69
70
71 @NonNull
72 static IQNameItem cast(@NonNull IAnyAtomicItem item) {
73 try {
74 return item instanceof IQNameItem
75 ? (IQNameItem) item
76 : valueOf(item.asString());
77 } catch (IllegalStateException | InvalidTypeMetapathException ex) {
78
79 throw new InvalidValueForCastFunctionException(ex);
80 }
81 }
82
83 @Override
84 default IQNameItem castAsType(IAnyAtomicItem item) {
85 return cast(item);
86 }
87
88
89
90
91
92
93 @NonNull
94 IEnhancedQName toEnhancedQName();
95
96
97
98
99
100
101
102
103
104 default int compareTo(@NonNull IQNameItem item) {
105 return toEnhancedQName().compareTo(item.toEnhancedQName());
106 }
107 }