diff options
author | Harald Musum <musum@yahooinc.com> | 2023-09-08 13:15:23 +0200 |
---|---|---|
committer | Harald Musum <musum@yahooinc.com> | 2023-09-08 13:15:23 +0200 |
commit | b3dc461a8c991c5ffe898059f48289c90972f715 (patch) | |
tree | 9d4be12e4993e8188efc65cf805d4c8d28de038d /config | |
parent | 720d82e3e11bab77f38cdef7579f44fa2e3fd055 (diff) |
Support optional path in ConfigDefinition and ConfigDefinitionBuilder
Diffstat (limited to 'config')
4 files changed, 47 insertions, 0 deletions
diff --git a/config/src/main/java/com/yahoo/vespa/config/ConfigDefinition.java b/config/src/main/java/com/yahoo/vespa/config/ConfigDefinition.java index 9d9e43de130..44365d8c244 100644 --- a/config/src/main/java/com/yahoo/vespa/config/ConfigDefinition.java +++ b/config/src/main/java/com/yahoo/vespa/config/ConfigDefinition.java @@ -38,6 +38,7 @@ public class ConfigDefinition { private final Map<String, RefDef> referenceDefs = new LinkedHashMap<>(); private final Map<String, FileDef> fileDefs = new LinkedHashMap<>(); private final Map<String, PathDef> pathDefs = new LinkedHashMap<>(); + private final Map<String, PathDef> optionalPathDefs = new LinkedHashMap<>(); private final Map<String, UrlDef> urlDefs = new LinkedHashMap<>(); private final Map<String, ModelDef> modelDefs = new LinkedHashMap<>(); private final Map<String, StructDef> structDefs = new LinkedHashMap<>(); @@ -98,6 +99,8 @@ public class ConfigDefinition { verifyFile(id); } else if (pathDefs.containsKey(id)) { verifyPath(id); + } else if (optionalPathDefs.containsKey(id)) { + verifyOptionalPath(id); } else if (urlDefs.containsKey(id)) { verifyUrl(id); } else if (modelDefs.containsKey(id)) { @@ -540,6 +543,19 @@ public class ConfigDefinition { } } + public static class OptionalPathDef implements DefaultValued<String> { + private final String defVal; + + OptionalPathDef(String defVal) { + this.defVal = defVal; + } + + @Override + public String getDefVal() { + return defVal; + } + } + public static class UrlDef implements DefaultValued<String> { private final String defVal; @@ -659,6 +675,14 @@ public class ConfigDefinition { pathDefs.put(refId, new PathDef(null)); } + public void addOptionalPathDef(String refId, String defVal) { + pathDefs.put(refId, new PathDef(defVal)); + } + + public void addOptionalPathDef(String refId) { + pathDefs.put(refId, new PathDef(null)); + } + public void addUrlDef(String url, String defVal) { urlDefs.put(url, new UrlDef(defVal)); } @@ -868,6 +892,11 @@ public class ConfigDefinition { throw new IllegalArgumentException("No such path in " + verifyWarning(id)); } + private void verifyOptionalPath(String id) { + if ( ! optionalPathDefs.containsKey(id)) + throw new IllegalArgumentException("No such optional path in " + verifyWarning(id)); + } + private void verifyUrl(String id) { if ( ! urlDefs.containsKey(id)) throw new IllegalArgumentException("No such url in " + verifyWarning(id)); diff --git a/config/src/main/java/com/yahoo/vespa/config/ConfigDefinitionBuilder.java b/config/src/main/java/com/yahoo/vespa/config/ConfigDefinitionBuilder.java index da5048a99e8..9cf9fb41839 100644 --- a/config/src/main/java/com/yahoo/vespa/config/ConfigDefinitionBuilder.java +++ b/config/src/main/java/com/yahoo/vespa/config/ConfigDefinitionBuilder.java @@ -67,6 +67,8 @@ public class ConfigDefinitionBuilder { addNode(def, (LeafCNode.FileLeaf) node); } else if (node instanceof LeafCNode.PathLeaf) { addNode(def, (LeafCNode.PathLeaf) node); + } else if (node instanceof LeafCNode.OptionalPathLeaf) { + addNode(def, (LeafCNode.OptionalPathLeaf) node); } else if (node instanceof LeafCNode.UrlLeaf) { addNode(def, (LeafCNode.UrlLeaf) node); } else if (node instanceof LeafCNode.ModelLeaf) { @@ -172,6 +174,14 @@ public class ConfigDefinitionBuilder { } } + private static void addNode(ConfigDefinition def, LeafCNode.OptionalPathLeaf leaf) { + if (leaf.getDefaultValue() != null) { + def.addOptionalPathDef(leaf.getName(), leaf.getDefaultValue().getValue()); + } else { + def.addOptionalPathDef(leaf.getName(), null); + } + } + private static void addNode(ConfigDefinition def, LeafCNode.UrlLeaf leaf) { if (leaf.getDefaultValue() != null) { def.addUrlDef(leaf.getName(), leaf.getDefaultValue().getValue()); diff --git a/config/src/test/java/com/yahoo/vespa/config/ConfigDefinitionBuilderTest.java b/config/src/test/java/com/yahoo/vespa/config/ConfigDefinitionBuilderTest.java index fa1ec815047..e4c8420d43f 100644 --- a/config/src/test/java/com/yahoo/vespa/config/ConfigDefinitionBuilderTest.java +++ b/config/src/test/java/com/yahoo/vespa/config/ConfigDefinitionBuilderTest.java @@ -77,6 +77,10 @@ public class ConfigDefinitionBuilderTest { assertThat(def.getFileDefs().size(), is(1)); assertNotNull(def.getFileDefs().get("fileVal")); + assertThat(def.getPathDefs().size(), is(2)); + assertNotNull(def.getPathDefs().get("pathVal")); + assertNotNull(def.getPathDefs().get("optionalPathVal")); + // An array does not have to have any elements set assertThat(def.getArrayDefs().size(), is(10)); assertNotNull(def.getArrayDefs().get("boolarr")); diff --git a/config/src/test/java/com/yahoo/vespa/config/ConfigDefinitionTest.java b/config/src/test/java/com/yahoo/vespa/config/ConfigDefinitionTest.java index fa85f582e99..62eb0095dd3 100755 --- a/config/src/test/java/com/yahoo/vespa/config/ConfigDefinitionTest.java +++ b/config/src/test/java/com/yahoo/vespa/config/ConfigDefinitionTest.java @@ -124,6 +124,8 @@ public class ConfigDefinitionTest { def.addEnumDef("enumval", new EnumDef(List.of("FOO"), "FOO")); def.addReferenceDef("refval"); def.addFileDef("fileval"); + def.addPathDef("pathVal"); + def.addOptionalPathDef("optionalPathVal"); def.addInnerArrayDef("innerarr"); def.addLeafMapDef("leafmap"); ConfigDefinition.ArrayDef intArray = def.arrayDef("intArray"); @@ -162,6 +164,8 @@ public class ConfigDefinitionTest { assertVerify(def, "enumval", "FOO"); assertVerify(def, "refval", "foobar"); assertVerify(def, "fileval", "foobar"); + assertVerify(def, "pathVal", "foobar"); + assertVerify(def, "optionalPathVal", "foobar"); assertVerifyComplex(def, "innerarr"); assertVerifyComplex(def, "leafmap"); |