1
2
3
4
5
6 package dev.metaschema.core.metapath.item.atomic;
7
8 import dev.metaschema.core.datatype.markup.IMarkupString;
9 import dev.metaschema.core.datatype.markup.MarkupDataTypeProvider;
10 import dev.metaschema.core.metapath.function.InvalidValueForCastFunctionException;
11 import dev.metaschema.core.metapath.type.IAtomicOrUnionType;
12 import dev.metaschema.core.metapath.type.InvalidTypeMetapathException;
13 import edu.umd.cs.findbugs.annotations.NonNull;
14
15
16
17
18 public interface IMarkupItem extends IAnyAtomicItem {
19
20
21
22
23
24 @NonNull
25 static IAtomicOrUnionType<IMarkupItem> type() {
26 return MarkupDataTypeProvider.MARKUP_TYPE;
27 }
28
29 @Override
30 default IAtomicOrUnionType<? extends IMarkupItem> getType() {
31 return type();
32 }
33
34
35
36
37
38
39
40
41
42
43
44 @NonNull
45 static IMarkupItem cast(@NonNull IAnyAtomicItem item) {
46 try {
47 return item instanceof IMarkupItem
48 ? (IMarkupItem) item
49 : IMarkupMultilineItem.valueOf(item.asString());
50 } catch (IllegalStateException | InvalidTypeMetapathException ex) {
51
52 throw new InvalidValueForCastFunctionException(ex);
53 }
54 }
55
56
57
58
59
60
61 @NonNull
62 IMarkupString<?> asMarkup();
63
64 @Override
65 default IMarkupItem castAsType(IAnyAtomicItem item) {
66 return cast(item);
67 }
68
69
70
71
72
73
74
75
76
77 default int compareTo(@NonNull IMarkupItem item) {
78 return asString().compareTo(item.asString());
79 }
80 }