[Practicalxml-commits] SF.net SVN: practicalxml:[152] branches/dev-1.1/src
Brought to you by:
kdgregory
|
From: Auto-Generated S. C. M. <pra...@li...> - 2009-09-23 18:59:02
|
Revision: 152
http://practicalxml.svn.sourceforge.net/practicalxml/?rev=152&view=rev
Author: kdgregory
Date: 2009-09-23 18:58:50 +0000 (Wed, 23 Sep 2009)
Log Message:
-----------
Sequence conversion: indexes are optional, child elements may be named after parent
Tests: minor renames
Modified Paths:
--------------
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlAppenders.java
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlOptions.java
branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/bean/TestBean2XmlConverter.java
branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/bean/TestBeanConverter.java
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlAppenders.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlAppenders.java 2009-09-23 15:19:55 UTC (rev 151)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlAppenders.java 2009-09-23 18:58:50 UTC (rev 152)
@@ -156,19 +156,26 @@
public static class IndexedAppender
extends BasicAppender
{
- int _index = 0;
+ private int _index = 0;
+ private String _elementName = ConversionStrings.EL_COLLECTION_ITEM;
public IndexedAppender(Element parent, EnumSet<Bean2XmlOptions> options)
{
super(parent, options);
+ if (options.contains(Bean2XmlOptions.SEQUENCE_NAMED_BY_PARENT))
+ {
+ _elementName = DomUtil.getLocalName(parent);
+ if (_elementName.endsWith("s") || _elementName.endsWith("S"))
+ _elementName = _elementName.substring(0, _elementName.length() - 1);
+ }
}
@Override
public Element appendValue(String name, String type, String value)
{
- Element child = super.appendValue(name, type, value);
- if (child != null)
+ Element child = super.appendValue(_elementName, type, value);
+ if ((child != null) && isOptionSet(Bean2XmlOptions.SEQUENCE_INDEXES))
child.setAttribute(ConversionStrings.AT_ARRAY_INDEX, String.valueOf(_index++));
return child;
}
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlOptions.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlOptions.java 2009-09-23 15:19:55 UTC (rev 151)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlOptions.java 2009-09-23 18:58:50 UTC (rev 152)
@@ -40,6 +40,23 @@
INTROSPECT_MAPS,
/**
+ * Will add an <code>index</code> attribute to the child elements of
+ * sequences (arrays, lists, sets); the value of this attribute is the
+ * element's position in the sequence (numbered from 0). This index is
+ * not terribly useful, so is no longer default behavior.
+ */
+ SEQUENCE_INDEXES,
+
+ /**
+ * Sequences (arrays, lists, sets) will name their elements according to
+ * the parent element, with any trailing "s" removed. For example, if the
+ * parent is named "products", each child will be named "product", rather
+ * than the default "data". If the parent is named "foo", each child will
+ * also be named "foo" (since there's no "s" to remove).
+ */
+ SEQUENCE_NAMED_BY_PARENT,
+
+ /**
* Add null values into the tree, as an element without content, with the
* attribute <code>xsi:nil</code> set to "true". If not present, null
* values are ignored, and not added to DOM tree.
Modified: branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/bean/TestBean2XmlConverter.java
===================================================================
--- branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/bean/TestBean2XmlConverter.java 2009-09-23 15:19:55 UTC (rev 151)
+++ branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/bean/TestBean2XmlConverter.java 2009-09-23 18:58:50 UTC (rev 152)
@@ -15,7 +15,6 @@
package net.sf.practicalxml.converter.bean;
import java.math.BigDecimal;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -171,17 +170,37 @@
assertNameTypeValue("child 2", children.get(1), "data", "", "2");
assertNameTypeValue("child 3", children.get(2), "data", "", "3");
+ assertEquals("", children.get(0).getAttribute("index"));
+ assertEquals("", children.get(1).getAttribute("index"));
+ assertEquals("", children.get(2).getAttribute("index"));
+ }
+
+
+ public void testConvertArrayWithSequenceNumbers() throws Exception
+ {
+ Bean2XmlConverter driver = new Bean2XmlConverter(Bean2XmlOptions.SEQUENCE_INDEXES);
+
+ int[] data = new int[] { 1, 2, 3 };
+ Element root = driver.convert(data, "test");
+// System.out.println(OutputUtil.compactString(root.getOwnerDocument()));
+
+ List<Element> children = DomUtil.getChildren(root);
+ assertEquals("child count", 3, children.size());
+ assertNameTypeValue("child 1", children.get(0), "data", "", "1");
+ assertNameTypeValue("child 2", children.get(1), "data", "", "2");
+ assertNameTypeValue("child 3", children.get(2), "data", "", "3");
+
assertEquals("0", children.get(0).getAttribute("index"));
assertEquals("1", children.get(1).getAttribute("index"));
assertEquals("2", children.get(2).getAttribute("index"));
}
- public void testConvertPrimitiveArrayWithXsiType() throws Exception
+ public void testConvertArrayWithXsiType() throws Exception
{
Bean2XmlConverter driver = new Bean2XmlConverter(Bean2XmlOptions.ADD_XSI_TYPE);
- int[] data = new int[] { 1, 2, 3 };
+ Object[] data = new Object[] { Integer.valueOf(1), new BigDecimal("2"), "3" };
Element root = driver.convert(data, "test");
// System.out.println(OutputUtil.compactString(root.getOwnerDocument()));
@@ -191,21 +210,97 @@
assertEquals("child count", 3, children.size());
assertNameTypeValue("child 1", children.get(0), "data", "xsd:int", "1");
+ assertNameTypeValue("child 2", children.get(1), "data", "xsd:decimal", "2");
+ assertNameTypeValue("child 3", children.get(2), "data", "xsd:string", "3");
+ }
+
+
+ public void testConvertArrayWithSimpleParentName() throws Exception
+ {
+ Bean2XmlConverter driver = new Bean2XmlConverter(Bean2XmlOptions.SEQUENCE_NAMED_BY_PARENT);
+
+ String[] data = new String[] {"foo", "bar", "baz"};
+
+ Element root = driver.convert(data, "test");
+// System.out.println(OutputUtil.compactString(root.getOwnerDocument()));
+
+ List<Element> children = DomUtil.getChildren(root);
+ assertEquals("child count", 3, children.size());
+
+ assertNameTypeValue("child 1", children.get(0), "test", "", "foo");
+ assertNameTypeValue("child 2", children.get(1), "test", "", "bar");
+ assertNameTypeValue("child 3", children.get(2), "test", "", "baz");
+ }
+
+
+ public void testConvertArrayWithDepluralizedParentName() throws Exception
+ {
+ Bean2XmlConverter driver = new Bean2XmlConverter(Bean2XmlOptions.SEQUENCE_NAMED_BY_PARENT);
+
+ String[] data = new String[] {"foo", "bar", "baz"};
+
+ Element root = driver.convert(data, "tests");
+// System.out.println(OutputUtil.compactString(root.getOwnerDocument()));
+
+ List<Element> children = DomUtil.getChildren(root);
+ assertEquals("child count", 3, children.size());
+
+ assertNameTypeValue("child 1", children.get(0), "test", "", "foo");
+ assertNameTypeValue("child 2", children.get(1), "test", "", "bar");
+ assertNameTypeValue("child 3", children.get(2), "test", "", "baz");
+ }
+
+
+ public void testConvertListDefault() throws Exception
+ {
+ Bean2XmlConverter driver = new Bean2XmlConverter();
+
+ List<String> data = Arrays.asList("foo", "bar", "baz");
+
+ Element root = driver.convert(data, "test");
+// System.out.println(OutputUtil.compactString(root.getOwnerDocument()));
+
+ List<Element> children = DomUtil.getChildren(root);
+ assertEquals("child count", 3, children.size());
+
+ assertNameTypeValue("child 1", children.get(0), "data", "", "foo");
+ assertNameTypeValue("child 2", children.get(1), "data", "", "bar");
+ assertNameTypeValue("child 3", children.get(2), "data", "", "baz");
+
+ assertEquals("", children.get(0).getAttribute("index"));
+ assertEquals("", children.get(1).getAttribute("index"));
+ assertEquals("", children.get(2).getAttribute("index"));
+ }
+
+
+ public void testConvertListWithSequenceNumbers() throws Exception
+ {
+ Bean2XmlConverter driver = new Bean2XmlConverter(Bean2XmlOptions.SEQUENCE_INDEXES);
+
+ List<String> data = Arrays.asList("foo", "bar", "baz");
+
+ Element root = driver.convert(data, "test");
+// System.out.println(OutputUtil.compactString(root.getOwnerDocument()));
+
+ List<Element> children = DomUtil.getChildren(root);
+ assertEquals("child count", 3, children.size());
+
+ assertNameTypeValue("child 1", children.get(0), "data", "", "foo");
+ assertNameTypeValue("child 2", children.get(1), "data", "", "bar");
+ assertNameTypeValue("child 3", children.get(2), "data", "", "baz");
+
assertEquals("0", children.get(0).getAttribute("index"));
-
- assertNameTypeValue("child 2", children.get(1), "data", "xsd:int", "2");
assertEquals("1", children.get(1).getAttribute("index"));
-
- assertNameTypeValue("child 3", children.get(2), "data", "xsd:int", "3");
assertEquals("2", children.get(2).getAttribute("index"));
}
- public void testConvertStringArrayWithXsiType() throws Exception
+ public void testConvertListWithXsiType() throws Exception
{
Bean2XmlConverter driver = new Bean2XmlConverter(Bean2XmlOptions.ADD_XSI_TYPE);
- String[] data = new String[] { "foo", "bar", "baz" };
+ List<String> data = Arrays.asList("foo", "bar", "baz");
+
Element root = driver.convert(data, "test");
// System.out.println(OutputUtil.compactString(root.getOwnerDocument()));
@@ -215,21 +310,57 @@
assertEquals("child count", 3, children.size());
assertNameTypeValue("child 1", children.get(0), "data", "xsd:string", "foo");
- assertEquals("0", children.get(0).getAttribute("index"));
-
assertNameTypeValue("child 2", children.get(1), "data", "xsd:string", "bar");
- assertEquals("1", children.get(1).getAttribute("index"));
+ assertNameTypeValue("child 3", children.get(2), "data", "xsd:string", "baz");
- assertNameTypeValue("child 3", children.get(2), "data", "xsd:string", "baz");
- assertEquals("2", children.get(2).getAttribute("index"));
+ assertEquals("", children.get(0).getAttribute("index"));
+ assertEquals("", children.get(1).getAttribute("index"));
+ assertEquals("", children.get(2).getAttribute("index"));
}
- public void testConvertStringListWithXsiType() throws Exception
+ public void testConvertListWithSimpleParentName() throws Exception
{
- Bean2XmlConverter driver = new Bean2XmlConverter(Bean2XmlOptions.ADD_XSI_TYPE);
+ Bean2XmlConverter driver = new Bean2XmlConverter(Bean2XmlOptions.SEQUENCE_NAMED_BY_PARENT);
- List<String> data = new ArrayList<String>();
+ List<String> data = Arrays.asList("foo", "bar", "baz");
+
+ Element root = driver.convert(data, "test");
+// System.out.println(OutputUtil.compactString(root.getOwnerDocument()));
+
+ List<Element> children = DomUtil.getChildren(root);
+ assertEquals("child count", 3, children.size());
+
+ assertNameTypeValue("child 1", children.get(0), "test", "", "foo");
+ assertNameTypeValue("child 2", children.get(1), "test", "", "bar");
+ assertNameTypeValue("child 3", children.get(2), "test", "", "baz");
+ }
+
+
+ public void testConvertListWithDepluralizedParentName() throws Exception
+ {
+ Bean2XmlConverter driver = new Bean2XmlConverter(Bean2XmlOptions.SEQUENCE_NAMED_BY_PARENT);
+
+ List<String> data = Arrays.asList("foo", "bar", "baz");
+
+ Element root = driver.convert(data, "tests");
+// System.out.println(OutputUtil.compactString(root.getOwnerDocument()));
+
+ List<Element> children = DomUtil.getChildren(root);
+ assertEquals("child count", 3, children.size());
+
+ assertNameTypeValue("child 1", children.get(0), "test", "", "foo");
+ assertNameTypeValue("child 2", children.get(1), "test", "", "bar");
+ assertNameTypeValue("child 3", children.get(2), "test", "", "baz");
+ }
+
+
+ public void testConvertSetDefault() throws Exception
+ {
+ Bean2XmlConverter driver = new Bean2XmlConverter();
+
+ // TreeSet will order output
+ Set<String> data = new TreeSet<String>();
data.add("foo");
data.add("bar");
data.add("baz");
@@ -237,27 +368,50 @@
Element root = driver.convert(data, "test");
// System.out.println(OutputUtil.compactString(root.getOwnerDocument()));
- assertJavaXsiType("root", root, data);
+ List<Element> children = DomUtil.getChildren(root);
+ assertEquals("child count", 3, children.size());
+ assertNameTypeValue("child 1", children.get(0), "data", "", "bar");
+ assertNameTypeValue("child 2", children.get(1), "data", "", "baz");
+ assertNameTypeValue("child 3", children.get(2), "data", "", "foo");
+
+ assertEquals("", children.get(0).getAttribute("index"));
+ assertEquals("", children.get(1).getAttribute("index"));
+ assertEquals("", children.get(2).getAttribute("index"));
+ }
+
+
+ public void testConvertSetWithSequenceNumbers() throws Exception
+ {
+ Bean2XmlConverter driver = new Bean2XmlConverter(Bean2XmlOptions.SEQUENCE_INDEXES);
+
+ // TreeSet will order output
+ Set<String> data = new TreeSet<String>();
+ data.add("foo");
+ data.add("bar");
+ data.add("baz");
+
+ Element root = driver.convert(data, "test");
+// System.out.println(OutputUtil.compactString(root.getOwnerDocument()));
+
List<Element> children = DomUtil.getChildren(root);
assertEquals("child count", 3, children.size());
- assertNameTypeValue("child 1", children.get(0), "data", "xsd:string", "foo");
+ assertNameTypeValue("child 1", children.get(0), "data", "", "bar");
+ assertNameTypeValue("child 2", children.get(1), "data", "", "baz");
+ assertNameTypeValue("child 3", children.get(2), "data", "", "foo");
+
assertEquals("0", children.get(0).getAttribute("index"));
-
- assertNameTypeValue("child 2", children.get(1), "data", "xsd:string", "bar");
assertEquals("1", children.get(1).getAttribute("index"));
-
- assertNameTypeValue("child 3", children.get(2), "data", "xsd:string", "baz");
assertEquals("2", children.get(2).getAttribute("index"));
}
- public void testConvertStringSetWithXsiType() throws Exception
+ public void testConvertSetWithXsiType() throws Exception
{
Bean2XmlConverter driver = new Bean2XmlConverter(Bean2XmlOptions.ADD_XSI_TYPE);
- // TreeSet means that the data will be re-ordered
+ // TreeSet will order output
Set<String> data = new TreeSet<String>();
data.add("foo");
data.add("bar");
@@ -272,16 +426,59 @@
assertEquals("child count", 3, children.size());
assertNameTypeValue("child 1", children.get(0), "data", "xsd:string", "bar");
- assertEquals("0", children.get(0).getAttribute("index"));
-
assertNameTypeValue("child 2", children.get(1), "data", "xsd:string", "baz");
- assertEquals("1", children.get(1).getAttribute("index"));
+ assertNameTypeValue("child 3", children.get(2), "data", "xsd:string", "foo");
- assertNameTypeValue("child 3", children.get(2), "data", "xsd:string", "foo");
- assertEquals("2", children.get(2).getAttribute("index"));
+ assertEquals("", children.get(0).getAttribute("index"));
+ assertEquals("", children.get(1).getAttribute("index"));
+ assertEquals("", children.get(2).getAttribute("index"));
}
+ public void testConvertSetWithSimpleParentName() throws Exception
+ {
+ Bean2XmlConverter driver = new Bean2XmlConverter(Bean2XmlOptions.SEQUENCE_NAMED_BY_PARENT);
+
+ // TreeSet will order output
+ Set<String> data = new TreeSet<String>();
+ data.add("foo");
+ data.add("bar");
+ data.add("baz");
+
+ Element root = driver.convert(data, "test");
+// System.out.println(OutputUtil.compactString(root.getOwnerDocument()));
+
+ List<Element> children = DomUtil.getChildren(root);
+ assertEquals("child count", 3, children.size());
+
+ assertNameTypeValue("child 1", children.get(0), "test", "", "bar");
+ assertNameTypeValue("child 2", children.get(1), "test", "", "baz");
+ assertNameTypeValue("child 3", children.get(2), "test", "", "foo");
+ }
+
+
+ public void testConvertSetWithDepluralizedParentName() throws Exception
+ {
+ Bean2XmlConverter driver = new Bean2XmlConverter(Bean2XmlOptions.SEQUENCE_NAMED_BY_PARENT);
+
+ // TreeSet will order output
+ Set<String> data = new TreeSet<String>();
+ data.add("foo");
+ data.add("bar");
+ data.add("baz");
+
+ Element root = driver.convert(data, "tests");
+// System.out.println(OutputUtil.compactString(root.getOwnerDocument()));
+
+ List<Element> children = DomUtil.getChildren(root);
+ assertEquals("child count", 3, children.size());
+
+ assertNameTypeValue("child 1", children.get(0), "test", "", "bar");
+ assertNameTypeValue("child 2", children.get(1), "test", "", "baz");
+ assertNameTypeValue("child 3", children.get(2), "test", "", "foo");
+ }
+
+
public void testConvertMapDefaultWithXsiType() throws Exception
{
Bean2XmlConverter driver = new Bean2XmlConverter(Bean2XmlOptions.ADD_XSI_TYPE);
@@ -332,7 +529,7 @@
}
- public void testConvertMapIntrospectWithInvalidKey() throws Exception
+ public void testFailMapIntrospectWithInvalidKey() throws Exception
{
Bean2XmlConverter driver = new Bean2XmlConverter(Bean2XmlOptions.INTROSPECT_MAPS);
@@ -452,7 +649,7 @@
}
- public void testDispatchCompoundBeanDefault() throws Exception
+ public void testConvertCompoundBeanDefault() throws Exception
{
// at this point, I'm convinced the type output works, so we'll do default
// output and then use XPath for all assertions ... but note nulls in data
@@ -474,10 +671,6 @@
DomAsserts.assertEquals("2", root, "/test/primArray/data[2]");
DomAsserts.assertEquals("3", root, "/test/primArray/data[3]");
- DomAsserts.assertEquals("0", root, "/test/primArray/data[1]/@index");
- DomAsserts.assertEquals("1", root, "/test/primArray/data[2]/@index");
- DomAsserts.assertEquals("2", root, "/test/primArray/data[3]/@index");
-
DomAsserts.assertEquals("foo", root, "/test/stringList/data[1]");
DomAsserts.assertEquals("baz", root, "/test/stringList/data[2]");
}
Modified: branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/bean/TestBeanConverter.java
===================================================================
--- branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/bean/TestBeanConverter.java 2009-09-23 15:19:55 UTC (rev 151)
+++ branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/bean/TestBeanConverter.java 2009-09-23 18:58:50 UTC (rev 152)
@@ -144,7 +144,7 @@
}
- public void testConvertNullFailureRequireXsiNil() throws Exception
+ public void testFailNullRequireXsiNil() throws Exception
{
Document dom = BeanConverter.convertToXml(null, "test");
// System.out.println(OutputUtil.compactString(dom));
@@ -181,7 +181,7 @@
// demonstrates that the list will be read as List<String> even though
// it was written as List<Integer>
- public void testIntegerListDefault() throws Exception
+ public void testListDefault() throws Exception
{
List<Integer> data = Arrays.asList(1, 2, 3);
assert(data.get(0) instanceof Integer);
@@ -195,11 +195,12 @@
}
- // demonstrates that you don't need to require xsi:type to use it
- public void testIntegerListWithXsiType() throws Exception
+ // demonstrates that xsi:type will be used when available, even if
+ // not required -- otherwise we'd translate back as String
+ public void testListWithXsiType() throws Exception
{
List<Integer> data = Arrays.asList(1, 2, 3);
- assert(data.get(0) instanceof Integer);
+ assertTrue(data.get(0) instanceof Integer);
Document dom = BeanConverter.convertToXml(data, "test", Bean2XmlOptions.ADD_XSI_TYPE);
// System.out.println(OutputUtil.compactString(dom));
@@ -209,8 +210,32 @@
}
+ public void testListWithSequenceNumbers() throws Exception
+ {
+ List<String> data = Arrays.asList("foo", "bar", "baz");
+
+ Document dom = BeanConverter.convertToXml(data, "test", Bean2XmlOptions.SEQUENCE_INDEXES);
+// System.out.println(OutputUtil.compactString(dom));
+
+ List<?> result = BeanConverter.convertToJava(dom, List.class);
+ assertEquals(data, result);
+ }
+
+
+ public void testListWithElementsNamedByParent() throws Exception
+ {
+ List<String> data = Arrays.asList("foo", "bar", "baz");
+
+ Document dom = BeanConverter.convertToXml(data, "test", Bean2XmlOptions.SEQUENCE_NAMED_BY_PARENT);
+// System.out.println(OutputUtil.compactString(dom));
+
+ List<?> result = BeanConverter.convertToJava(dom, List.class);
+ assertEquals(data, result);
+ }
+
+
// demonstrates that the caller drives the inbound conversion
- public void testConvertListToSortedSet() throws Exception
+ public void testListToSortedSet() throws Exception
{
List<String> data = Arrays.asList("foo", "bar", "baz", "bar");
@@ -277,7 +302,7 @@
}
- public void testSimpleBeanRequireXsiType() throws Exception
+ public void testFailSimpleBeanRequireXsiType() throws Exception
{
SimpleBean data = new SimpleBean("abc", 123, new BigDecimal("456.789"), true);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|