Skip to content

Commit

Permalink
alwaysBlock parameter to control printing of original JsonObject nodes
Browse files Browse the repository at this point in the history
  • Loading branch information
amihaiemil committed Apr 20, 2024
1 parent 2972636 commit 3fe176a
Show file tree
Hide file tree
Showing 6 changed files with 87 additions and 22 deletions.
2 changes: 1 addition & 1 deletion src/main/java/com/amihaiemil/eoyaml/BaseYamlNode.java
Expand Up @@ -91,7 +91,7 @@ public final <T extends YamlNode> T asClass(final Class<T> clazz,
*
*/
@Override
public final String toString() {
public String toString() {
final StringWriter writer = new StringWriter();
final YamlPrinter printer = new RtYamlPrinter(writer);
try {
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/com/amihaiemil/eoyaml/JsonYamlMapping.java
Expand Up @@ -27,7 +27,11 @@
*/
package com.amihaiemil.eoyaml;

import com.amihaiemil.eoyaml.exceptions.YamlPrintException;

import javax.json.JsonObject;
import java.io.IOException;
import java.io.StringWriter;
import java.util.LinkedHashSet;
import java.util.Set;

Expand Down Expand Up @@ -86,4 +90,18 @@ public String value() {
}
};
}

@Override
public String toString() {
final StringWriter writer = new StringWriter();
final YamlPrinter printer = new RtYamlPrinter(writer, true);
try {
printer.print(this);
return writer.toString();
} catch (final IOException ex) {
throw new YamlPrintException(
"IOException when printing YAML", ex
);
}
}
}
18 changes: 18 additions & 0 deletions src/main/java/com/amihaiemil/eoyaml/JsonYamlSequence.java
Expand Up @@ -27,7 +27,11 @@
*/
package com.amihaiemil.eoyaml;

import com.amihaiemil.eoyaml.exceptions.YamlPrintException;

import javax.json.JsonArray;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Collection;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -73,4 +77,18 @@ public String value() {
}
};
}

@Override
public String toString() {
final StringWriter writer = new StringWriter();
final YamlPrinter printer = new RtYamlPrinter(writer, true);
try {
printer.print(this);
return writer.toString();
} catch (final IOException ex) {
throw new YamlPrintException(
"IOException when printing YAML", ex
);
}
}
}
33 changes: 31 additions & 2 deletions src/main/java/com/amihaiemil/eoyaml/RtYamlPrinter.java
Expand Up @@ -49,12 +49,26 @@ final class RtYamlPrinter implements YamlPrinter {
*/
private final String lineSeparator;

/**
* Print all the nodes in block-style.
*/
private final boolean alwaysBlock;

/**
* Constructor.
* @param writer Destination writer.
*/
RtYamlPrinter(final Writer writer) {
this(writer, System.lineSeparator());
this(writer, false);
}

/**
* Constructor.
* @param writer Destination writer.
* @param alwaysBlock Print all the nodes in block-style.
*/
RtYamlPrinter(final Writer writer, final boolean alwaysBlock) {
this(writer, System.lineSeparator(), alwaysBlock);
}

/**
Expand All @@ -63,15 +77,30 @@ final class RtYamlPrinter implements YamlPrinter {
* @param lineSeparator Line separator.
*/
RtYamlPrinter(final Writer writer, final String lineSeparator) {
this(writer, lineSeparator, false);
}

/**
* Constructor.
* @param writer Destination writer.
* @param lineSeparator Line separator.
* @param alwaysBlock Print all the nodes in block-style.
*/
RtYamlPrinter(
final Writer writer,
final String lineSeparator,
final boolean alwaysBlock
) {
this.writer = writer;
this.lineSeparator = lineSeparator;
this.alwaysBlock = alwaysBlock;
}

@Override
public void print(final YamlNode node) throws IOException {
try {
final YamlVisitor<String> visitor = new YamlPrintVisitor(
this.lineSeparator
this.lineSeparator, this.alwaysBlock
);
if (node.type().equals(Node.SCALAR)) {
this.writer.append("---")
Expand Down
37 changes: 18 additions & 19 deletions src/main/java/com/amihaiemil/eoyaml/YamlPrintVisitor.java
Expand Up @@ -53,43 +53,41 @@ final class YamlPrintVisitor implements YamlVisitor<String> {
private final String lineSeparator;

/**
* Ctor. Defaults to indentation 2 and the System line separator.
* Print each node as block-style always.
*/
YamlPrintVisitor() {
this(2, System.lineSeparator());
}

/**
* Ctor.
* @param indentation Number of indentation spaces.
*/
YamlPrintVisitor(final int indentation) {
this(indentation, System.lineSeparator());
}
private final boolean alwaysBlock;

/**
* Ctor.
* @param lineSeparator Line separator.
* @param alwaysBlock Print each node as block-style always.
*/
YamlPrintVisitor(final String lineSeparator) {
this(2, lineSeparator);
YamlPrintVisitor(final String lineSeparator, final boolean alwaysBlock) {
this(2, lineSeparator, alwaysBlock);
}

/**
* Ctor.
* @param indentation Number of spaces to use for indentation.
* @param lineSeparator Line separator.
* @param alwaysBlock Print each node as block-style always.
*/
YamlPrintVisitor(final int indentation, final String lineSeparator) {
YamlPrintVisitor(
final int indentation,
final String lineSeparator,
final boolean alwaysBlock
) {
this.indentation = indentation;
this.lineSeparator = lineSeparator;
this.alwaysBlock = alwaysBlock;
}
@Override
public String visitYamlMapping(final YamlMapping node) {
final StringWriter writer = new StringWriter();
final String printed;
if(node instanceof ReadFlowMapping
|| node instanceof JsonYamlMapping) {
if((node instanceof ReadFlowMapping
|| node instanceof JsonYamlMapping)
&& !this.alwaysBlock) {
this.printFlowMapping(node, writer);
printed = writer.toString();
} else {
Expand All @@ -110,8 +108,9 @@ public String visitYamlMapping(final YamlMapping node) {
public String visitYamlSequence(final YamlSequence node) {
final StringWriter writer = new StringWriter();
final String printed;
if(node instanceof ReadFlowSequence
|| node instanceof JsonYamlSequence) {
if((node instanceof ReadFlowSequence
|| node instanceof JsonYamlSequence)
&& !this.alwaysBlock) {
this.printFlowSequence(node, writer);
printed = writer.toString();
} else {
Expand Down
Expand Up @@ -132,6 +132,7 @@ public void canMapJsonObject(){
MatcherAssert.assertThat(
jsonMapping, Matchers.equalTo(expected)
);
System.out.println(jsonMapping);
}

/**
Expand Down

0 comments on commit 3fe176a

Please sign in to comment.