[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. |