Skip to content

Commit

Permalink
#605 printFlowSequence
Browse files Browse the repository at this point in the history
  • Loading branch information
amihaiemil committed Apr 13, 2024
1 parent 731f686 commit 616d96e
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 58 deletions.
2 changes: 0 additions & 2 deletions src/main/java/com/amihaiemil/eoyaml/ReadFlowMapping.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,6 @@
* @author Mihai Andronache ([email protected])
* @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).
*/
Expand Down
110 changes: 72 additions & 38 deletions src/main/java/com/amihaiemil/eoyaml/YamlPrintVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@

import java.io.StringWriter;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Set;

Expand Down Expand Up @@ -85,13 +86,13 @@ final class YamlPrintVisitor implements YamlVisitor<String> {
}
@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(
Expand All @@ -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
Expand Down Expand Up @@ -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()) {
Expand All @@ -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);
Expand All @@ -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("{");
Expand All @@ -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<YamlNode> values = node.values();
for (final YamlNode value : values) {
writer.append(this.visitYamlNode(value));
i++;
if(i<values.size()) {
writer.append(", ");
}
}
writer.append("]");
}

/**
Expand Down
18 changes: 3 additions & 15 deletions src/test/java/com/amihaiemil/eoyaml/ReadFlowMappingTestCase.java
Original file line number Diff line number Diff line change
Expand Up @@ -89,11 +89,11 @@ public void returnsKeys() {
final Iterator<YamlNode> 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(),
Expand Down Expand Up @@ -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(
Expand Down
4 changes: 4 additions & 0 deletions src/test/resources/typicalSpringApplicationProperties.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ spring:
mail:
host: mailhog.keycloak.svc.cluster.local
port: 1025
users: {
admin: mihai,
other: vlad
}
cloud:
kubernetes:
enabled: true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 616d96e

Please sign in to comment.