summaryrefslogtreecommitdiffstats
path: root/config-lib
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2023-09-07 12:25:37 +0200
committerHarald Musum <musum@yahooinc.com>2023-09-07 12:25:37 +0200
commitcac205f35b56d0bd584013b79b88a6635dee5ab4 (patch)
treebcf8461b3091c44ae78e5d9355a2109ba7d6a77a /config-lib
parentdaba552c567f1fcb9e300ae65825c1d97cedbb5e (diff)
Support optional 'path' config type
Initial work needed for this to work (config definition and config library)
Diffstat (limited to 'config-lib')
-rw-r--r--config-lib/abi-spec.json23
-rw-r--r--config-lib/src/main/java/com/yahoo/config/LeafNodeMaps.java9
-rw-r--r--config-lib/src/main/java/com/yahoo/config/LeafNodeVector.java8
-rw-r--r--config-lib/src/main/java/com/yahoo/config/OptionalPathNode.java84
4 files changed, 124 insertions, 0 deletions
diff --git a/config-lib/abi-spec.json b/config-lib/abi-spec.json
index caae2ebf1cf..07e61c63237 100644
--- a/config-lib/abi-spec.json
+++ b/config-lib/abi-spec.json
@@ -273,6 +273,7 @@
"public static java.util.Map asNodeMap(java.util.Map, com.yahoo.config.LeafNode)",
"public static java.util.Map asFileNodeMap(java.util.Map)",
"public static java.util.Map asPathNodeMap(java.util.Map)",
+ "public static java.util.Map asOptionalPathNodeMap(java.util.Map)",
"public static java.util.Map asUrlNodeMap(java.util.Map)",
"public static java.util.Map asModelNodeMap(java.util.Map)"
],
@@ -289,6 +290,7 @@
"public java.util.List asList()",
"public static com.yahoo.config.LeafNodeVector createFileNodeVector(java.util.Collection)",
"public static com.yahoo.config.LeafNodeVector createPathNodeVector(java.util.Collection)",
+ "public static com.yahoo.config.LeafNodeVector createOptionalPathNodeVector(java.util.Collection)",
"public static com.yahoo.config.LeafNodeVector createUrlNodeVector(java.util.Collection)",
"public static com.yahoo.config.LeafNodeVector createModelNodeVector(java.util.Collection)"
],
@@ -420,6 +422,27 @@
"protected final java.util.ArrayList vector"
]
},
+ "com.yahoo.config.OptionalPathNode" : {
+ "superClass" : "com.yahoo.config.LeafNode",
+ "interfaces" : [ ],
+ "attributes" : [
+ "public"
+ ],
+ "methods" : [
+ "public void <init>()",
+ "public void <init>(com.yahoo.config.FileReference)",
+ "public void <init>(java.util.Optional)",
+ "public java.util.Optional value()",
+ "public java.lang.String getValue()",
+ "public java.lang.String toString()",
+ "protected boolean doSetValue(java.lang.String)",
+ "public java.util.Optional getFileReference()",
+ "public static java.util.List toFileReferences(java.util.List)",
+ "public static java.util.Map toFileReferenceMap(java.util.Map)",
+ "public bridge synthetic java.lang.Object value()"
+ ],
+ "fields" : [ ]
+ },
"com.yahoo.config.PathNode" : {
"superClass" : "com.yahoo.config.LeafNode",
"interfaces" : [ ],
diff --git a/config-lib/src/main/java/com/yahoo/config/LeafNodeMaps.java b/config-lib/src/main/java/com/yahoo/config/LeafNodeMaps.java
index 82663fa8bfd..214d8c52caa 100644
--- a/config-lib/src/main/java/com/yahoo/config/LeafNodeMaps.java
+++ b/config-lib/src/main/java/com/yahoo/config/LeafNodeMaps.java
@@ -4,6 +4,7 @@ package com.yahoo.config;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.Optional;
import java.util.stream.Collectors;
/**
@@ -60,6 +61,14 @@ public class LeafNodeMaps {
return Collections.unmodifiableMap(pathNodeMap);
}
+ public static Map<String, OptionalPathNode> asOptionalPathNodeMap(Map<String, Optional<FileReference>> fileReferenceMap) {
+ Map<String, OptionalPathNode> pathNodeMap = new LinkedHashMap<>();
+ for (Map.Entry<String, Optional<FileReference>> e : fileReferenceMap.entrySet()) {
+ pathNodeMap.put(e.getKey(), new OptionalPathNode(e.getValue()));
+ }
+ return Collections.unmodifiableMap(pathNodeMap);
+ }
+
public static Map<String, UrlNode> asUrlNodeMap(Map<String, UrlReference> urlReferenceMap) {
return Collections.unmodifiableMap(
urlReferenceMap.entrySet().stream().collect(
diff --git a/config-lib/src/main/java/com/yahoo/config/LeafNodeVector.java b/config-lib/src/main/java/com/yahoo/config/LeafNodeVector.java
index a4fea95088d..cfb8cd4eebd 100644
--- a/config-lib/src/main/java/com/yahoo/config/LeafNodeVector.java
+++ b/config-lib/src/main/java/com/yahoo/config/LeafNodeVector.java
@@ -8,6 +8,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.Optional;
/**
* A vector of leaf nodes.
@@ -71,6 +72,13 @@ public class LeafNodeVector<REAL, NODE extends LeafNode<REAL>> extends NodeVecto
return new LeafNodeVector<>(paths, new PathNode());
}
+ public static LeafNodeVector<Optional<Path>, OptionalPathNode> createOptionalPathNodeVector(Collection<Optional<FileReference>> values) {
+ List<Optional<Path>> paths = new ArrayList<>();
+ for (Optional<FileReference> fileReference : values)
+ paths.add(fileReference.map(reference -> Paths.get(reference.value())));
+ return new LeafNodeVector<>(paths, new OptionalPathNode());
+ }
+
public static LeafNodeVector<File, UrlNode> createUrlNodeVector(Collection<UrlReference> values) {
List<File> files = new ArrayList<>();
for (UrlReference urlReference : values)
diff --git a/config-lib/src/main/java/com/yahoo/config/OptionalPathNode.java b/config-lib/src/main/java/com/yahoo/config/OptionalPathNode.java
new file mode 100644
index 00000000000..8a6414d798f
--- /dev/null
+++ b/config-lib/src/main/java/com/yahoo/config/OptionalPathNode.java
@@ -0,0 +1,84 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.config;
+
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * Represents a 'path' in a {@link ConfigInstance}, usually a filename, can be optional
+ *
+ * @author hmusum
+ */
+public class OptionalPathNode extends LeafNode<Optional<Path>> {
+
+ private final Optional<FileReference> fileReference;
+
+ public OptionalPathNode() {
+ fileReference = Optional.empty();
+ }
+
+ public OptionalPathNode(FileReference fileReference) {
+ super(true);
+ this.value = Optional.of(Path.of(fileReference.value()));
+ this.fileReference = Optional.of(fileReference);
+ }
+
+ public OptionalPathNode(Optional<FileReference> fileReference) {
+ super(true);
+ this.value = fileReference.map(reference -> Path.of(reference.value()));
+ this.fileReference = fileReference;
+ }
+
+ public Optional<Path> value() {
+ return value;
+ }
+
+ @Override
+ public String getValue() {
+ return value.toString();
+ }
+
+ @Override
+ public String toString() {
+ return (value.isEmpty()) ? "(empty)" : '"' + value.get().toString() + '"';
+ }
+
+ @Override
+ protected boolean doSetValue(String stringVal) {
+ throw new UnsupportedOperationException("doSetValue should not be necessary anymore!");
+ }
+
+ @Override
+ void serialize(String name, Serializer serializer) {
+ value.ifPresent(path -> serializer.serialize(name, path.toString()));
+ }
+
+ @Override
+ void serialize(Serializer serializer) {
+ value.ifPresent(path -> serializer.serialize(path.toString()));
+ }
+
+ public Optional<FileReference> getFileReference() {
+ return fileReference;
+ }
+
+ public static List<Optional<FileReference>> toFileReferences(List<OptionalPathNode> pathNodes) {
+ List<Optional<FileReference>> fileReferences = new ArrayList<>();
+ for (OptionalPathNode pathNode : pathNodes)
+ fileReferences.add(pathNode.getFileReference());
+ return fileReferences;
+ }
+
+ public static Map<String, Optional<FileReference>> toFileReferenceMap(Map<String, OptionalPathNode> map) {
+ Map<String, Optional<FileReference>> ret = new LinkedHashMap<>();
+ for (Map.Entry<String, OptionalPathNode> e : map.entrySet()) {
+ ret.put(e.getKey(), e.getValue().getFileReference());
+ }
+ return ret;
+ }
+
+}