diff --git a/modello-maven-plugin/src/it/snakeyaml/invoker.properties b/modello-maven-plugin/src/it/snakeyaml/invoker.properties
new file mode 100644
index 000000000..e3ae08259
--- /dev/null
+++ b/modello-maven-plugin/src/it/snakeyaml/invoker.properties
@@ -0,0 +1 @@
+invoker.java.version = 1.5+
diff --git a/modello-maven-plugin/src/it/snakeyaml/pom.xml b/modello-maven-plugin/src/it/snakeyaml/pom.xml
new file mode 100644
index 000000000..59c267caf
--- /dev/null
+++ b/modello-maven-plugin/src/it/snakeyaml/pom.xml
@@ -0,0 +1,58 @@
+
+
+ 4.0.0
+
+ org.codehaus.modello.its
+ snakeyaml
+ 0.1-SNAPSHOT
+
+
+
+ org.codehaus.modello
+ modello-plugin-snakeyaml
+ @project.version@
+
+
+
+
+
+ test
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.0
+
+ @java.version@
+ @java.version@
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.22.2
+
+
+ org.codehaus.modello
+ modello-maven-plugin
+ @project.version@
+
+ 1.0.0
+ true
+
+ src/main/mdo/model.mdo
+
+
+
+
+ standard
+
+ java
+ snakeyaml-writer
+
+
+
+
+
+
+
diff --git a/modello-maven-plugin/src/it/snakeyaml/src/main/mdo/model.mdo b/modello-maven-plugin/src/it/snakeyaml/src/main/mdo/model.mdo
new file mode 100644
index 000000000..4b01e9643
--- /dev/null
+++ b/modello-maven-plugin/src/it/snakeyaml/src/main/mdo/model.mdo
@@ -0,0 +1,37 @@
+
+
+
+ model
+ Model
+
+
+ package
+ org.plexus.modello.demo.model
+
+
+
+
+
+ Root
+ 1.0.0+
+
+
+ simpleField
+ String
+ 1.0.0+
+
+
+
+
+
diff --git a/modello-maven-plugin/src/it/snakeyaml/src/test/java/org/plexus/modello/demo/model/RootTest.java b/modello-maven-plugin/src/it/snakeyaml/src/test/java/org/plexus/modello/demo/model/RootTest.java
new file mode 100644
index 000000000..9320a7d2d
--- /dev/null
+++ b/modello-maven-plugin/src/it/snakeyaml/src/test/java/org/plexus/modello/demo/model/RootTest.java
@@ -0,0 +1,35 @@
+package org.plexus.modello.demo.model;
+
+import org.plexus.modello.demo.model.io.snakeyaml.*;
+
+import java.io.*;
+
+public class RootTest {
+ private static Root createRoot(String fieldValue) {
+ Root r = new Root();
+ r.setSimpleField(fieldValue);
+ return r;
+ }
+
+ private static String asYamlString(Root root) throws IOException {
+ ModelSnakeYamlWriter writer = new ModelSnakeYamlWriter();
+
+ try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ OutputStreamWriter osw = new OutputStreamWriter(baos)) {
+ writer.write(osw, root);
+ return baos.toString();
+ }
+ }
+
+ public void testWritingYaml() throws IOException {
+ Root root = createRoot("modello IT");
+
+ String rootAsYaml = asYamlString(root);
+
+ String expected = "%YAML 1.1" + "\n" // directive used to identify the version of YAML
+ + "---" + "\n" // document separator
+ + "\"simpleField\": \"modello IT\"" + "\n"; // actual Root
+ assert expected.equals(rootAsYaml): "Actual: [" + rootAsYaml + "]";
+ }
+}
+
diff --git a/modello-plugins/modello-plugin-snakeyaml/src/main/java/org/codehaus/modello/plugin/snakeyaml/SnakeYamlWriterGenerator.java b/modello-plugins/modello-plugin-snakeyaml/src/main/java/org/codehaus/modello/plugin/snakeyaml/SnakeYamlWriterGenerator.java
index 1d2833a68..ff528dbe8 100644
--- a/modello-plugins/modello-plugin-snakeyaml/src/main/java/org/codehaus/modello/plugin/snakeyaml/SnakeYamlWriterGenerator.java
+++ b/modello-plugins/modello-plugin-snakeyaml/src/main/java/org/codehaus/modello/plugin/snakeyaml/SnakeYamlWriterGenerator.java
@@ -82,8 +82,11 @@ private void generateSnakeYamlWriter()
jClass.addImport( "org.yaml.snakeyaml.DumperOptions" );
jClass.addImport( "org.yaml.snakeyaml.DumperOptions.Version" );
+ jClass.addImport( "org.yaml.snakeyaml.DumperOptions.FlowStyle" );
+ jClass.addImport( "org.yaml.snakeyaml.DumperOptions.ScalarStyle" );
jClass.addImport( "org.yaml.snakeyaml.emitter.Emitable" );
jClass.addImport( "org.yaml.snakeyaml.emitter.Emitter" );
+ jClass.addImport( "org.yaml.snakeyaml.error.Mark" );
jClass.addImport( "org.yaml.snakeyaml.events.DocumentEndEvent" );
jClass.addImport( "org.yaml.snakeyaml.events.DocumentStartEvent" );
jClass.addImport( "org.yaml.snakeyaml.events.ImplicitTuple" );
@@ -199,7 +202,7 @@ private void writeClass( ModelClass modelClass, JClass jClass )
JSourceCode sc = marshall.getSourceCode();
- sc.add( "generator.emit( new MappingStartEvent( null, null, true, null, null, false ) );" );
+ sc.add( "generator.emit( new MappingStartEvent( null, null, true, null, null, FlowStyle.BLOCK ) );" );
ModelField contentField = null;
@@ -361,7 +364,7 @@ private void writeClass( ModelClass modelClass, JClass jClass )
}
else
{
- sc.add( "generator.emit( new MappingStartEvent( null, null, true, null, null, false ) );" );
+ sc.add( "generator.emit( new MappingStartEvent( null, null, true, null, null, FlowStyle.BLOCK ) );" );
}
@@ -406,7 +409,7 @@ private void writeClass( ModelClass modelClass, JClass jClass )
if ( xmlAssociationMetadata.isMapExplode() )
{
- sc.add( "generator.emit( new MappingStartEvent( null, null, true, null, null, false ) );" );
+ sc.add( "generator.emit( new MappingStartEvent( null, null, true, null, null, FlowStyle.BLOCK) );" );
writeScalarKey( sc, "key" );
writeScalar( sc, "key" );
writeScalarKey( sc, "value" );
@@ -463,9 +466,16 @@ private void writeScalarKey( JSourceCode sc, String key )
private void writeScalar( JSourceCode sc, String value )
{
- sc.add( "generator.emit( new ScalarEvent( null, null, new ImplicitTuple( true, true ), "
+ sc.add( "{" );
+ sc.indent();
+ sc.add( "String anchor = null, tag = null;" );
+ sc.add( "Mark startMark = null, endMark = null;" );
+ sc.add( "ScalarStyle style = ScalarStyle.DOUBLE_QUOTED;" );
+ sc.add( "generator.emit( new ScalarEvent( anchor, tag, new ImplicitTuple( true, true ), "
+ value
- + ", null, null, ' ' ) );" );
+ + ", startMark, endMark, style ) );" );
+ sc.unindent();
+ sc.add( "}" );
}
}