diff options
author | Harald Musum <musum@oath.com> | 2018-11-01 14:44:09 +0100 |
---|---|---|
committer | Harald Musum <musum@oath.com> | 2018-11-01 14:47:08 +0100 |
commit | 6ada0742477c575cc6941704500c0ee8c9ac5596 (patch) | |
tree | 6a821cf6743c8ab6cc4210065cb6231a447ee1d8 /config-model/src/main | |
parent | 66bf0e3bda9b631da1e0c8e4d7c2bb51a183fb64 (diff) |
Supporting clearing config array when ovverriding config
Diffstat (limited to 'config-model/src/main')
-rw-r--r-- | config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomConfigPayloadBuilder.java | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomConfigPayloadBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomConfigPayloadBuilder.java index e9abcfd87a9..d0abffcbac4 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomConfigPayloadBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomConfigPayloadBuilder.java @@ -169,9 +169,23 @@ public class DomConfigPayloadBuilder { // Check for legacy (pre Vespa 6) usage throw new IllegalArgumentException("The 'index' attribute on config elements is not supported - use <item>"); } else if (element.hasAttribute("operation")) { - // inner array, currently the only supported operation is 'append' - verifyLegalOperation(element); - ConfigPayloadBuilder childPayloadBuilder = payloadBuilder.getArray(name).append(); + // inner array, the supported operations are 'append' and 'clear' + String operation = verifyLegalOperation(element); + ConfigPayloadBuilder childPayloadBuilder; + switch (operation) { + case "append": + childPayloadBuilder = payloadBuilder.getArray(name).append(); + break; + case "clear": + // Clear array if it exists, use the existing builder + // Creating the array happens when handling the children ('item's) + if (payloadBuilder.arrayExists(name)) + payloadBuilder.clearArray(name); + childPayloadBuilder = payloadBuilder; + break; + default: + throw new RuntimeException("Unknown operation '" + operation + "'"); + } //Cursor array = node.setArray(name); for (Element child : children) { //Cursor struct = array.addObject(); @@ -233,11 +247,12 @@ public class DomConfigPayloadBuilder { } } - private void verifyLegalOperation(Element currElem) { + private String verifyLegalOperation(Element currElem) { String operation = currElem.getAttribute("operation"); - if (! operation.equalsIgnoreCase("append")) - throw new ConfigurationRuntimeException("The only supported array operation is 'append', got '" + if (! Arrays.asList("append", "clear").contains(operation)) + throw new ConfigurationRuntimeException("The supported array operations are 'append' and 'clear', got '" + operation + "' at XML node '" + XML.getNodePath(currElem, " > ") + "'."); + return operation; } } |