[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