diff options
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.java | 17 |
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() { |