1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    * 
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.betwixt.io;
18  
19  import java.io.StringReader;
20  import java.io.StringWriter;
21  import java.util.HashMap;
22  import java.util.Map;
23  
24  import org.apache.commons.betwixt.AbstractTestCase;
25  import org.xml.sax.InputSource;
26  
27  public class TestMapUpdater extends AbstractTestCase {
28  
29      public TestMapUpdater(String testName) {
30          super(testName);
31      }
32  
33      public void testMapUpdater() throws Exception {
34          String config = "<?xml version='1.0'?>"
35                  + "<betwixt-config primitiveTypes='attribute'>"
36                  + "    <class name='org.apache.commons.betwixt.io.TestMapUpdater$ParentBean'>"
37                  + "        <element name='parentBean'>"
38                  + "            <element name='pairs'>"
39                  + "                <element property='pairs' updater='addPair'/>"
40                  + "            </element>"
41                  + "            <addDefaults add-properties='true' add-adders='false'/>"
42                  + "        </element>" + "    </class>" + "</betwixt-config>";
43  
44          String result = "<?xml version=\"1.0\"?>\n"
45                  + "  <parentBean id=\"1\">\n" + "    <pairs>\n"
46                  + "      <entry id=\"2\">\n" + "        <key>key</key>\n"
47                  + "        <value>value</value>\n" + "      </entry>\n"
48                  + "    </pairs>\n" + "  </parentBean>\n";
49  
50          ParentBean pb = new ParentBean();
51          pb.getPairs().put("key", "value");
52  
53          StringWriter writer = new StringWriter();
54          BeanWriter beanWriter = new BeanWriter(writer);
55          beanWriter.enablePrettyPrint();
56          beanWriter.getXMLIntrospector().register(
57                  new InputSource(new StringReader(config)));
58          beanWriter.writeXmlDeclaration("<?xml version=\"1.0\"?>");
59          beanWriter.write(pb);
60  
61          xmlAssertIsomorphic(parseString(result), parseString(writer));
62  
63          BeanReader beanReader = new BeanReader();
64          beanReader.registerMultiMapping(new InputSource(
65                  new StringReader(config)));
66  
67          ParentBean pbRead = (ParentBean) beanReader.parse(new StringReader(
68                  writer.toString()));
69  
70          StringWriter writer2 = new StringWriter();
71          BeanWriter beanWriter2 = new BeanWriter(writer2);
72          beanWriter2.enablePrettyPrint();
73          beanWriter2.getXMLIntrospector().register(
74                  new InputSource(new StringReader(config)));
75          beanWriter2.writeXmlDeclaration("<?xml version=\"1.0\"?>");
76          beanWriter2.write(pbRead);
77  
78          xmlAssertIsomorphic(parseString(result), parseString(writer2));
79  
80      }
81  
82      public static class ParentBean {
83          private Map pairs = new HashMap();
84  
85          public Map getPairs() {
86              return pairs;
87          }
88  
89          public void setPairs(Map pairs) {
90              this.pairs = pairs;
91          }
92  
93          public void addPair(String key, String value) {
94              pairs.put(key, value);
95          }
96  
97      }
98  
99  }