1313import java .util .Optional ;
1414
1515import static com .coditory .quark .config .MissingConfigValueException .missingConfigValueForPath ;
16+ import static com .coditory .quark .config .Preconditions .expectNonBlank ;
1617import static com .coditory .quark .config .Preconditions .expectNonNull ;
1718
1819interface 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}
0 commit comments