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));
+ }
}