diff --git a/src/main/java/com/amihaiemil/eoyaml/ReadFlowMapping.java b/src/main/java/com/amihaiemil/eoyaml/ReadFlowMapping.java index 26fdd10d..6bc75c78 100644 --- a/src/main/java/com/amihaiemil/eoyaml/ReadFlowMapping.java +++ b/src/main/java/com/amihaiemil/eoyaml/ReadFlowMapping.java @@ -41,8 +41,6 @@ * @author Mihai Andronache (amihaiemil@gmail.com) * @version $Id$ * @since 8.0.0 - * @todo #601:30min Modify the yaml printing visitor, so it prints the flow - * nodes in Flow style instead of block. * @todo #615:60min Implement the comment() method properly (at the moment * it always assumes there is no comment). */ diff --git a/src/main/java/com/amihaiemil/eoyaml/YamlPrintVisitor.java b/src/main/java/com/amihaiemil/eoyaml/YamlPrintVisitor.java index 586c3d28..71e206ae 100644 --- a/src/main/java/com/amihaiemil/eoyaml/YamlPrintVisitor.java +++ b/src/main/java/com/amihaiemil/eoyaml/YamlPrintVisitor.java @@ -29,6 +29,7 @@ import java.io.StringWriter; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.Set; @@ -85,13 +86,13 @@ final class YamlPrintVisitor implements YamlVisitor { } @Override public String visitYamlMapping(final YamlMapping node) { - StringWriter writer = new StringWriter(); + final StringWriter writer = new StringWriter(); final String printed; if(node instanceof ReadFlowMapping) { - writer = this.printFlowMapping(node, writer); + this.printFlowMapping(node, writer); printed = writer.toString(); } else { - writer = this.printBlockMapping(node, writer); + this.printBlockMapping(node, writer); final String printedMapping = writer.toString(); if (printedMapping.length() > 0) { printed = printedMapping.substring( @@ -107,36 +108,22 @@ public String visitYamlMapping(final YamlMapping node) { @Override public String visitYamlSequence(final YamlSequence node) { final StringWriter writer = new StringWriter(); - for(final YamlNode value : node.values()) { - writer.append(this.printPossibleComment(value)); - if(value == null || value.type().equals(Node.SCALAR)) { - writer.append("- "); - writer.append(this.visitYamlNode(value)); + final String printed; + if(node instanceof ReadFlowSequence) { + this.printFlowSequence(node, writer); + printed = writer.toString(); + } else { + this.printBlockSequence(node, writer); + final String printedSequence = writer.toString(); + if (printedSequence.length() > 0) { + printed = printedSequence.substring( + 0, printedSequence.length() - 1 + ); } else { - final String printedValue = this.visitYamlNode(value); - if("null".equals(printedValue) || "[]".equals(printedValue) - || "{}".equals(printedValue) - ) { - writer.append("- "); - writer.append(printedValue); - } else { - writer.append("-"); - writer.append(this.lineSeparator); - writer.append(this.indent(printedValue, this.indentation)); - } + printed = printedSequence; } - writer.append(this.lineSeparator); - } - final String printedSequence = writer.toString(); - final String trimmed; - if (printedSequence.length() > 0) { - trimmed = printedSequence.substring( - 0, printedSequence.length() - 1 - ); - } else { - trimmed = printedSequence; } - return trimmed; + return printed; } @Override @@ -310,9 +297,8 @@ private String printPossibleComment(final YamlNode node) { * Write a block mapping to the given StringWriter. * @param node Block YamlMapping to print. * @param writer String writer. - * @return String writer. */ - private StringWriter printBlockMapping( + private void printBlockMapping( final YamlMapping node, final StringWriter writer ) { for (final YamlNode key : node.keys()) { @@ -331,8 +317,8 @@ private StringWriter printBlockMapping( writer.append(this.visitYamlNode(value)); } else { final String printedValue = this.visitYamlNode(value); - if("null".equals(printedValue) || "[]".equals(printedValue) - || "{}".equals(printedValue) + if("null".equals(printedValue) || printedValue.startsWith("[") + || printedValue.startsWith("{") ) { writer.append(": "); writer.append(printedValue); @@ -344,16 +330,14 @@ private StringWriter printBlockMapping( } writer.append(this.lineSeparator); } - return writer; } /** * Write a flow mapping to the given StringWriter. * @param node Flow YamlMapping to print. * @param writer String writer. - * @return String writer. */ - private StringWriter printFlowMapping( + private void printFlowMapping( final YamlMapping node, final StringWriter writer ) { writer.append("{"); @@ -370,7 +354,57 @@ private StringWriter printFlowMapping( } } writer.append("}"); - return writer; + } + + /** + * Write a block sequence to the given StringWriter. + * @param node Block YamlSequence to print. + * @param writer String writer. + */ + private void printBlockSequence( + final YamlSequence node, final StringWriter writer + ) { + for(final YamlNode value : node.values()) { + writer.append(this.printPossibleComment(value)); + if(value == null || value.type().equals(Node.SCALAR)) { + writer.append("- "); + writer.append(this.visitYamlNode(value)); + } else { + final String printedValue = this.visitYamlNode(value); + if("null".equals(printedValue) || printedValue.startsWith("[") + || printedValue.startsWith("{") + ) { + writer.append("- "); + writer.append(printedValue); + } else { + writer.append("-"); + writer.append(this.lineSeparator); + writer.append(this.indent(printedValue, this.indentation)); + } + } + writer.append(this.lineSeparator); + } + } + + /** + * Write a flow sequence to the given StringWriter. + * @param node Flow YamlSequence to print. + * @param writer String writer. + */ + private void printFlowSequence( + final YamlSequence node, final StringWriter writer + ) { + writer.append("["); + int i=0; + final Collection values = node.values(); + for (final YamlNode value : values) { + writer.append(this.visitYamlNode(value)); + i++; + if(i iterator = keys.iterator(); MatcherAssert.assertThat( iterator.next().toString(), - Matchers.equalTo("- a") + Matchers.equalTo("[a]") ); MatcherAssert.assertThat( iterator.next().toString(), - Matchers.equalTo("- c" + System.lineSeparator() + "- g") + Matchers.equalTo("[c, g]") ); MatcherAssert.assertThat( iterator.next().toString(), @@ -212,19 +212,7 @@ public void returnsAllValues() { MatcherAssert.assertThat( iterator.next().toString(), Matchers.equalTo( - "- a" - + System.lineSeparator() - + "- \"0,3\"" - + System.lineSeparator() - + "- \"2, 3, 4\"" - + System.lineSeparator() - + "-" - + System.lineSeparator() - + " {ii: \"5,6,7\"}" - + System.lineSeparator() - + "- b" - + System.lineSeparator() - + "- c" + "[a, \"0,3\", \"2, 3, 4\", {ii: \"5,6,7\"}, b, c]" ) ); MatcherAssert.assertThat( diff --git a/src/test/resources/typicalSpringApplicationProperties.yml b/src/test/resources/typicalSpringApplicationProperties.yml index a41231bf..4714b967 100644 --- a/src/test/resources/typicalSpringApplicationProperties.yml +++ b/src/test/resources/typicalSpringApplicationProperties.yml @@ -27,6 +27,10 @@ spring: mail: host: mailhog.keycloak.svc.cluster.local port: 1025 + users: { + admin: mihai, + other: vlad + } cloud: kubernetes: enabled: true diff --git a/src/test/resources/typicalSpringApplicationProperties_printed.yml b/src/test/resources/typicalSpringApplicationProperties_printed.yml index 2595b1fb..aaba0748 100644 --- a/src/test/resources/typicalSpringApplicationProperties_printed.yml +++ b/src/test/resources/typicalSpringApplicationProperties_printed.yml @@ -23,12 +23,11 @@ spring: map-mains-string: "{a:b, c:d, e:f}" null-string: "null" other: null - scope: - - api - - read_user + scope: [api, read_user] mail: host: mailhog.keycloak.svc.cluster.local port: 1025 + users: {admin: mihai, other: vlad} cloud: kubernetes: enabled: true