Skip to content

Commit ce73aa2

Browse files
authored
Merge pull request #10 from asdf-format/eslavich-get-optional
Add convenience methods for fetching optional values
2 parents 9bb661d + 2ae003b commit ce73aa2

2 files changed

Lines changed: 66 additions & 0 deletions

File tree

asdf-core/src/main/java/org/asdfformat/asdf/node/AsdfNode.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.time.Instant;
88
import java.util.List;
99
import java.util.Map;
10+
import java.util.Optional;
1011

1112

1213
/**
@@ -138,6 +139,34 @@ public interface AsdfNode extends Iterable<AsdfNode> {
138139
*/
139140
AsdfNode get(AsdfNode key);
140141

142+
/**
143+
* Get an optional mapping value as AsdfNode, indexed by String key.
144+
* @param key mapping key
145+
* @return value
146+
*/
147+
Optional<AsdfNode> getOptional(String key);
148+
149+
/**
150+
* Get an optional sequence value or mapping value as AsdfNode, indexed by long key.
151+
* @param key sequence index or mapping key
152+
* @return value
153+
*/
154+
Optional<AsdfNode> getOptional(long key);
155+
156+
/**
157+
* Get an optional mapping value as AsdfNode, indexed by boolean key.
158+
* @param key mapping key
159+
* @return value
160+
*/
161+
Optional<AsdfNode> getOptional(boolean key);
162+
163+
/**
164+
* Get an optional mapping value as AsdfNode, indexed by AsdfNode key.
165+
* @param key mapping key
166+
* @return value
167+
*/
168+
Optional<AsdfNode> getOptional(AsdfNode key);
169+
141170
/**
142171
* Get a NUMBER mapping value as BigDecimal, indexed by String key.
143172
* @param key mapping key

asdf-core/src/main/java/org/asdfformat/asdf/node/impl/AsdfNodeBase.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.util.Iterator;
1212
import java.util.List;
1313
import java.util.Map;
14+
import java.util.Optional;
1415

1516
public abstract class AsdfNodeBase implements AsdfNode {
1617

@@ -99,6 +100,42 @@ public AsdfNode get(final AsdfNode key) {
99100
throw new IllegalStateException(makeGetErrorMessage("AsdfNode"));
100101
}
101102

103+
@Override
104+
public Optional<AsdfNode> getOptional(final String key) {
105+
if (containsKey(key)) {
106+
return Optional.of(get(key));
107+
} else {
108+
return Optional.empty();
109+
}
110+
}
111+
112+
@Override
113+
public Optional<AsdfNode> getOptional(final long key) {
114+
if (containsKey(key)) {
115+
return Optional.of(get(key));
116+
} else {
117+
return Optional.empty();
118+
}
119+
}
120+
121+
@Override
122+
public Optional<AsdfNode> getOptional(final boolean key) {
123+
if (containsKey(key)) {
124+
return Optional.of(get(key));
125+
} else {
126+
return Optional.empty();
127+
}
128+
}
129+
130+
@Override
131+
public Optional<AsdfNode> getOptional(final AsdfNode key) {
132+
if (containsKey(key)) {
133+
return Optional.of(get(key));
134+
} else {
135+
return Optional.empty();
136+
}
137+
}
138+
102139
@Override
103140
public BigDecimal getBigDecimal(final String key) {
104141
return get(key).asBigDecimal();

0 commit comments

Comments
 (0)