Skip to content

Commit 23f5be5

Browse files
committed
Add more getter types for time
1 parent 73e3cc4 commit 23f5be5

File tree

10 files changed

+343
-0
lines changed

10 files changed

+343
-0
lines changed

src/main/java/com/coditory/quark/config/AuditableConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import org.jetbrains.annotations.NotNull;
44

5+
import java.util.Arrays;
56
import java.util.List;
67
import java.util.Map;
78
import java.util.Map.Entry;
@@ -10,6 +11,7 @@
1011
import java.util.stream.Collectors;
1112

1213
import static com.coditory.quark.config.ConfigRemoveOptions.removeEmptyParents;
14+
import static com.coditory.quark.config.Preconditions.expectNonNull;
1315

1416
public final class AuditableConfig extends ConfigDecorator {
1517
private static final Object USED_MARKER = new Object();

src/main/java/com/coditory/quark/config/Config.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.jetbrains.annotations.Nullable;
55

66
import java.util.LinkedHashMap;
7+
import java.util.List;
78
import java.util.Map;
89
import java.util.Objects;
910
import java.util.Optional;
@@ -88,13 +89,29 @@ default AuditableConfig auditable() {
8889
return AuditableConfig.of(this);
8990
}
9091

92+
default <T> T mapAuditableSubConfigOrNull(@NotNull String path, @NotNull Function<AuditableConfig, T> configMapper) {
93+
Config subconfig = this.getSubConfigOrNull(path);
94+
if (subconfig == null) {
95+
return null;
96+
}
97+
return subconfig.mapAuditable(configMapper);
98+
}
99+
100+
default <T> T mapAuditableSubConfig(@NotNull String path, @NotNull Function<AuditableConfig, T> configMapper) {
101+
return this.getSubConfig(path).mapAuditable(configMapper);
102+
}
103+
91104
default <T> T mapAuditable(@NotNull Function<AuditableConfig, T> configMapper) {
92105
AuditableConfig auditableConfig = AuditableConfig.of(this);
93106
T result = configMapper.apply(auditableConfig);
94107
auditableConfig.failOnUnusedProperties();
95108
return result;
96109
}
97110

111+
default void consumeAuditableSubConfig(@NotNull String path, @NotNull Consumer<AuditableConfig> configConsumer) {
112+
this.getSubConfig(path).consumeAuditable(configConsumer);
113+
}
114+
98115
default void consumeAuditable(@NotNull Consumer<AuditableConfig> configConsumer) {
99116
AuditableConfig auditableConfig = AuditableConfig.of(this);
100117
configConsumer.accept(auditableConfig);

src/main/java/com/coditory/quark/config/ConfigGetters.java

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.util.Optional;
1414

1515
import static com.coditory.quark.config.MissingConfigValueException.missingConfigValueForPath;
16+
import static com.coditory.quark.config.Preconditions.expectNonBlank;
1617
import static com.coditory.quark.config.Preconditions.expectNonNull;
1718

1819
interface ConfigGetters {
@@ -121,6 +122,8 @@ default Object getObjectOrNull(@NotNull String path) {
121122

122123
@NotNull
123124
default Object getObject(@NotNull String path, @NotNull Object defaultValue) {
125+
expectNonNull(path, "path");
126+
expectNonNull(defaultValue, "defaultValue");
124127
return getObjectAsOptional(path).orElse(defaultValue);
125128
}
126129

@@ -147,6 +150,8 @@ default Boolean getBooleanOrNull(@NotNull String path) {
147150

148151
@NotNull
149152
default Boolean getBoolean(@NotNull String path, @NotNull Boolean defaultValue) {
153+
expectNonNull(path, "path");
154+
expectNonNull(defaultValue, "defaultValue");
150155
return getBooleanAsOptional(path).orElse(defaultValue);
151156
}
152157

@@ -173,6 +178,8 @@ default Short getShortOrNull(@NotNull String path) {
173178

174179
@NotNull
175180
default Short getShort(@NotNull String path, @NotNull Short defaultValue) {
181+
expectNonNull(path, "path");
182+
expectNonNull(defaultValue, "defaultValue");
176183
return getShortAsOptional(path).orElse(defaultValue);
177184
}
178185

@@ -199,6 +206,8 @@ default Byte getByteOrNull(@NotNull String path) {
199206

200207
@NotNull
201208
default Byte getByte(@NotNull String path, @NotNull Byte defaultValue) {
209+
expectNonNull(path, "path");
210+
expectNonNull(defaultValue, "defaultValue");
202211
return getByteAsOptional(path).orElse(defaultValue);
203212
}
204213

@@ -225,6 +234,8 @@ default Integer getIntegerOrNull(@NotNull String path) {
225234

226235
@NotNull
227236
default Integer getInteger(@NotNull String path, @NotNull Integer defaultValue) {
237+
expectNonNull(path, "path");
238+
expectNonNull(defaultValue, "defaultValue");
228239
return getIntegerAsOptional(path).orElse(defaultValue);
229240
}
230241

@@ -251,6 +262,8 @@ default Long getLongOrNull(@NotNull String path) {
251262

252263
@NotNull
253264
default Long getLong(@NotNull String path, @NotNull Long defaultValue) {
265+
expectNonNull(path, "path");
266+
expectNonNull(defaultValue, "defaultValue");
254267
return getLongAsOptional(path).orElse(defaultValue);
255268
}
256269

@@ -277,6 +290,8 @@ default Float getFloatOrNull(@NotNull String path) {
277290

278291
@NotNull
279292
default Float getFloat(@NotNull String path, @NotNull Float defaultValue) {
293+
expectNonNull(path, "path");
294+
expectNonNull(defaultValue, "defaultValue");
280295
return getFloatAsOptional(path).orElse(defaultValue);
281296
}
282297

@@ -303,6 +318,8 @@ default Double getDoubleOrNull(@NotNull String path) {
303318

304319
@NotNull
305320
default Double getDouble(@NotNull String path, @NotNull Double defaultValue) {
321+
expectNonNull(path, "path");
322+
expectNonNull(defaultValue, "defaultValue");
306323
return getDoubleAsOptional(path).orElse(defaultValue);
307324
}
308325

@@ -329,6 +346,8 @@ default BigDecimal getBigDecimalOrNull(@NotNull String path) {
329346

330347
@NotNull
331348
default BigDecimal getBigDecimal(@NotNull String path, @NotNull BigDecimal defaultValue) {
349+
expectNonNull(path, "path");
350+
expectNonNull(defaultValue, "defaultValue");
332351
return getBigDecimalAsOptional(path).orElse(defaultValue);
333352
}
334353

@@ -355,6 +374,8 @@ default Instant getInstantOrNull(@NotNull String path) {
355374

356375
@NotNull
357376
default Instant getInstant(@NotNull String path, @NotNull Instant defaultValue) {
377+
expectNonNull(path, "path");
378+
expectNonNull(defaultValue, "defaultValue");
358379
return getInstantAsOptional(path).orElse(defaultValue);
359380
}
360381

@@ -381,6 +402,8 @@ default ZonedDateTime getZonedDateTimeOrNull(@NotNull String path) {
381402

382403
@NotNull
383404
default ZonedDateTime getZonedDateTime(@NotNull String path, @NotNull ZonedDateTime defaultValue) {
405+
expectNonNull(path, "path");
406+
expectNonNull(defaultValue, "defaultValue");
384407
return getZonedDateTimeAsOptional(path).orElse(defaultValue);
385408
}
386409

@@ -407,6 +430,8 @@ default Duration getDurationOrNull(@NotNull String path) {
407430

408431
@NotNull
409432
default Duration getDuration(@NotNull String path, @NotNull Duration defaultValue) {
433+
expectNonNull(path, "path");
434+
expectNonNull(defaultValue, "defaultValue");
410435
return getDurationAsOptional(path).orElse(defaultValue);
411436
}
412437

@@ -433,6 +458,8 @@ default Locale getLocaleOrNull(@NotNull String path) {
433458

434459
@NotNull
435460
default Locale getLocale(@NotNull String path, @NotNull Locale defaultValue) {
461+
expectNonNull(path, "path");
462+
expectNonNull(defaultValue, "defaultValue");
436463
return getLocaleAsOptional(path).orElse(defaultValue);
437464
}
438465

@@ -459,6 +486,8 @@ default Currency getCurrencyOrNull(@NotNull String path) {
459486

460487
@NotNull
461488
default Currency getCurrency(@NotNull String path, @NotNull Currency defaultValue) {
489+
expectNonNull(path, "path");
490+
expectNonNull(defaultValue, "defaultValue");
462491
return getCurrencyAsOptional(path).orElse(defaultValue);
463492
}
464493

@@ -493,6 +522,8 @@ default List<String> getStringListOrEmpty(@NotNull String path) {
493522

494523
@NotNull
495524
default List<String> getStringList(@NotNull String path, @NotNull List<String> defaultValue) {
525+
expectNonNull(path, "path");
526+
expectNonNull(defaultValue, "defaultValue");
496527
return getStringListAsOptional(path).orElse(defaultValue);
497528
}
498529

@@ -519,6 +550,8 @@ default List<Object> getObjectListOrNull(@NotNull String path) {
519550

520551
@NotNull
521552
default List<Object> getObjectList(@NotNull String path, @NotNull List<Object> defaultValue) {
553+
expectNonNull(path, "path");
554+
expectNonNull(defaultValue, "defaultValue");
522555
return getObjectListAsOptional(path).orElse(defaultValue);
523556
}
524557

@@ -545,6 +578,8 @@ default List<Boolean> getBooleanListOrNull(@NotNull String path) {
545578

546579
@NotNull
547580
default List<Boolean> getBooleanList(@NotNull String path, @NotNull List<Boolean> defaultValue) {
581+
expectNonNull(path, "path");
582+
expectNonNull(defaultValue, "defaultValue");
548583
return getBooleanListAsOptional(path).orElse(defaultValue);
549584
}
550585

@@ -571,6 +606,8 @@ default List<Short> getShortListOrNull(@NotNull String path) {
571606

572607
@NotNull
573608
default List<Short> getShortList(@NotNull String path, @NotNull List<Short> defaultValue) {
609+
expectNonNull(path, "path");
610+
expectNonNull(defaultValue, "defaultValue");
574611
return getShortListAsOptional(path).orElse(defaultValue);
575612
}
576613

@@ -597,6 +634,8 @@ default List<Byte> getByteListOrNull(@NotNull String path) {
597634

598635
@NotNull
599636
default List<Byte> getByteList(@NotNull String path, @NotNull List<Byte> defaultValue) {
637+
expectNonNull(path, "path");
638+
expectNonNull(defaultValue, "defaultValue");
600639
return getByteListAsOptional(path).orElse(defaultValue);
601640
}
602641

@@ -623,6 +662,8 @@ default List<Integer> getIntegerListOrNull(@NotNull String path) {
623662

624663
@NotNull
625664
default List<Integer> getIntegerList(@NotNull String path, @NotNull List<Integer> defaultValue) {
665+
expectNonNull(path, "path");
666+
expectNonNull(defaultValue, "defaultValue");
626667
return getIntegerListAsOptional(path).orElse(defaultValue);
627668
}
628669

@@ -649,6 +690,8 @@ default List<Long> getLongListOrNull(@NotNull String path) {
649690

650691
@NotNull
651692
default List<Long> getLongList(@NotNull String path, @NotNull List<Long> defaultValue) {
693+
expectNonNull(path, "path");
694+
expectNonNull(defaultValue, "defaultValue");
652695
return getLongListAsOptional(path).orElse(defaultValue);
653696
}
654697

@@ -675,6 +718,8 @@ default List<Float> getFloatListOrNull(@NotNull String path) {
675718

676719
@NotNull
677720
default List<Float> getFloatList(@NotNull String path, @NotNull List<Float> defaultValue) {
721+
expectNonNull(path, "path");
722+
expectNonNull(defaultValue, "defaultValue");
678723
return getFloatListAsOptional(path).orElse(defaultValue);
679724
}
680725

@@ -701,6 +746,8 @@ default List<Double> getDoubleListOrNull(@NotNull String path) {
701746

702747
@NotNull
703748
default List<Double> getDoubleList(@NotNull String path, @NotNull List<Double> defaultValue) {
749+
expectNonNull(path, "path");
750+
expectNonNull(defaultValue, "defaultValue");
704751
return getDoubleListAsOptional(path).orElse(defaultValue);
705752
}
706753

@@ -727,6 +774,8 @@ default List<BigDecimal> getBigDecimalListOrNull(@NotNull String path) {
727774

728775
@NotNull
729776
default List<BigDecimal> getBigDecimalList(@NotNull String path, @NotNull List<BigDecimal> defaultValue) {
777+
expectNonNull(path, "path");
778+
expectNonNull(defaultValue, "defaultValue");
730779
return getBigDecimalListAsOptional(path).orElse(defaultValue);
731780
}
732781

@@ -753,6 +802,8 @@ default List<Instant> getInstantListOrNull(@NotNull String path) {
753802

754803
@NotNull
755804
default List<Instant> getInstantList(@NotNull String path, @NotNull List<Instant> defaultValue) {
805+
expectNonNull(path, "path");
806+
expectNonNull(defaultValue, "defaultValue");
756807
return getInstantListAsOptional(path).orElse(defaultValue);
757808
}
758809

@@ -779,6 +830,8 @@ default List<ZonedDateTime> getZonedDateTimeListOrNull(@NotNull String path) {
779830

780831
@NotNull
781832
default List<ZonedDateTime> getZonedDateTimeList(@NotNull String path, @NotNull List<ZonedDateTime> defaultValue) {
833+
expectNonNull(path, "path");
834+
expectNonNull(defaultValue, "defaultValue");
782835
return getZonedDateTimeListAsOptional(path).orElse(defaultValue);
783836
}
784837

@@ -805,6 +858,8 @@ default List<Duration> getDurationListOrNull(@NotNull String path) {
805858

806859
@NotNull
807860
default List<Duration> getDurationList(@NotNull String path, @NotNull List<Duration> defaultValue) {
861+
expectNonNull(path, "path");
862+
expectNonNull(defaultValue, "defaultValue");
808863
return getDurationListAsOptional(path).orElse(defaultValue);
809864
}
810865

@@ -831,6 +886,8 @@ default List<Locale> getLocaleListOrNull(@NotNull String path) {
831886

832887
@NotNull
833888
default List<Locale> getLocaleList(@NotNull String path, @NotNull List<Locale> defaultValue) {
889+
expectNonNull(path, "path");
890+
expectNonNull(defaultValue, "defaultValue");
834891
return getLocaleListAsOptional(path).orElse(defaultValue);
835892
}
836893

@@ -857,6 +914,42 @@ default List<Currency> getCurrencyListOrNull(@NotNull String path) {
857914

858915
@NotNull
859916
default List<Currency> getCurrencyList(@NotNull String path, @NotNull List<Currency> defaultValue) {
917+
expectNonNull(path, "path");
918+
expectNonNull(defaultValue, "defaultValue");
860919
return getCurrencyListAsOptional(path).orElse(defaultValue);
861920
}
921+
922+
// SubConfig List API
923+
924+
@NotNull
925+
default Optional<List<Config>> getSubConfigListAsOptional(@NotNull String path) {
926+
expectNonBlank(path, "path");
927+
return getListAsOptional(Config.class, path);
928+
}
929+
930+
@NotNull
931+
default List<Config> getSubConfigList(@NotNull String path) {
932+
expectNonNull(path, "path");
933+
return getSubConfigListAsOptional(path)
934+
.orElseThrow(() -> missingConfigValueForPath(path));
935+
}
936+
937+
@NotNull
938+
default List<Config> getSubConfigListOrEmpty(@NotNull String path) {
939+
expectNonBlank(path, "path");
940+
return getSubConfigListAsOptional(path).orElse(List.of());
941+
}
942+
943+
@Nullable
944+
default List<Config> getSubConfigListOrNull(@NotNull String path) {
945+
expectNonNull(path, "path");
946+
return getSubConfigListAsOptional(path).orElse(null);
947+
}
948+
949+
@NotNull
950+
default List<Config> getSubConfigList(@NotNull String path, @NotNull List<Config> defaultValue) {
951+
expectNonNull(path, "path");
952+
expectNonNull(defaultValue, "defaultValue");
953+
return getSubConfigListAsOptional(path).orElse(defaultValue);
954+
}
862955
}

src/main/java/com/coditory/quark/config/ConfigValueParser.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import java.math.BigDecimal;
44
import java.time.Duration;
55
import java.time.Instant;
6+
import java.time.LocalDate;
7+
import java.time.LocalDateTime;
8+
import java.time.LocalTime;
69
import java.time.ZonedDateTime;
710
import java.util.ArrayList;
811
import java.util.Currency;
@@ -24,6 +27,9 @@ class ConfigValueParser {
2427
ValueParser.forType(BigDecimal.class, BigDecimal::new),
2528
ValueParser.forType(ZonedDateTime.class, value -> ZonedDateTime.parse(value, ISO_OFFSET_DATE_TIME)),
2629
ValueParser.forType(Instant.class, Instant::parse),
30+
ValueParser.forType(LocalDateTime.class, LocalDateTime::parse),
31+
ValueParser.forType(LocalDate.class, LocalDate::parse),
32+
ValueParser.forType(LocalTime.class, LocalTime::parse),
2733
ValueParser.forType(Duration.class, DurationParser::parseDuration),
2834
ValueParser.forType(Locale.class, LocaleParser::parseLocale),
2935
ValueParser.forType(Currency.class, Currency::getInstance)

src/main/java/com/coditory/quark/config/ListConfigNode.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ class ListConfigNode implements ConfigNode {
1818
this.values = values;
1919
}
2020

21+
List<ConfigNode> children() {
22+
return List.copyOf(values);
23+
}
24+
2125
@Override
2226
public boolean isEmpty() {
2327
return values.isEmpty();

0 commit comments

Comments
 (0)