1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.commons.betwixt.strategy;
17
18 import java.io.StringReader;
19 import java.io.StringWriter;
20 import java.util.Collection;
21
22 import org.apache.commons.betwixt.AbstractTestCase;
23 import org.apache.commons.betwixt.expression.Context;
24 import org.apache.commons.betwixt.io.BeanReader;
25 import org.apache.commons.betwixt.io.BeanWriter;
26
27 public class TestConversionFlavour extends AbstractTestCase {
28
29 public TestConversionFlavour(String testName) {
30 super(testName);
31 }
32
33
34 public void testRead() throws Exception {
35 String xml = "<alpha>" +
36 " <name>BananasSIX</name>" +
37 " <betaBean>" +
38 " <name>PeachONE</name>" +
39 " </betaBean>" +
40 " <children>" +
41 " <child>" +
42 " <name>PeachTWO</name>" +
43 " </child>" +
44 " </children>" +
45 " <mapped>" +
46 " <entry>" +
47 " <key>Key</key>" +
48 " <value>" +
49 " <name>PeachTHREE</name>" +
50 " </value>" +
51 " </entry>" +
52 " </mapped>" +
53 " </alpha>";
54
55 StringReader in = new StringReader(xml);
56 BeanReader reader = new BeanReader();
57 reader.getBindingConfiguration().setMapIDs(false);
58 reader.getBindingConfiguration().setObjectStringConverter(new PrependingConverter());
59 reader.registerBeanClass(AlphaBean.class);
60 AlphaBean bean = (AlphaBean) reader.parse(in);
61 assertNotNull(bean);
62 assertEquals("SIX", bean.getName());
63 BetaBean betaBean = bean.getBetaBean();
64 assertNotNull(betaBean);
65 assertEquals("ONE", betaBean.getName());
66 Collection children = bean.getChildren();
67 assertEquals(1, children.size());
68 BetaBean child = (BetaBean) children.iterator().next();
69 assertEquals("TWO", child.getName());
70 }
71
72 public void testWrite() throws Exception {
73 AlphaBean alphaBean = new AlphaBean();
74 alphaBean.setName("SIX");
75 BetaBean betaBeanOne = new BetaBean("ONE");
76 alphaBean.setBetaBean(betaBeanOne);
77 BetaBean betaBeanTwo = new BetaBean("TWO");
78 alphaBean.addChild(betaBeanTwo);
79 BetaBean betaBeanThree = new BetaBean("THREE");
80 alphaBean.put("Key", betaBeanThree);
81
82 StringWriter out = new StringWriter();
83 BeanWriter writer = new BeanWriter(out);
84 writer.getBindingConfiguration().setMapIDs(false);
85 writer.getBindingConfiguration().setObjectStringConverter(new PrependingConverter());
86 writer.write(alphaBean);
87
88 String xml = "<alpha>" +
89 " <name>BananasSIX</name>" +
90 " <betaBean>" +
91 " <name>PeachONE</name>" +
92 " </betaBean>" +
93 " <children>" +
94 " <child>" +
95 " <name>PeachTWO</name>" +
96 " </child>" +
97 " </children>" +
98 " <mapped>" +
99 " <entry>" +
100 " <key>Key</key>" +
101 " <value>" +
102 " <name>PeachTHREE</name>" +
103 " </value>" +
104 " </entry>" +
105 " </mapped>" +
106 " </alpha>";
107
108 xmlAssertIsomorphicContent(parseString(xml), parseString(out), true);
109 }
110
111
112 public static final class PrependingConverter extends DefaultObjectStringConverter {
113
114 public String objectToString(Object object, Class type, String flavour,
115 Context context) {
116 String result = super.objectToString(object, type, flavour, context);
117 if (flavour != null) {
118 result = flavour + result;
119 }
120 return result;
121 }
122
123 public Object stringToObject(String value, Class type, String flavour,
124 Context context) {
125 if (flavour != null) {
126 value = value.substring(flavour.length());
127 }
128 return super.stringToObject(value, type, flavour, context);
129 }
130 }
131 }