1
2
3
4
5
6 package dev.metaschema.core.metapath.item.atomic;
7
8 import java.time.Duration;
9 import java.time.ZoneOffset;
10
11 import dev.metaschema.core.datatype.adapter.MetaschemaDataTypeProvider;
12 import dev.metaschema.core.metapath.function.DateTimeFunctionException;
13 import dev.metaschema.core.metapath.function.InvalidValueForCastFunctionException;
14 import dev.metaschema.core.metapath.item.atomic.impl.DayTimeDurationItemImpl;
15 import dev.metaschema.core.metapath.type.IAtomicOrUnionType;
16 import dev.metaschema.core.metapath.type.InvalidTypeMetapathException;
17 import dev.metaschema.core.util.ObjectUtils;
18 import edu.umd.cs.findbugs.annotations.NonNull;
19
20
21
22
23
24 public interface IDayTimeDurationItem extends IDurationItem {
25
26
27
28
29
30 @NonNull
31 static IAtomicOrUnionType<IDayTimeDurationItem> type() {
32 return MetaschemaDataTypeProvider.DAY_TIME_DURATION.getItemType();
33 }
34
35 @Override
36 default IAtomicOrUnionType<IDayTimeDurationItem> getType() {
37 return type();
38 }
39
40
41
42
43
44
45
46
47
48
49
50
51 @NonNull
52 static IDayTimeDurationItem valueOf(@NonNull String value) {
53 try {
54 return valueOf(MetaschemaDataTypeProvider.DAY_TIME_DURATION.parse(value));
55 } catch (IllegalArgumentException ex) {
56 throw new InvalidTypeMetapathException(
57 null,
58 String.format("Invalid day/time value '%s',",
59 value),
60 ex);
61 }
62 }
63
64
65
66
67
68
69
70
71 @NonNull
72 static IDayTimeDurationItem valueOf(@NonNull Duration value) {
73 return new DayTimeDurationItemImpl(value);
74 }
75
76
77
78
79
80
81 @NonNull
82 Duration asDuration();
83
84
85
86
87
88
89 default long asSeconds() {
90 return asDuration().toSeconds();
91 }
92
93
94
95
96
97
98 @NonNull
99 default IDayTimeDurationItem negate() {
100 return valueOf(ObjectUtils.notNull(asDuration().negated()));
101 }
102
103
104
105
106
107
108
109
110
111
112
113 @NonNull
114 static IDayTimeDurationItem cast(@NonNull IAnyAtomicItem item) {
115 try {
116 return item instanceof IDayTimeDurationItem
117 ? (IDayTimeDurationItem) item
118 : valueOf(item.asString());
119 } catch (IllegalStateException | InvalidTypeMetapathException ex) {
120
121 throw new InvalidValueForCastFunctionException(ex);
122 }
123 }
124
125 @Override
126 default IDayTimeDurationItem castAsType(IAnyAtomicItem item) {
127 return cast(item);
128 }
129
130
131
132
133
134
135
136
137
138 default int compareTo(@NonNull IDayTimeDurationItem item) {
139 return asDuration().compareTo(item.asDuration());
140
141 }
142
143
144
145
146
147
148
149
150
151
152 @NonNull
153 ZoneOffset asZoneOffset();
154 }