diff options
author | Harald Musum <musum@yahooinc.com> | 2023-09-07 12:25:37 +0200 |
---|---|---|
committer | Harald Musum <musum@yahooinc.com> | 2023-09-07 12:25:37 +0200 |
commit | cac205f35b56d0bd584013b79b88a6635dee5ab4 (patch) | |
tree | bcf8461b3091c44ae78e5d9355a2109ba7d6a77a /config/src/main/java | |
parent | daba552c567f1fcb9e300ae65825c1d97cedbb5e (diff) |
Support optional 'path' config type
Initial work needed for this to work (config definition and config library)
Diffstat (limited to 'config/src/main/java')
-rw-r--r-- | config/src/main/java/com/yahoo/vespa/config/ConfigPayloadApplier.java | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/config/src/main/java/com/yahoo/vespa/config/ConfigPayloadApplier.java b/config/src/main/java/com/yahoo/vespa/config/ConfigPayloadApplier.java index e86b13b2c98..0dbc40a246c 100644 --- a/config/src/main/java/com/yahoo/vespa/config/ConfigPayloadApplier.java +++ b/config/src/main/java/com/yahoo/vespa/config/ConfigPayloadApplier.java @@ -21,6 +21,7 @@ import java.util.Deque; import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.logging.Logger; @@ -213,7 +214,10 @@ public class ConfigPayloadApplier<T extends ConfigInstance.Builder> { Inspector value = (Inspector)rawValue; if (isPathField(builder, methodName)) return resolvePath(value.asString()); - else if (isUrlField(builder, methodName)) + if (isOptionalPathField(builder, methodName)) { + String v = value.asString(); + return resolvePath(v.isEmpty() ? Optional.empty() : Optional.of(v)); + } else if (isUrlField(builder, methodName)) return value.asString().isEmpty() ? "" : resolveUrl(value.asString()); else if (isModelField(builder, methodName)) return value.asString().isEmpty() ? "" : resolveModel(value.asString()); @@ -234,6 +238,10 @@ public class ConfigPayloadApplier<T extends ConfigInstance.Builder> { return new FileReference(path.toString()); } + private Optional<FileReference> resolvePath(Optional<String> value) { + return value.isEmpty() ? Optional.empty() : Optional.of(resolvePath(value.get())); + } + private UrlReference resolveUrl(String url) { if ( ! isClientside()) return new UrlReference(url); File file = urlDownloader.waitFor(new UrlReference(url), 60 * 60); @@ -319,6 +327,16 @@ public class ConfigPayloadApplier<T extends ConfigInstance.Builder> { return isFieldType(pathFieldSet, builder, methodName, FileReference.class); } + /** + * Checks if this field is of type 'path', in which + * case some special handling might be needed. Caches the result. + */ + private final Set<String> optionalPathFieldSet = new HashSet<>(); + private boolean isOptionalPathField(Object builder, String methodName) { + // Paths are stored as Optional<FileReference> in Builder. + return isFieldType(optionalPathFieldSet, builder, methodName, Optional.class); + } + private final Set<String> urlFieldSet = new HashSet<>(); private boolean isUrlField(Object builder, String methodName) { // Urls are stored as UrlReference in Builder. |