[jboss-svn-commits] JBoss Common SVN: r2729 - in jbossxb/trunk/src: main/java/org/jboss/xb/spi and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Mar 7 04:12:21 EST 2008
Author: adrian at jboss.org
Date: 2008-03-07 04:12:21 -0500 (Fri, 07 Mar 2008)
New Revision: 2729
Modified:
jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java
jbossxb/trunk/src/main/java/org/jboss/xb/spi/BeanAdapter.java
jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/mc/test/MapTestCase.java
Log:
[JBXB-128] - Add a WrapperBeanAdapter to support the @JBossXmlGroupText's wrapping of CDATA
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java 2008-03-05 19:24:00 UTC (rev 2728)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java 2008-03-07 09:12:21 UTC (rev 2729)
@@ -25,6 +25,7 @@
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -117,11 +118,11 @@
import org.jboss.xb.builder.runtime.DefaultMapEntry;
import org.jboss.xb.builder.runtime.EnumValueAdapter;
import org.jboss.xb.builder.runtime.MapPropertyHandler;
-import org.jboss.xb.builder.runtime.NoopPropertyHandler;
import org.jboss.xb.builder.runtime.PropertyHandler;
import org.jboss.xb.builder.runtime.PropertyInterceptor;
import org.jboss.xb.builder.runtime.PropertyWildcardHandler;
import org.jboss.xb.builder.runtime.ValueHandler;
+import org.jboss.xb.builder.runtime.WrapperBeanAdapterFactory;
import org.jboss.xb.spi.BeanAdapterBuilder;
import org.jboss.xb.spi.BeanAdapterFactory;
import org.jboss.xb.spi.DefaultBeanAdapterBuilder;
@@ -1534,12 +1535,36 @@
if (trace)
log.trace("Processing group for property " + property.getName() + " in "
+ property.getBeanInfo().getName() + " " + jbossXmlGroup);
+
JBossXmlChild[] children = jbossXmlGroup.value();
if (children != null && children.length > 0)
{
TypeBinding elementTypeBinding = new TypeBinding();
+ JBossXmlGroupText groupText = ((ClassInfo) propertyType).getUnderlyingAnnotation(JBossXmlGroupText.class);
+ if (groupText != null && groupText.wrapper() != Object.class)
+ {
+ BeanInfo wrapperInfo = JBossXBBuilder.configuration.getBeanInfo(groupText.wrapper());
+ TypeBinding wrapperTypeBinding = resolveTypeBinding(wrapperInfo.getClassInfo());
+ // Steal the attributes
+ Collection<AttributeBinding> otherAttributes = wrapperTypeBinding.getAttributes();
+ if (otherAttributes != null)
+ {
+ for (AttributeBinding other : otherAttributes)
+ elementTypeBinding.addAttribute(other);
+ }
+ ParticleHandler particleHandler = wrapperTypeBinding.getHandler();
+ if (particleHandler instanceof BeanHandler == false)
+ throw new IllegalStateException("Cannot wrap " + wrapperInfo.getName() + " not a bean type " + particleHandler);
+ BeanHandler beanHandler = (BeanHandler) particleHandler;
+ WrapperBeanAdapterFactory wrapperFactory = new WrapperBeanAdapterFactory(beanHandler.getBeanAdapterFactory(), propertyType.getType());
+ elementTypeBinding.setHandler(new BeanHandler(wrapperInfo.getName(), wrapperFactory));
+ elementTypeBinding.setSimpleType(wrapperTypeBinding.getSimpleType());
+ }
+ else
+ {
+ elementTypeBinding.setHandler(BuilderParticleHandler.INSTANCE);
+ }
elementTypeBinding.setSchemaBinding(schemaBinding);
- elementTypeBinding.setHandler(BuilderParticleHandler.INSTANCE);
ElementBinding elementBinding = createElementBinding(localPropertyType, elementTypeBinding, propertyQName, false);
// Bind it to the model
@@ -1548,22 +1573,6 @@
particle.setMinOccurs(0);
localModel.addParticle(particle);
- // Can it take text?
- JBossXmlGroupText groupText = ((ClassInfo) propertyType)
- .getUnderlyingAnnotation(JBossXmlGroupText.class);
- if (groupText != null)
- {
- CharactersHandler textHandler;
- if (groupText.wrapper() != Object.class)
- {
- BeanInfo wrapperInfo = JBossXBBuilder.configuration.getBeanInfo(groupText.wrapper());
- textHandler = new ValueHandler(property, wrapperInfo, groupText.property());
- }
- else
- textHandler = new ValueHandler(property);
- elementTypeBinding.setSimpleType(textHandler);
- }
-
// Setup the child model
ChoiceBinding childModel = new ChoiceBinding(schemaBinding);
childModel.setHandler(BuilderParticleHandler.INSTANCE);
@@ -1595,7 +1604,7 @@
log.trace("Added interceptor " + childName + " for type=" + property.getBeanInfo().getName()
+ " property=" + property.getName() + " interceptor=" + interceptor + " " + childType.getName());
- beanAdapterFactory.addProperty(propertyQName, new NoopPropertyHandler(property, propertyType));
+ beanAdapterFactory.addProperty(propertyQName, new PropertyHandler(property, propertyType));
JBossXmlGroupWildcard groupWildcard = ((ClassInfo) propertyType)
.getUnderlyingAnnotation(JBossXmlGroupWildcard.class);
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/spi/BeanAdapter.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/spi/BeanAdapter.java 2008-03-05 19:24:00 UTC (rev 2728)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/spi/BeanAdapter.java 2008-03-07 09:12:21 UTC (rev 2729)
@@ -52,6 +52,16 @@
}
/**
+ * Get the bean adapter factory
+ *
+ * @return the factory
+ */
+ protected BeanAdapterFactory getBeanAdapterFactory()
+ {
+ return beanAdapterFactory;
+ }
+
+ /**
* Get the property handler for an element name
*
* @param qName the element name
Modified: jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/mc/test/MapTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/mc/test/MapTestCase.java 2008-03-05 19:24:00 UTC (rev 2728)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/mc/test/MapTestCase.java 2008-03-07 09:12:21 UTC (rev 2729)
@@ -101,7 +101,7 @@
assertNull(map.getKeyType());
assertNull(map.getValueType());
assertStringValue(Integer.class.getName(), "4", getKey(map));
- assertStringValue(Boolean.class.getName(), "true", getKey(map));
+ assertStringValue(Boolean.class.getName(), "true", getValue(map));
}
public void testMapWithInjection() throws Exception
More information about the jboss-svn-commits
mailing list