[Practicalxml-commits] SF.net SVN: practicalxml:[154] branches/dev-1.1/src
Brought to you by:
kdgregory
|
From: Auto-Generated S. C. M. <pra...@li...> - 2009-09-23 21:46:31
|
Revision: 154
http://practicalxml.svn.sourceforge.net/practicalxml/?rev=154&view=rev
Author: kdgregory
Date: 2009-09-23 21:46:18 +0000 (Wed, 23 Sep 2009)
Log Message:
-----------
change child naming code for sequences (bugfix)
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/Bean2XmlConverter.java
branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/bean/TestBean2XmlAppenders.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 21:25:10 UTC (rev 153)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlAppenders.java 2009-09-23 21:46:18 UTC (rev 154)
@@ -157,24 +157,17 @@
extends BasicAppender
{
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(_elementName, type, value);
+ Element child = super.appendValue(name, 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/Bean2XmlConverter.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlConverter.java 2009-09-23 21:25:10 UTC (rev 153)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlConverter.java 2009-09-23 21:46:18 UTC (rev 154)
@@ -32,6 +32,7 @@
import net.sf.practicalxml.converter.internal.ConversionStrings;
import net.sf.practicalxml.converter.internal.DomUtilToo;
import net.sf.practicalxml.converter.internal.PrimitiveConversionHelper;
+import net.sf.practicalxml.internal.StringUtils;
/**
@@ -77,7 +78,7 @@
{
Element root = DomUtil.newDocument(nsUri, rootName);
doXsiNamespaceHack(root);
- convert(obj, "", new DirectAppender(root, _options));
+ convert(obj, rootName, new DirectAppender(root, _options));
return root;
}
@@ -168,11 +169,13 @@
Element parent = appender.appendContainer(name, DomUtilToo.getXsiTypeForJavaObject(array));
Appender childAppender = new IndexedAppender(parent, _options);
+ String childName = determineChildNameForSequence(name);
int length = Array.getLength(array);
+
for (int idx = 0 ; idx < length ; idx++)
{
Object value = Array.get(array, idx);
- convert(value, ConversionStrings.EL_COLLECTION_ITEM, childAppender);
+ convert(value, childName, childAppender);
}
return true;
}
@@ -200,9 +203,11 @@
Element parent = appender.appendContainer(name, DomUtilToo.getXsiTypeForJavaObject(obj));
Appender childAppender = new IndexedAppender(parent, _options);
+ String childName = determineChildNameForSequence(name);
+
for (Object value : (Collection<?>)obj)
{
- convert(value, ConversionStrings.EL_COLLECTION_ITEM, childAppender);
+ convert(value, childName, childAppender);
}
return true;
}
@@ -250,4 +255,18 @@
else
convert(value, name, appender);
}
+
+
+ private String determineChildNameForSequence(String parentName)
+ {
+ if (StringUtils.isEmpty(parentName))
+ return ConversionStrings.EL_COLLECTION_ITEM;
+
+ if (!_options.contains(Bean2XmlOptions.SEQUENCE_NAMED_BY_PARENT))
+ return ConversionStrings.EL_COLLECTION_ITEM;
+
+ if (parentName.endsWith("s") || parentName.endsWith("S"))
+ return parentName.substring(0, parentName.length() - 1);
+ return parentName;
+ }
}
Modified: branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/bean/TestBean2XmlAppenders.java
===================================================================
--- branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/bean/TestBean2XmlAppenders.java 2009-09-23 21:25:10 UTC (rev 153)
+++ branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/bean/TestBean2XmlAppenders.java 2009-09-23 21:46:18 UTC (rev 154)
@@ -160,8 +160,6 @@
{
Element root = DomUtil.newDocument("root");
- // note: index shouldn't increment on null value, so put the
- // null entry between not-null entries
Appender appender = new IndexedAppender(root, useOptions());
Element child0 = appender.appendValue("foo", "bar", "baz");
Element childX = appender.appendValue("bing", "bang", null);
@@ -174,10 +172,7 @@
assertNull(childX);
assertNameTypeValue(child0, "foo", "", "baz");
- assertEquals("0", child0.getAttribute("index"));
-
assertNameTypeValue(child1, "argle", "", "wargle");
- assertEquals("1", child1.getAttribute("index"));
}
@@ -201,10 +196,34 @@
assertXsiNil(child2, true);
assertNameTypeValue(child2, "bing", "", null);
- assertEquals("2", child2.getAttribute("index"));
}
+ public void testIndexedAppenderWithIndexOption() throws Exception
+ {
+ Element root = DomUtil.newDocument("root");
+
+ // note: index shouldn't increment on null value, so put the
+ // null entry between not-null entries
+ Appender appender = new IndexedAppender(root, useOptions(Bean2XmlOptions.SEQUENCE_INDEXES));
+ Element child0 = appender.appendValue("foo", "bar", "baz");
+ Element childX = appender.appendValue("bing", "bang", null);
+ Element child1 = appender.appendValue("argle", "bargle", "wargle");
+
+ List<Element> children = DomUtil.getChildren(root);
+ assertEquals(2, children.size());
+ assertSame(child0, children.get(0));
+ assertSame(child1, children.get(1));
+ assertNull(childX);
+
+ assertNameTypeValue(child0, "foo", "", "baz");
+ assertEquals("0", child0.getAttribute("index"));
+
+ assertNameTypeValue(child1, "argle", "", "wargle");
+ assertEquals("1", child1.getAttribute("index"));
+ }
+
+
public void testMapAppenderDefault() throws Exception
{
Element root = DomUtil.newDocument("root");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|