summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2023-09-08 13:15:23 +0200
committerHarald Musum <musum@yahooinc.com>2023-09-08 13:15:23 +0200
commitb3dc461a8c991c5ffe898059f48289c90972f715 (patch)
tree9d4be12e4993e8188efc65cf805d4c8d28de038d /config
parent720d82e3e11bab77f38cdef7579f44fa2e3fd055 (diff)
Support optional path in ConfigDefinition and ConfigDefinitionBuilder
Diffstat (limited to 'config')
-rw-r--r--config/src/main/java/com/yahoo/vespa/config/ConfigDefinition.java29
-rw-r--r--config/src/main/java/com/yahoo/vespa/config/ConfigDefinitionBuilder.java10
-rw-r--r--config/src/test/java/com/yahoo/vespa/config/ConfigDefinitionBuilderTest.java4
-rwxr-xr-xconfig/src/test/java/com/yahoo/vespa/config/ConfigDefinitionTest.java4
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");