Add example for howto wiki
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 8d09667..1cb59aa 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -7,6 +7,10 @@
 	</properties>

 	<body>

           <release version="1.8-SNAPSHOT" date="in Mercurial" description="Performance improvement">

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

+                Add example to howto Wiki:

+                How_to_substitute_object_in_YAML_document_with_a_custom_object (2011-01-27)

+            </action>

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

                 When the YAML document to be loaded is provided as String parse it directly

                 without making a Reader first (2011-01-23)

diff --git a/src/test/java/examples/SelectiveConstructorTest.java b/src/test/java/examples/SelectiveConstructorTest.java
new file mode 100644
index 0000000..1689dc1
--- /dev/null
+++ b/src/test/java/examples/SelectiveConstructorTest.java
@@ -0,0 +1,103 @@
+/**

+ * Copyright (c) 2008-2011, http://www.snakeyaml.org

+ *

+ * Licensed under the Apache License, Version 2.0 (the "License");

+ * you may not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ *     http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an "AS IS" BASIS,

+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+package examples;

+

+import java.io.IOException;

+import java.util.List;

+import java.util.Map;

+

+import junit.framework.TestCase;

+

+import org.yaml.snakeyaml.Yaml;

+import org.yaml.snakeyaml.constructor.Constructor;

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

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

+

+/**

+ * Example for http://code.google.com/p/snakeyaml/wiki/howto

+ */

+public class SelectiveConstructorTest extends TestCase {

+    class SelectiveConstructor extends Constructor {

+        public SelectiveConstructor() {

+            // define a custom way to create a mapping node

+            yamlClassConstructors.put(NodeId.mapping, new MyPersistentObjectConstruct());

+        }

+

+        class MyPersistentObjectConstruct extends Constructor.ConstructMapping {

+            @Override

+            protected Object constructJavaBean2ndStep(MappingNode node, Object object) {

+                Class type = node.getType();

+                if (type.equals(MyPersistentObject.class)) {

+                    // create a map

+                    Map map = constructMapping(node);

+                    String id = (String) map.get("id");

+                    return new MyPersistentObject(id, 17);

+                } else {

+                    // create JavaBean

+                    return super.constructJavaBean2ndStep(node, object);

+                }

+            }

+        }

+    }

+

+    public void testConstructor() throws IOException {

+        Yaml yaml = new Yaml(new SelectiveConstructor());

+        List<?> data = (List<?>) yaml

+                .load("- 1\n- 2\n- !!examples.MyPersistentObject {amount: 222, id: persistent}");

+        // System.out.println(data);

+        assertEquals(3, data.size());

+        MyPersistentObject myObject = (MyPersistentObject) data.get(2);

+        assertEquals(17, myObject.getAmount());

+        assertEquals("persistent", myObject.getId());

+    }

+}

+

+class MyPersistentObject {

+    private String id;

+    private int amount;

+

+    public MyPersistentObject() {

+        this.id = "noid";

+        this.amount = 222;

+    }

+

+    public MyPersistentObject(String id, int amount) {

+        this.id = id;

+        this.amount = amount;

+    }

+

+    public String getId() {

+        return id;

+    }

+

+    public void setId(String id) {

+        this.id = id;

+    }

+

+    public int getAmount() {

+        return amount;

+    }

+

+    public void setAmount(int amount) {

+        this.amount = amount;

+    }

+

+    @Override

+    public String toString() {

+        return "MyPersistentObject [id=" + id + ", amount=" + amount + "]";

+    }

+}