diff --git a/model/src/main/java/org/onehippo/cm/model/parser/ConfigSourceParser.java b/model/src/main/java/org/onehippo/cm/model/parser/ConfigSourceParser.java index b2f41db..987d1c1 100644 --- a/model/src/main/java/org/onehippo/cm/model/parser/ConfigSourceParser.java +++ b/model/src/main/java/org/onehippo/cm/model/parser/ConfigSourceParser.java @@ -16,6 +16,7 @@ package org.onehippo.cm.model.parser; import java.net.URI; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -44,6 +45,7 @@ import static org.onehippo.cm.model.Constants.META_IGNORE_REORDERED_CHILDREN; import static org.onehippo.cm.model.Constants.META_ORDER_BEFORE_KEY; import static org.onehippo.cm.model.Constants.META_RESIDUAL_CHILD_NODE_CATEGORY_KEY; import static org.onehippo.cm.model.Constants.URI_KEY; +import static org.yaml.snakeyaml.nodes.NodeId.scalar; public class ConfigSourceParser extends SourceParser { @@ -175,7 +177,13 @@ public class ConfigSourceParser extends SourceParser { } private void constructWebFileBundleDefinition(final Node definitionNode, final ConfigSourceImpl source) throws ParserException { - final List nodes = asSequence(definitionNode); + List nodes; + if (definitionNode.getNodeId() == scalar) { + nodes = new ArrayList<>(); + nodes.add(asScalar(definitionNode)); + } else { + nodes = asSequence(definitionNode); + } for (Node node : nodes) { final String name = asStringScalar(node); for (Definition definition : source.getModifiableDefinitions()) { diff --git a/model/src/main/java/org/onehippo/cm/model/serializer/SourceSerializer.java b/model/src/main/java/org/onehippo/cm/model/serializer/SourceSerializer.java index 648506e..1773ba7 100644 --- a/model/src/main/java/org/onehippo/cm/model/serializer/SourceSerializer.java +++ b/model/src/main/java/org/onehippo/cm/model/serializer/SourceSerializer.java @@ -112,7 +112,10 @@ public class SourceSerializer extends AbstractBaseSerializer { if (contentDefinitionTuples.size() > 0) { definitionNodes.add(createStrOptionalSequenceTuple(DefinitionType.CONTENT.toString(), contentDefinitionTuples)); } - if (webFilesDefinitionNodes.size() > 0) { + if (webFilesDefinitionNodes.size() == 1) { + definitionNodes.add(new NodeTuple(createStrScalar(DefinitionType.WEBFILEBUNDLE.toString()), webFilesDefinitionNodes.get(0))); + } + else if (webFilesDefinitionNodes.size() > 1) { definitionNodes.add(createStrSeqTuple(DefinitionType.WEBFILEBUNDLE.toString(), webFilesDefinitionNodes, true)); } diff --git a/model/src/test/java/org/onehippo/cm/model/parser/SourceValidationTest.java b/model/src/test/java/org/onehippo/cm/model/parser/SourceValidationTest.java index 2961f16..30c117d 100644 --- a/model/src/test/java/org/onehippo/cm/model/parser/SourceValidationTest.java +++ b/model/src/test/java/org/onehippo/cm/model/parser/SourceValidationTest.java @@ -1038,19 +1038,19 @@ public class SourceValidationTest extends AbstractBaseTest { } @Test - public void webFileBundleWithScalarValue() { + public void webFileBundleWithNonStringScalarValue() { final String yaml = "definitions:\n" + " webfilebundle:\n" - + " scalar"; + + " 42"; final Node root = yamlParser.compose(new StringReader(yaml)); final Node webFilesValue = firstDefinitionTuple(root).getValueNode(); - assertParserException(root, webFilesValue, "Node must be a sequence"); + assertParserException(root, webFilesValue, "Scalar must be a string"); } @Test - public void webFileBundleWithNonStringValue() { + public void webFileBundleWithNonStringSequenceValue() { final String yaml = "definitions:\n" + " webfilebundle: [42]"; diff --git a/model/src/test/resources/parser/hierarchy_test/hcm-config/base/project1/module1/config.yaml b/model/src/test/resources/parser/hierarchy_test/hcm-config/base/project1/module1/config.yaml index 4c0fae8..43235ed 100644 --- a/model/src/test/resources/parser/hierarchy_test/hcm-config/base/project1/module1/config.yaml +++ b/model/src/test/resources/parser/hierarchy_test/hcm-config/base/project1/module1/config.yaml @@ -56,4 +56,4 @@ definitions: operation: add type: name value: ['some:mixin'] - webfilebundle: [site] + webfilebundle: site