summaryrefslogtreecommitdiffstats
path: root/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/template/TemplateParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/template/TemplateParser.java')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/template/TemplateParser.java17
1 files changed, 14 insertions, 3 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/template/TemplateParser.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/template/TemplateParser.java
index c81a07512b0..93a83a3d29f 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/template/TemplateParser.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/template/TemplateParser.java
@@ -27,7 +27,7 @@ class TemplateParser {
return parser;
}
- private enum Sentinel { END, EOT }
+ private enum Sentinel { ELSE, END, EOT }
private TemplateParser(TemplateDescriptor descriptor, Cursor start) {
this.descriptor = descriptor;
@@ -69,6 +69,11 @@ class TemplateParser {
String type = skipId().orElseThrow(() -> new BadTemplateException(current, "Missing section name"));
switch (type) {
+ case "else":
+ if (!sentinels.contains(Sentinel.ELSE))
+ throw new BadTemplateException(startOfType, "Extraneous 'else'");
+ parseEndDirective();
+ return Optional.of(Sentinel.ELSE);
case "end":
if (!sentinels.contains(Sentinel.END))
throw new BadTemplateException(startOfType, "Extraneous 'end'");
@@ -120,9 +125,15 @@ class TemplateParser {
parseEndDelimiter(true);
SectionList ifSectionList = new SectionList(current, formBuilder);
- parse(ifSectionList, EnumSet.of(Sentinel.END));
+ Sentinel ifSentinel = parse(ifSectionList, EnumSet.of(Sentinel.ELSE, Sentinel.END));
+
+ Optional<SectionList> elseSectionList = Optional.empty();
+ if (ifSentinel == Sentinel.ELSE) {
+ elseSectionList = Optional.of(new SectionList(current, formBuilder));
+ parse(elseSectionList.get(), EnumSet.of(Sentinel.END));
+ }
- sectionList.appendIfSection(negated, name, startOfName, current, ifSectionList);
+ sectionList.appendIfSection(negated, name, startOfName, current, ifSectionList, elseSectionList);
}
private void skipRequiredWhitespaces() {