summaryrefslogtreecommitdiffstats
path: root/config-model/src/main
diff options
context:
space:
mode:
authorHarald Musum <musum@oath.com>2018-11-01 14:44:09 +0100
committerHarald Musum <musum@oath.com>2018-11-01 14:47:08 +0100
commit6ada0742477c575cc6941704500c0ee8c9ac5596 (patch)
tree6a821cf6743c8ab6cc4210065cb6231a447ee1d8 /config-model/src/main
parent66bf0e3bda9b631da1e0c8e4d7c2bb51a183fb64 (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.java27
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;
}
}