1
2
3
4
5
6 package dev.metaschema.core.metapath.item.atomic;
7
8 import java.nio.ByteBuffer;
9
10 import dev.metaschema.core.datatype.adapter.MetaschemaDataTypeProvider;
11 import dev.metaschema.core.metapath.function.InvalidValueForCastFunctionException;
12 import dev.metaschema.core.metapath.item.atomic.impl.HexBinaryItem;
13 import dev.metaschema.core.metapath.item.atomic.impl.IBinaryItem;
14 import dev.metaschema.core.metapath.type.IAtomicOrUnionType;
15 import dev.metaschema.core.metapath.type.InvalidTypeMetapathException;
16 import edu.umd.cs.findbugs.annotations.NonNull;
17
18
19
20
21 public interface IHexBinaryItem extends IBinaryItem {
22
23
24
25
26
27 @NonNull
28 static IAtomicOrUnionType<IHexBinaryItem> type() {
29 return MetaschemaDataTypeProvider.HEX_BINARY.getItemType();
30 }
31
32 @Override
33 default IAtomicOrUnionType<IHexBinaryItem> getType() {
34 return type();
35 }
36
37
38
39
40
41
42
43
44
45
46
47 @NonNull
48 static IHexBinaryItem valueOf(@NonNull String value) {
49 try {
50 return valueOf(MetaschemaDataTypeProvider.BASE64.parse(value));
51 } catch (IllegalArgumentException ex) {
52 throw new InvalidTypeMetapathException(
53 null,
54 String.format("The value starting with '%s' is not a valid hex encoded character sequence. %s",
55 value.substring(0, Math.min(value.length(), 200)),
56 ex.getLocalizedMessage()),
57 ex);
58 }
59 }
60
61
62
63
64
65
66
67
68
69
70
71
72
73 @NonNull
74 static IHexBinaryItem valueOf(@NonNull ByteBuffer buffer) {
75 return new HexBinaryItem(buffer);
76 }
77
78
79
80
81
82
83
84
85
86
87
88 @NonNull
89 static IHexBinaryItem cast(@NonNull IAnyAtomicItem item) {
90 try {
91 return item instanceof IHexBinaryItem
92 ? (IHexBinaryItem) item
93 : valueOf(item.asString());
94 } catch (IllegalStateException | InvalidTypeMetapathException ex) {
95
96 throw new InvalidValueForCastFunctionException(ex);
97 }
98 }
99
100 @Override
101 default IHexBinaryItem castAsType(IAnyAtomicItem item) {
102 return cast(item);
103 }
104
105
106
107
108
109
110
111
112
113 default int compareTo(@NonNull IHexBinaryItem item) {
114 return asByteBuffer().compareTo(item.asByteBuffer());
115 }
116 }