@@ -366,12 +366,25 @@ public T getDefault(Settings settings) {
366
366
}
367
367
368
368
/**
369
- * Returns <code>true</code> iff this setting is present in the given settings object. Otherwise <code>false</code>
369
+ * Returns true if and only if this setting is present in the given settings instance. Note that fallback settings are excluded.
370
+ *
371
+ * @param settings the settings
372
+ * @return true if the setting is present in the given settings instance, otherwise false
370
373
*/
371
- public boolean exists (Settings settings ) {
374
+ public boolean exists (final Settings settings ) {
372
375
return settings .keySet ().contains (getKey ());
373
376
}
374
377
378
+ /**
379
+ * Returns true if and only if this setting including fallback settings is present in the given settings instance.
380
+ *
381
+ * @param settings the settings
382
+ * @return true if the setting including fallback settings is present in the given settings instance, otherwise false
383
+ */
384
+ public boolean existsOrFallbackExists (final Settings settings ) {
385
+ return settings .keySet ().contains (getKey ()) || (fallbackSetting != null && fallbackSetting .existsOrFallbackExists (settings ));
386
+ }
387
+
375
388
/**
376
389
* Returns the settings value. If the setting is not present in the given settings object the default value is returned
377
390
* instead.
@@ -511,7 +524,7 @@ public Setting<T> getConcreteSetting(String key) {
511
524
* Returns a set of settings that are required at validation time. Unless all of the dependencies are present in the settings
512
525
* object validation of setting must fail.
513
526
*/
514
- public Set <String > getSettingsDependencies (String key ) {
527
+ public Set <Setting <?> > getSettingsDependencies (String key ) {
515
528
return Collections .emptySet ();
516
529
}
517
530
@@ -634,12 +647,12 @@ private Stream<String> matchStream(Settings settings) {
634
647
return settings .keySet ().stream ().filter (this ::match ).map (key ::getConcreteString );
635
648
}
636
649
637
- public Set <String > getSettingsDependencies (String settingsKey ) {
650
+ public Set <Setting <?> > getSettingsDependencies (String settingsKey ) {
638
651
if (dependencies .isEmpty ()) {
639
652
return Collections .emptySet ();
640
653
} else {
641
654
String namespace = key .getNamespace (settingsKey );
642
- return dependencies .stream ().map (s -> s . key . toConcreteKey (namespace ). key ).collect (Collectors .toSet ());
655
+ return dependencies .stream ().map (s -> ( Setting <?>) s . getConcreteSettingForNamespace (namespace )).collect (Collectors .toSet ());
643
656
}
644
657
}
645
658
@@ -914,40 +927,6 @@ public String toString() {
914
927
}
915
928
}
916
929
917
- private static class ListSetting <T > extends Setting <List <T >> {
918
- private final Function <Settings , List <String >> defaultStringValue ;
919
-
920
- private ListSetting (String key , Function <Settings , List <String >> defaultStringValue , Function <String , List <T >> parser ,
921
- Property ... properties ) {
922
- super (new ListKey (key ), (s ) -> Setting .arrayToParsableString (defaultStringValue .apply (s )), parser ,
923
- properties );
924
- this .defaultStringValue = defaultStringValue ;
925
- }
926
-
927
- @ Override
928
- String innerGetRaw (final Settings settings ) {
929
- List <String > array = settings .getAsList (getKey (), null );
930
- return array == null ? defaultValue .apply (settings ) : arrayToParsableString (array );
931
- }
932
-
933
- @ Override
934
- boolean hasComplexMatcher () {
935
- return true ;
936
- }
937
-
938
- @ Override
939
- public void diff (Settings .Builder builder , Settings source , Settings defaultSettings ) {
940
- if (exists (source ) == false ) {
941
- List <String > asList = defaultSettings .getAsList (getKey (), null );
942
- if (asList == null ) {
943
- builder .putList (getKey (), defaultStringValue .apply (defaultSettings ));
944
- } else {
945
- builder .putList (getKey (), asList );
946
- }
947
- }
948
- }
949
- }
950
-
951
930
private final class Updater implements AbstractScopedSettings .SettingUpdater <T > {
952
931
private final Consumer <T > consumer ;
953
932
private final Logger logger ;
@@ -1209,26 +1188,44 @@ public static Setting<ByteSizeValue> memorySizeSetting(String key, String defaul
1209
1188
return new Setting <>(key , (s ) -> defaultPercentage , (s ) -> MemorySizeValue .parseBytesSizeValueOrHeapRatio (s , key ), properties );
1210
1189
}
1211
1190
1212
- public static <T > Setting <List <T >> listSetting (String key , List <String > defaultStringValue , Function <String , T > singleValueParser ,
1213
- Property ... properties ) {
1214
- return listSetting (key , (s ) -> defaultStringValue , singleValueParser , properties );
1191
+ public static <T > Setting <List <T >> listSetting (
1192
+ final String key ,
1193
+ final List <String > defaultStringValue ,
1194
+ final Function <String , T > singleValueParser ,
1195
+ final Property ... properties ) {
1196
+ return listSetting (key , null , singleValueParser , (s ) -> defaultStringValue , properties );
1215
1197
}
1216
1198
1217
1199
// TODO this one's two argument get is still broken
1218
- public static <T > Setting <List <T >> listSetting (String key , Setting <List <T >> fallbackSetting , Function <String , T > singleValueParser ,
1219
- Property ... properties ) {
1220
- return listSetting (key , (s ) -> parseableStringToList (fallbackSetting .getRaw (s )), singleValueParser , properties );
1200
+ public static <T > Setting <List <T >> listSetting (
1201
+ final String key ,
1202
+ final Setting <List <T >> fallbackSetting ,
1203
+ final Function <String , T > singleValueParser ,
1204
+ final Property ... properties ) {
1205
+ return listSetting (key , fallbackSetting , singleValueParser , (s ) -> parseableStringToList (fallbackSetting .getRaw (s )), properties );
1206
+ }
1207
+
1208
+ public static <T > Setting <List <T >> listSetting (
1209
+ final String key ,
1210
+ final Function <String , T > singleValueParser ,
1211
+ final Function <Settings , List <String >> defaultStringValue ,
1212
+ final Property ... properties ) {
1213
+ return listSetting (key , null , singleValueParser , defaultStringValue , properties );
1221
1214
}
1222
1215
1223
- public static <T > Setting <List <T >> listSetting (String key , Function <Settings , List <String >> defaultStringValue ,
1224
- Function <String , T > singleValueParser , Property ... properties ) {
1216
+ public static <T > Setting <List <T >> listSetting (
1217
+ final String key ,
1218
+ final @ Nullable Setting <List <T >> fallbackSetting ,
1219
+ final Function <String , T > singleValueParser ,
1220
+ final Function <Settings , List <String >> defaultStringValue ,
1221
+ final Property ... properties ) {
1225
1222
if (defaultStringValue .apply (Settings .EMPTY ) == null ) {
1226
1223
throw new IllegalArgumentException ("default value function must not return null" );
1227
1224
}
1228
1225
Function <String , List <T >> parser = (s ) ->
1229
1226
parseableStringToList (s ).stream ().map (singleValueParser ).collect (Collectors .toList ());
1230
1227
1231
- return new ListSetting <>(key , defaultStringValue , parser , properties );
1228
+ return new ListSetting <>(key , fallbackSetting , defaultStringValue , parser , properties );
1232
1229
}
1233
1230
1234
1231
private static List <String > parseableStringToList (String parsableString ) {
@@ -1266,6 +1263,51 @@ private static String arrayToParsableString(List<String> array) {
1266
1263
}
1267
1264
}
1268
1265
1266
+ private static class ListSetting <T > extends Setting <List <T >> {
1267
+
1268
+ private final Function <Settings , List <String >> defaultStringValue ;
1269
+
1270
+ private ListSetting (
1271
+ final String key ,
1272
+ final @ Nullable Setting <List <T >> fallbackSetting ,
1273
+ final Function <Settings , List <String >> defaultStringValue ,
1274
+ final Function <String , List <T >> parser ,
1275
+ final Property ... properties ) {
1276
+ super (
1277
+ new ListKey (key ),
1278
+ fallbackSetting ,
1279
+ (s ) -> Setting .arrayToParsableString (defaultStringValue .apply (s )),
1280
+ parser ,
1281
+ (v ,s ) -> {},
1282
+ properties );
1283
+ this .defaultStringValue = defaultStringValue ;
1284
+ }
1285
+
1286
+ @ Override
1287
+ String innerGetRaw (final Settings settings ) {
1288
+ List <String > array = settings .getAsList (getKey (), null );
1289
+ return array == null ? defaultValue .apply (settings ) : arrayToParsableString (array );
1290
+ }
1291
+
1292
+ @ Override
1293
+ boolean hasComplexMatcher () {
1294
+ return true ;
1295
+ }
1296
+
1297
+ @ Override
1298
+ public void diff (Settings .Builder builder , Settings source , Settings defaultSettings ) {
1299
+ if (exists (source ) == false ) {
1300
+ List <String > asList = defaultSettings .getAsList (getKey (), null );
1301
+ if (asList == null ) {
1302
+ builder .putList (getKey (), defaultStringValue .apply (defaultSettings ));
1303
+ } else {
1304
+ builder .putList (getKey (), asList );
1305
+ }
1306
+ }
1307
+ }
1308
+
1309
+ }
1310
+
1269
1311
static void logSettingUpdate (Setting setting , Settings current , Settings previous , Logger logger ) {
1270
1312
if (logger .isInfoEnabled ()) {
1271
1313
if (setting .isFiltered ()) {
0 commit comments