Introduce Tags.getGlobalTagForClass() to simplify tag generation in custom constructors
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index defa7bf..91009ec 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -7,7 +7,10 @@
 	</properties>

 	<body>

 	     <release version="1.4-SNAPSHOT" date="in Mercurial" description="better support for immutable objects">

-	        <action dev="py4fun" type="update">

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

+                Introduce Tags.getGlobalTagForClass() to simplify tag generation in custom constructors (2009-08-06)

+            </action>

+            <action dev="py4fun" type="update">

                 Refactor: introduce ImplicitTuple (2009-08-06)

             </action>

             <action dev="py4fun" type="fix" issue="11" due-to="infinity0x">

diff --git a/src/main/java/org/yaml/snakeyaml/nodes/Tags.java b/src/main/java/org/yaml/snakeyaml/nodes/Tags.java
index 0d2774a..8a557fa 100644
--- a/src/main/java/org/yaml/snakeyaml/nodes/Tags.java
+++ b/src/main/java/org/yaml/snakeyaml/nodes/Tags.java
@@ -20,4 +20,8 @@
     public static final String MERGE = PREFIX + "merge";

     public static final String VALUE = PREFIX + "value";

     public static final String YAML = PREFIX + "yaml";

+

+    public static String getGlobalTagForClass(Class<? extends Object> clazz) {

+        return PREFIX + clazz.getName();

+    }

 }

diff --git a/src/main/java/org/yaml/snakeyaml/representer/Representer.java b/src/main/java/org/yaml/snakeyaml/representer/Representer.java
index 04cdd0c..ae0acf4 100644
--- a/src/main/java/org/yaml/snakeyaml/representer/Representer.java
+++ b/src/main/java/org/yaml/snakeyaml/representer/Representer.java
@@ -84,7 +84,7 @@
         List<NodeTuple> value = new LinkedList<NodeTuple>();
         String tag;
         String customTag = classTags.get(javaBean.getClass());
-        tag = customTag != null ? customTag : Tags.PREFIX + javaBean.getClass().getName();
+        tag = customTag != null ? customTag : Tags.getGlobalTagForClass(javaBean.getClass());
         // flow style will be chosen by BaseRepresenter
         MappingNode node = new MappingNode(tag, value, null);
         representedObjects.put(objectToRepresent, node);
diff --git a/src/main/java/org/yaml/snakeyaml/representer/SafeRepresenter.java b/src/main/java/org/yaml/snakeyaml/representer/SafeRepresenter.java
index 68e66d5..e30ecd7 100644
--- a/src/main/java/org/yaml/snakeyaml/representer/SafeRepresenter.java
+++ b/src/main/java/org/yaml/snakeyaml/representer/SafeRepresenter.java
@@ -206,7 +206,7 @@
 

     private class RepresentEnum implements Represent {

         public Node representData(Object data) {

-            String tag = Tags.PREFIX + data.getClass().getName();

+            String tag = Tags.getGlobalTagForClass(data.getClass());

             return representScalar(tag, data.toString());

         }

     }

diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue9/BeanConstructor.java b/src/test/java/org/yaml/snakeyaml/issues/issue9/BeanConstructor.java
index b77a89f..218c1de 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue9/BeanConstructor.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue9/BeanConstructor.java
@@ -6,17 +6,14 @@
 import org.yaml.snakeyaml.constructor.Constructor;

 import org.yaml.snakeyaml.nodes.Node;

 import org.yaml.snakeyaml.nodes.ScalarNode;

+import org.yaml.snakeyaml.nodes.Tags;

 

 public class BeanConstructor extends Constructor {

 

     public BeanConstructor() {

         super(BeanHolder.class);

-

-        // TODO the tag may start with !!

-        // yamlConstructors.put("tag:yaml.org,2002:org.yaml.snakeyaml.issues.issue9.Bean1",

-        yamlConstructors.put("tag:yaml.org,2002:org.yaml.snakeyaml.issues.issue9.Bean1",

-                new Bean1ScalarConstructor());

-        yamlConstructors.put("tag:yaml.org,2002:org.yaml.snakeyaml.issues.issue9.BeanHolder",

+        yamlConstructors.put(Tags.getGlobalTagForClass(Bean1.class), new Bean1ScalarConstructor());

+        yamlConstructors.put(Tags.getGlobalTagForClass(BeanHolder.class),

                 new BeanHolderScalarConstructor());

     }

 

diff --git a/src/test/java/org/yaml/snakeyaml/nodes/TagsTest.java b/src/test/java/org/yaml/snakeyaml/nodes/TagsTest.java
index faf2f6c..9579c10 100644
--- a/src/test/java/org/yaml/snakeyaml/nodes/TagsTest.java
+++ b/src/test/java/org/yaml/snakeyaml/nodes/TagsTest.java
@@ -14,4 +14,10 @@
         assertNotNull(new Tags());

         assertEquals("tag:yaml.org,2002:map", Tags.MAP);

     }

+

+    public void testGetGlobalTagForClass() {

+        assertEquals("tag:yaml.org,2002:java.lang.String", Tags.getGlobalTagForClass(String.class));

+        assertEquals("tag:yaml.org,2002:org.yaml.snakeyaml.nodes.TagsTest", Tags

+                .getGlobalTagForClass(TagsTest.class));

+    }

 }