Issue 124: Deprecate DumperOptions.explicitRoot
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index de62bd8..bad3c5d 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -8,6 +8,9 @@
 	<body>

 	    <release version="1.9-SNAPSHOT" date="in Mercurial" description="Development">
             <action dev="py4fun" type="add" issue="124">

+                Deprecate DumperOptions.explicitRoot (2011-07-20)

+            </action>

+            <action dev="py4fun" type="add" issue="124">

                 Add Yaml.dumpAs(Object, Tag.MAP) method. JavaBeanDumper is marked as deprecated (2011-07-16)

             </action>

             <action dev="py4fun" type="add" issue="127">

diff --git a/src/main/java/org/yaml/snakeyaml/DumperOptions.java b/src/main/java/org/yaml/snakeyaml/DumperOptions.java
index 74ae92c..733931e 100644
--- a/src/main/java/org/yaml/snakeyaml/DumperOptions.java
+++ b/src/main/java/org/yaml/snakeyaml/DumperOptions.java
@@ -161,6 +161,10 @@
     private LineBreak lineBreak = LineBreak.UNIX;
     private boolean explicitStart = false;
     private boolean explicitEnd = false;
+
+    /**
+     * @deprecated do not use explicit root Tag
+     */
     private Tag explicitRoot = null;
     private Version version = null;
     private Map<String, String> tags = null;
@@ -283,6 +287,9 @@
         return defaultFlowStyle;
     }
 
+    /**
+     * @deprecated do not use explicit root Tag
+     */
     public Tag getExplicitRoot() {
         return explicitRoot;
     }
@@ -301,6 +308,7 @@
      * @param expRoot
      *            tag to be used for the root node. (JavaBeans may use
      *            Tag.MAP="tag:yaml.org,2002:map")
+     * @deprecated do not use explicit root Tag
      */
     public void setExplicitRoot(Tag expRoot) {
         if (expRoot == null) {
diff --git a/src/main/java/org/yaml/snakeyaml/Yaml.java b/src/main/java/org/yaml/snakeyaml/Yaml.java
index 19437b4..b415b43 100644
--- a/src/main/java/org/yaml/snakeyaml/Yaml.java
+++ b/src/main/java/org/yaml/snakeyaml/Yaml.java
@@ -256,9 +256,14 @@
      * @param output

      *            stream to write to

      */

+    @SuppressWarnings("deprecation")

     public void dumpAll(Iterator<? extends Object> data, Writer output) {

+        dumpAll(data, output, dumperOptions.getExplicitRoot());

+    }

+

+    private void dumpAll(Iterator<? extends Object> data, Writer output, Tag rootTag) {

         Serializer serializer = new Serializer(new Emitter(output, dumperOptions), resolver,

-                dumperOptions);

+                dumperOptions, rootTag);

         try {

             serializer.open();

             while (data.hasNext()) {

@@ -309,9 +314,12 @@
      * @return YAML String

      */

     public String dumpAs(Object data, Tag rootTag) {

-        dumperOptions.setExplicitRoot(rootTag);

         representer.setDefaultFlowStyle(FlowStyle.BLOCK);

-        return dump(data);

+        List<Object> list = new ArrayList<Object>(1);

+        list.add(data);

+        StringWriter buffer = new StringWriter();

+        dumpAll(list.iterator(), buffer, rootTag);

+        return buffer.toString();

     }

 

     /**

@@ -324,7 +332,9 @@
      */

     public List<Event> serialize(Node data) {

         SilentEmitter emitter = new SilentEmitter();

-        Serializer serializer = new Serializer(emitter, resolver, dumperOptions);

+        @SuppressWarnings("deprecation")

+        Serializer serializer = new Serializer(emitter, resolver, dumperOptions,

+                dumperOptions.getExplicitRoot());

         try {

             serializer.open();

             serializer.serialize(data);

diff --git a/src/main/java/org/yaml/snakeyaml/serializer/Serializer.java b/src/main/java/org/yaml/snakeyaml/serializer/Serializer.java
index 98b4620..ef89b51 100644
--- a/src/main/java/org/yaml/snakeyaml/serializer/Serializer.java
+++ b/src/main/java/org/yaml/snakeyaml/serializer/Serializer.java
@@ -61,7 +61,7 @@
     private Boolean closed;
     private Tag explicitRoot;
 
-    public Serializer(Emitable emitter, Resolver resolver, DumperOptions opts) {
+    public Serializer(Emitable emitter, Resolver resolver, DumperOptions opts, Tag rootTag) {
         this.emitter = emitter;
         this.resolver = resolver;
         this.explicitStart = opts.isExplicitStart();
@@ -74,7 +74,7 @@
         this.anchors = new HashMap<Node, String>();
         this.lastAnchorId = 0;
         this.closed = null;
-        this.explicitRoot = opts.getExplicitRoot();
+        this.explicitRoot = rootTag;
     }
 
     public void open() throws IOException {
diff --git a/src/test/java/org/yaml/snakeyaml/DumperOptionsTest.java b/src/test/java/org/yaml/snakeyaml/DumperOptionsTest.java
index 5515df3..10bed8c 100644
--- a/src/test/java/org/yaml/snakeyaml/DumperOptionsTest.java
+++ b/src/test/java/org/yaml/snakeyaml/DumperOptionsTest.java
@@ -322,6 +322,7 @@
         assertEquals("\"\\xdcber\"\n", yaml.dump("\u00DCber"));
     }
 
+    @SuppressWarnings("deprecation")
     public void testSetRootTag() {
         DumperOptions options = new DumperOptions();
         try {
diff --git a/src/test/java/org/yaml/snakeyaml/JavaBeanTimeStampTest.java b/src/test/java/org/yaml/snakeyaml/JavaBeanTimeStampTest.java
index 23041e7..47288fb 100644
--- a/src/test/java/org/yaml/snakeyaml/JavaBeanTimeStampTest.java
+++ b/src/test/java/org/yaml/snakeyaml/JavaBeanTimeStampTest.java
@@ -51,11 +51,8 @@
         javaBeanToDump.setTimestamp(stamp);

         Date date = new Date(1001376000000L);

         javaBeanToDump.setDate(date);

-        DumperOptions options = new DumperOptions();

-        options.setDefaultFlowStyle(FlowStyle.BLOCK);

-        options.setExplicitRoot(Tag.MAP);

-        Yaml yaml = new Yaml(options);

-        String dumpStr = yaml.dump(javaBeanToDump);

+        Yaml yaml = new Yaml();

+        String dumpStr = yaml.dumpAs(javaBeanToDump, Tag.MAP);

         assertEquals("date: 2001-09-25T00:00:00Z\ntimestamp: 2001-09-09T01:46:40Z\n", dumpStr);

         Yaml loader = new Yaml();

         JavaBeanWithSqlTimestamp javaBeanToLoad = loader.loadAs(dumpStr,

diff --git a/src/test/java/org/yaml/snakeyaml/JavaBeanWithNullValuesTest.java b/src/test/java/org/yaml/snakeyaml/JavaBeanWithNullValuesTest.java
index dc71394..7edcab0 100644
--- a/src/test/java/org/yaml/snakeyaml/JavaBeanWithNullValuesTest.java
+++ b/src/test/java/org/yaml/snakeyaml/JavaBeanWithNullValuesTest.java
@@ -102,7 +102,6 @@
         options.setDefaultScalarStyle(DumperOptions.ScalarStyle.DOUBLE_QUOTED);
         options.setExplicitStart(true);
         options.setExplicitEnd(true);
-        options.setExplicitRoot(Tag.MAP);
         Yaml yaml = new Yaml(new CustomRepresenter(), options);
         javaBeanWithNullValues.setBoolean1(null);
         javaBeanWithNullValues.setDate(new Date(System.currentTimeMillis()));
@@ -114,7 +113,7 @@
         javaBeanWithNullValues.setString(null); // ok
         javaBeanWithNullValues.setTimestamp(new Timestamp(System.currentTimeMillis()));
 
-        String dumpStr = yaml.dump(javaBeanWithNullValues);
+        String dumpStr = yaml.dumpAs(javaBeanWithNullValues, Tag.MAP);
         // System.out.println(dumpStr);
         assertFalse("No explicit root tag must be used.",
                 dumpStr.contains("JavaBeanWithNullValues"));
diff --git a/src/test/java/org/yaml/snakeyaml/constructor/ImplicitTagsTest.java b/src/test/java/org/yaml/snakeyaml/constructor/ImplicitTagsTest.java
index 343e90c..16cda4f 100644
--- a/src/test/java/org/yaml/snakeyaml/constructor/ImplicitTagsTest.java
+++ b/src/test/java/org/yaml/snakeyaml/constructor/ImplicitTagsTest.java
@@ -23,7 +23,6 @@
 

 import junit.framework.TestCase;

 

-import org.yaml.snakeyaml.DumperOptions;

 import org.yaml.snakeyaml.TypeDescription;

 import org.yaml.snakeyaml.Util;

 import org.yaml.snakeyaml.Yaml;

@@ -60,14 +59,12 @@
         map.put("id", 3);

         car1.setMap(map);

         car1.setYear("2008");

-        DumperOptions options = new DumperOptions();

-        options.setExplicitRoot(Tag.MAP);

-        String carYaml1 = new Yaml(options).dump(car1);

+        String carYaml1 = new Yaml().dumpAs(car1, Tag.MAP);

         assertEquals(Util.getLocalResource("constructor/car-without-root-tag.yaml"), carYaml1);

         //

         Constructor contructor = new Constructor(CarWithWheel.class);

         CarWithWheel car2 = (CarWithWheel) new Yaml(contructor).load(carYaml1);

-        String carYaml2 = new Yaml(options).dump(car2);

+        String carYaml2 = new Yaml().dumpAs(car2, Tag.MAP);

         assertEquals(carYaml1, carYaml2);

     }

 

diff --git a/src/test/java/org/yaml/snakeyaml/generics/BirdTest.java b/src/test/java/org/yaml/snakeyaml/generics/BirdTest.java
index 9fbe65e..4973ab6 100644
--- a/src/test/java/org/yaml/snakeyaml/generics/BirdTest.java
+++ b/src/test/java/org/yaml/snakeyaml/generics/BirdTest.java
@@ -20,7 +20,6 @@
 

 import junit.framework.TestCase;

 

-import org.yaml.snakeyaml.DumperOptions;

 import org.yaml.snakeyaml.Yaml;

 import org.yaml.snakeyaml.nodes.Tag;

 

@@ -33,10 +32,8 @@
         home = new Nest();

         home.setHeight(3);

         bird.setHome(home);

-        DumperOptions options = new DumperOptions();

-        options.setExplicitRoot(Tag.MAP);

-        Yaml yaml = new Yaml(options);

-        String output = yaml.dump(bird);

+        Yaml yaml = new Yaml();

+        String output = yaml.dumpAs(bird, Tag.MAP);

         Bird parsed;

         String javaVendor = System.getProperty("java.vm.name");

         Yaml loader = new Yaml();

@@ -53,7 +50,7 @@
                     .println("JDK requires global tags for JavaBean properties with Java Generics. java.vm.name: "

                             + javaVendor);

             assertEquals("global tags are inevitable here.",

-                    "home: !!org.yaml.snakeyaml.generics.Nest {height: 3}\nname: Eagle\n", output);

+                    "home: !!org.yaml.snakeyaml.generics.Nest\n  height: 3\nname: Eagle\n", output);

             parsed = loader.loadAs(output, Bird.class);

         }

         assertEquals(bird.getName(), parsed.getName());

diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue55/YamlFieldAccessCollectionTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue55/YamlFieldAccessCollectionTest.java
index 89be26f..f17e4fb 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue55/YamlFieldAccessCollectionTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue55/YamlFieldAccessCollectionTest.java
@@ -21,8 +21,6 @@
 
 import junit.framework.TestCase;
 
-import org.yaml.snakeyaml.DumperOptions;
-import org.yaml.snakeyaml.DumperOptions.FlowStyle;
 import org.yaml.snakeyaml.Util;
 import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.introspector.BeanAccess;
@@ -34,7 +32,7 @@
     public void testYaml() {
         Blog original = createTestBlog();
         Yaml yamlDumper = constructYamlDumper();
-        String serialized = yamlDumper.dump(original);
+        String serialized = yamlDumper.dumpAs(original, Tag.MAP);
         // System.out.println(serialized);
         assertEquals(Util.getLocalResource("issues/issue55_1.txt"), serialized);
         Yaml blogLoader = new Yaml();
@@ -74,10 +72,7 @@
     protected Yaml constructYamlDumper() {
         Representer representer = new Representer();
         representer.getPropertyUtils().setBeanAccess(BeanAccess.FIELD);
-        DumperOptions options = new DumperOptions();
-        options.setDefaultFlowStyle(FlowStyle.BLOCK);
-        options.setExplicitRoot(Tag.MAP);
-        Yaml yaml = new Yaml(representer, options);
+        Yaml yaml = new Yaml(representer);
         return yaml;
     }
 
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue95/ArrayInGenericCollectionTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue95/ArrayInGenericCollectionTest.java
index 2179a83..f0bc298 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue95/ArrayInGenericCollectionTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue95/ArrayInGenericCollectionTest.java
@@ -26,7 +26,6 @@
 import junit.framework.TestCase;
 
 import org.junit.Assert;
-import org.yaml.snakeyaml.DumperOptions;
 import org.yaml.snakeyaml.TypeDescription;
 import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.constructor.Constructor;
@@ -136,12 +135,10 @@
     }
 
     public void testNoTags() {
-        DumperOptions options = new DumperOptions();
-        options.setExplicitRoot(Tag.MAP);
-        Yaml yaml2dump = new Yaml(options);
+        Yaml yaml2dump = new Yaml();
         yaml2dump.setBeanAccess(BeanAccess.FIELD);
         B data = createB();
-        String dump = yaml2dump.dump(data);
+        String dump = yaml2dump.dumpAs(data, Tag.MAP);
         // System.out.println(dump);
         assertEquals("meta:\n- [whatever]\n- [something, something else]\n", dump);
         //
diff --git a/src/test/java/org/yaml/snakeyaml/javabeans/HouseTest.java b/src/test/java/org/yaml/snakeyaml/javabeans/HouseTest.java
index 5cc737e..f820bfa 100644
--- a/src/test/java/org/yaml/snakeyaml/javabeans/HouseTest.java
+++ b/src/test/java/org/yaml/snakeyaml/javabeans/HouseTest.java
@@ -60,7 +60,7 @@
         assertNotNull(loadedHouse);

         assertEquals("Wall Street", loadedHouse.getStreet());

         // dump again

-        String yaml3 = beanDumper.dump(loadedHouse);

+        String yaml3 = beanDumper.dumpAs(loadedHouse, Tag.MAP);

         assertEquals(yaml, yaml3);

     }

 

@@ -106,7 +106,7 @@
         List<Room> loadedRooms = loadedHouse.getRooms();

         assertEquals(rooms, loadedRooms);

         // dump again

-        String yaml3 = beanDumper.dump(loadedHouse);

+        String yaml3 = beanDumper.dumpAs(loadedHouse, Tag.MAP);

         assertEquals(yaml, yaml3);

     }

 

diff --git a/src/test/java/org/yaml/snakeyaml/recursive/Human_WithArrayOfChildrenTest.java b/src/test/java/org/yaml/snakeyaml/recursive/Human_WithArrayOfChildrenTest.java
index 71abc0c..68a3915 100644
--- a/src/test/java/org/yaml/snakeyaml/recursive/Human_WithArrayOfChildrenTest.java
+++ b/src/test/java/org/yaml/snakeyaml/recursive/Human_WithArrayOfChildrenTest.java
@@ -21,7 +21,6 @@
 

 import junit.framework.TestCase;

 

-import org.yaml.snakeyaml.DumperOptions;

 import org.yaml.snakeyaml.TypeDescription;

 import org.yaml.snakeyaml.Util;

 import org.yaml.snakeyaml.Yaml;

@@ -164,11 +163,9 @@
     }

 

     public void testDumpChildrenArrayWithoutRootTag() throws IOException {

-        DumperOptions options = new DumperOptions();

-        options.setExplicitRoot(Tag.MAP);

-        Yaml yaml = new Yaml(options);

+        Yaml yaml = new Yaml();

         Human_WithArrayOfChildren son = createSon();

-        String output = yaml.dump(son);

+        String output = yaml.dumpAs(son, Tag.MAP);

         // System.out.println(output);

         String etalon = Util.getLocalResource("recursive/with-childrenArray-no-root-tag.yaml");

         assertEquals(etalon, output);

diff --git a/src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java b/src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java
index e8ba439..a009007 100644
--- a/src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java
+++ b/src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java
@@ -30,7 +30,6 @@
 

 import junit.framework.TestCase;

 

-import org.yaml.snakeyaml.DumperOptions;

 import org.yaml.snakeyaml.TypeDescription;

 import org.yaml.snakeyaml.Util;

 import org.yaml.snakeyaml.Yaml;

@@ -91,10 +90,8 @@
         father.setPartner(mother);

         mother.setPartner(father);

         mother.setBankAccountOwner(father);

-        DumperOptions options = new DumperOptions();

-        options.setExplicitRoot(Tag.MAP);

-        Yaml yaml = new Yaml(options);

-        String output = yaml.dump(father);

+        Yaml yaml = new Yaml();

+        String output = yaml.dumpAs(father, Tag.MAP);

         String etalon = Util.getLocalResource("recursive/generics/no-children-2.yaml");

         assertEquals(etalon, output);

         //

diff --git a/src/test/java/org/yaml/snakeyaml/ruby/RubyTest.java b/src/test/java/org/yaml/snakeyaml/ruby/RubyTest.java
index c43e3dd..e137951 100644
--- a/src/test/java/org/yaml/snakeyaml/ruby/RubyTest.java
+++ b/src/test/java/org/yaml/snakeyaml/ruby/RubyTest.java
@@ -41,9 +41,8 @@
         TestObject result = parseObject(Util.getLocalResource("ruby/ruby1.yaml"));

         DumperOptions options = new DumperOptions();

         options.setExplicitStart(true);

-        options.setExplicitRoot(Tag.MAP);

         Yaml yaml2 = new Yaml(options);

-        String output = yaml2.dump(result);

+        String output = yaml2.dumpAs(result, Tag.MAP);

         assertFalse("No tags expected.", output.contains("Sub1"));

         // System.out.println(output);

         // parse back. Without tags it shall still work

diff --git a/src/test/java/org/yaml/snakeyaml/serializer/SerializerTest.java b/src/test/java/org/yaml/snakeyaml/serializer/SerializerTest.java
index 7c6ea94..c01d100 100644
--- a/src/test/java/org/yaml/snakeyaml/serializer/SerializerTest.java
+++ b/src/test/java/org/yaml/snakeyaml/serializer/SerializerTest.java
@@ -35,7 +35,7 @@
     protected void setUp() throws Exception {

         DumperOptions config = new DumperOptions();

         StringWriter writer = new StringWriter();

-        serializer = new Serializer(new Emitter(writer, config), new Resolver(), config);

+        serializer = new Serializer(new Emitter(writer, config), new Resolver(), config, null);

     }

 

     public void testSerializerIsAlreadyOpened() throws IOException {