[jboss-svn-commits] JBoss Common SVN: r4040 - in jbossxb/trunk: src/main/java/org/jboss/xb/builder and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Feb 17 12:21:04 EST 2010


Author: alex.loubyansky at jboss.com
Date: 2010-02-17 12:21:03 -0500 (Wed, 17 Feb 2010)
New Revision: 4040

Modified:
   jbossxb/trunk/pom.xml
   jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBBuilder.java
   jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java
   jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/CollectionPropertyHandler.java
   jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/jbossxmlcollection/test/JBossXmlCollectionUnitTestCase.java
Log:
JBXB-239, added one more test execution with previous default collection handlers

Modified: jbossxb/trunk/pom.xml
===================================================================
--- jbossxb/trunk/pom.xml	2010-02-17 11:02:33 UTC (rev 4039)
+++ jbossxb/trunk/pom.xml	2010-02-17 17:21:03 UTC (rev 4040)
@@ -70,6 +70,29 @@
                  </systemProperties>
               </configuration>
             </execution>
+            <execution>
+              <!-- this execution will run with xb.builder.repeatableParticleHandlers=false -->
+              <id>repeatable-handlers-false-test</id>
+              <goals>
+                 <goal>test</goal>
+              </goals>
+              <configuration>
+                 <testFailureIgnore>false</testFailureIgnore>
+                 <redirectTestOutputToFile>true</redirectTestOutputToFile>
+                 <excludes>
+                    <exclude>org/jboss/test/xml/RepeatedElementsUnitTestCase.java</exclude> <!-- JBXB-88 -->
+                    <exclude>org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/test/RepeatablePropertyAllUnmarshallingTestCase.java</exclude> <!-- JBXB-193 -->
+                    <!-- below are the tests that don't depend on the setting -->
+                    <exclude>org/jboss/test/xb/validator/test/BasicBindingValidatorUnitTestCase.java</exclude>
+                 </excludes>
+                 <systemProperties>
+                    <property>
+                       <name>xb.builder.repeatableParticleHandlers</name>
+                       <value>false</value>
+                    </property>
+                 </systemProperties>
+              </configuration>
+            </execution>
          </executions>
       </plugin>    
     </plugins>

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBBuilder.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBBuilder.java	2010-02-17 11:02:33 UTC (rev 4039)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBBuilder.java	2010-02-17 17:21:03 UTC (rev 4040)
@@ -66,6 +66,9 @@
    /** system property name to use for initialization */
    public static final String ELEMENT_SET_PARENT_OVERRIDE_HANDLER = "xb.builder.elementSetParentOverrideHandler";
 
+   /** system property name to use for initialization */
+   public static final String REPEATABLE_PARTICLE_HANDLERS = "xb.builder.repeatableParticleHandlers";
+
    /** The configuration */
    static Configuration configuration;
    
@@ -79,8 +82,12 @@
 
    static boolean sequencesRequirePropOrder;
 
-   static boolean elementSetParentHandler = true;
+   // whether elements override their type's ParticleHandler.setParent with property-specific setParent impl
+   static boolean elementSetParentHandler;
 
+   // whether to use repeatable particle handlers for collections
+   static boolean repeatableParticleHandlers;
+
    static
    {
       configuration = AccessController.doPrivileged(new PrivilegedAction<PropertyConfiguration>()
@@ -97,6 +104,7 @@
       useUnorderedSequence = getBooleanProperty(JBossXBBuilder.USE_UNORDERED_SEQUENCE_PROPERTY, false);
       sequencesRequirePropOrder = getBooleanProperty(JBossXBBuilder.SEQUENCES_REQUIRE_PROP_ORDER, true);
       elementSetParentHandler = getBooleanProperty(JBossXBBuilder.ELEMENT_SET_PARENT_OVERRIDE_HANDLER, true);
+      repeatableParticleHandlers = getBooleanProperty(JBossXBBuilder.REPEATABLE_PARTICLE_HANDLERS, true);
    }
 
    private static boolean getBooleanProperty(final String propertyName, boolean defaultValue)
@@ -145,6 +153,16 @@
       JBossXBBuilder.elementSetParentHandler = elementSetParentHandler;
    }
 
+   public static boolean isRepeatableParticleHandlers()
+   {
+      return repeatableParticleHandlers;
+   }
+   
+   public static void setRepeatableParticleHandlers(boolean repeatableParticleHandlers)
+   {
+      JBossXBBuilder.repeatableParticleHandlers = repeatableParticleHandlers;
+   }
+
    /**
     * Create a new schema binding initializer
     * 
@@ -263,6 +281,7 @@
       builder.setUseUnorderedSequence(useUnorderedSequence);
       builder.setSequencesRequirePropOrder(sequencesRequirePropOrder);
       builder.setElementSetParentOverrideHandler(elementSetParentHandler);
+      builder.setRepeatableParticleHandlers(repeatableParticleHandlers);
       builder.build(schemaBinding);
    }
    
@@ -299,6 +318,7 @@
          builder.setUseUnorderedSequence(useUnorderedSequence);
          builder.setSequencesRequirePropOrder(sequencesRequirePropOrder);
          builder.setElementSetParentOverrideHandler(elementSetParentHandler);
+         builder.setRepeatableParticleHandlers(repeatableParticleHandlers);
          binding = builder.build();
          classInfo.setAttachment(SchemaBinding.class.getName(), binding);
       }

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java	2010-02-17 11:02:33 UTC (rev 4039)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java	2010-02-17 17:21:03 UTC (rev 4040)
@@ -189,6 +189,7 @@
    private boolean useUnorderedSequence;
    private boolean sequencesRequirePropOrder;
    private boolean elementSetParentHandler;
+   private boolean repeatableParticleHandlers;
 
    /** transient property names by type name */
    private Map<String, Set<String>> jbossXmlTransients = Collections.emptyMap();
@@ -241,6 +242,16 @@
       this.elementSetParentHandler = elementSetParentHandler;
    }
 
+   public boolean isRepeatableParticleHandlers()
+   {
+      return repeatableParticleHandlers;
+   }
+   
+   public void setRepeatableParticleHandlers(boolean repeatableParticleHandlers)
+   {
+      this.repeatableParticleHandlers = repeatableParticleHandlers;
+   }
+
    /**
     * Build the schema
     * 
@@ -1247,13 +1258,11 @@
             localModel.addParticle(particleBinding);
             particleBinding.setMinOccurs(0);
 
-            wildcardHandler = new PropertyWildcardHandler(wildcardProperty, wildcardType);
-            wildcard.setHandler((ParticleHandler) wildcardHandler);
-            
             // Setup any new model and determine the wildcard type
             if (wildcardType.isArray())
             {
                particleBinding.setMaxOccursUnbounded(true);
+               wildcardHandler = new PropertyWildcardHandler(wildcardProperty, wildcardType);
                wildcard.setRepeatableHandler(new ArrayWrapperRepeatableParticleHandler(wildcardHandler));
                type = ((ArrayInfo) wildcardType).getComponentType();
                if (trace)
@@ -1262,14 +1271,26 @@
             else if (wildcardType.isCollection())
             {
                particleBinding.setMaxOccursUnbounded(true);
-               wildcard.setRepeatableHandler(new CollectionRepeatableParticleHandler(wildcardHandler, (ClassInfo) wildcardType, null));
+               if(repeatableParticleHandlers)
+               {
+                  wildcardHandler = new PropertyWildcardHandler(wildcardProperty, wildcardType);
+                  wildcard.setRepeatableHandler(new CollectionRepeatableParticleHandler(wildcardHandler, (ClassInfo) wildcardType, null));
+               }
+               else
+                  wildcardHandler = new CollectionPropertyWildcardHandler(wildcardProperty, wildcardType);
+               
                type = ((ClassInfo)wildcardProperty.getType()).getComponentType();
                if (trace)
                   log.trace("Wildcard " + wildcardProperty.getName() + " is a collection of type " + type.getName());
             }
             else
+            {
                particleBinding.setMaxOccurs(1);
+               wildcardHandler = new PropertyWildcardHandler(wildcardProperty, wildcardType);
+            }
 
+            wildcard.setHandler((ParticleHandler) wildcardHandler);
+
             XmlAnyElement xmlAnyElement = wildcardProperty.getUnderlyingAnnotation(XmlAnyElement.class);
             boolean isLax = xmlAnyElement == null ? true : xmlAnyElement.lax();
             if (isLax)
@@ -1465,10 +1486,10 @@
 
          if(xmlWrapper == null)
          {
-            if(propertyType.isCollection())
+            if(propertyType.isArray())
+               choice.setRepeatableHandler(new ArrayWrapperRepeatableParticleHandler(new PropertyHandler(property, propertyType)));
+            else if(repeatableParticleHandlers && propertyType.isCollection())
                choice.setRepeatableHandler(new CollectionRepeatableParticleHandler(new PropertyHandler(property, propertyType), (ClassInfo) propertyType, null));
-            else if(propertyType.isArray())
-               choice.setRepeatableHandler(new ArrayWrapperRepeatableParticleHandler(new PropertyHandler(property, propertyType)));
          }
 
          if (trace)
@@ -1486,7 +1507,7 @@
          localModel.addParticle(particleBinding);
          particleBinding.setMinOccurs(0);
 
-         AbstractPropertyHandler wildcardHandler = new PropertyWildcardHandler(property, propertyType);
+         AbstractPropertyHandler wildcardHandler;
 
          // Setup any new model and determine the wildcard type
          TypeInfo wildcardType = propertyType;
@@ -1494,6 +1515,7 @@
          {
             if(!repeatableChoice)
                particleBinding.setMaxOccursUnbounded(true);
+            wildcardHandler = new PropertyWildcardHandler(property, propertyType);
             wildcard.setRepeatableHandler(new ArrayWrapperRepeatableParticleHandler(wildcardHandler));
             wildcardType = ((ArrayInfo) propertyType).getComponentType();
             if (trace)
@@ -1503,13 +1525,23 @@
          {
             if(!repeatableChoice)
                particleBinding.setMaxOccursUnbounded(true);
-            wildcard.setRepeatableHandler(new CollectionRepeatableParticleHandler(wildcardHandler, (ClassInfo) propertyType, null));
+            if(repeatableParticleHandlers)
+            {
+               wildcardHandler = new PropertyWildcardHandler(property, propertyType);
+               wildcard.setRepeatableHandler(new CollectionRepeatableParticleHandler(wildcardHandler, (ClassInfo) propertyType, null));
+            }
+            else
+               wildcardHandler = new CollectionPropertyWildcardHandler(property, propertyType);
+
             wildcardType = ((ClassInfo)property.getType()).getComponentType();
             if (trace)
                log.trace("Wildcard " + property.getName() + " is a collection of type " + wildcardType.getName());
          }
          else
+         {
+            wildcardHandler = new PropertyWildcardHandler(property, propertyType);
             particleBinding.setMaxOccurs(1);
+         }
 
          XmlAnyElement xmlAnyElement = property.getUnderlyingAnnotation(XmlAnyElement.class);
          boolean isLax = xmlAnyElement == null ? true : xmlAnyElement.lax();
@@ -1719,11 +1751,7 @@
          {
             localPropertyType = valueAdapter.getAdaptedTypeInfo();
             if(localPropertyType.isCollection())
-            {
-               if(propertyHandler == null)
-                  propertyHandler = new PropertyHandler(property, localPropertyType);
-               repeatableHandler = new CollectionRepeatableParticleHandler(propertyHandler, (ClassInfo) localPropertyType, valueAdapter);
-            }
+               repeatableHandler = new CollectionRepeatableParticleHandler(new PropertyHandler(property, localPropertyType), (ClassInfo) localPropertyType, valueAdapter);
          }
 
          ModelGroupBinding targetGroup = localModel;
@@ -1735,6 +1763,9 @@
          // and this is checked with the XmlType annotation
          if (propertyType.isCollection() && ((ClassInfo) propertyType).getUnderlyingAnnotation(XmlType.class) == null)
          {
+            if(propertyHandler == null && !repeatableParticleHandlers)
+               propertyHandler = new CollectionPropertyHandler(property, propertyType);
+            
             isCol = true;
             colType = propertyType;
             // here we get the comp type based on the non-overriden property type...
@@ -1754,6 +1785,14 @@
          else if (localPropertyType.isCollection()
                && ((ClassInfo) localPropertyType).getUnderlyingAnnotation(XmlType.class) == null)
          {
+            if(propertyHandler == null && !repeatableParticleHandlers)
+            {
+               if (valueAdapter != null)
+                  propertyHandler = new PropertyHandler(property, localPropertyType);
+               else
+                  propertyHandler = new CollectionPropertyHandler(property, localPropertyType);
+            }
+
             isCol = true;
             colType = localPropertyType;
             localPropertyType = ((ClassInfo)localPropertyType).getComponentType();
@@ -1853,13 +1892,13 @@
 
             if(repeatableHandler == null && elements.length == 1 && xmlWrapper == null)
             {
-               if(isCol)
-                  repeatableHandler = new CollectionRepeatableParticleHandler(propertyHandler, (ClassInfo) colType, null);
-               else if(propertyType.isArray())
+               if(propertyType.isArray())
                {
                   isCol = true;
                   repeatableHandler = new ArrayWrapperRepeatableParticleHandler(propertyHandler);
                }
+               else if(isCol && repeatableParticleHandlers)
+                  repeatableHandler = new CollectionRepeatableParticleHandler(propertyHandler, (ClassInfo) colType, null);
             }
             
             if(repeatableHandler != null)
@@ -2069,9 +2108,9 @@
       particle = new ParticleBinding(wrapperElement, annotation.required() ? 1 : 0, 1, propertyType.isCollection() || propertyType.isArray());
       parentModel.addParticle(particle);
 
-      if(propertyType.isArray())
+      if (propertyType.isArray())
          wrapperElement.setRepeatableHandler(new ArrayWrapperRepeatableParticleHandler(setParentProperty));
-      else if(propertyType.isCollection())
+      else if (propertyType.isCollection() && repeatableParticleHandlers)
          wrapperElement.setRepeatableHandler(new CollectionRepeatableParticleHandler(setParentProperty, (ClassInfo) propertyType, null));
       
       return seq;

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/CollectionPropertyHandler.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/CollectionPropertyHandler.java	2010-02-17 11:02:33 UTC (rev 4039)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/CollectionPropertyHandler.java	2010-02-17 17:21:03 UTC (rev 4040)
@@ -28,7 +28,6 @@
 import org.jboss.beans.info.spi.PropertyInfo;
 import org.jboss.reflect.spi.ClassInfo;
 import org.jboss.reflect.spi.TypeInfo;
-import org.jboss.xb.annotations.JBossXmlCollection;
 import org.jboss.xb.spi.BeanAdapter;
 import org.jboss.xb.util.CollectionFactory;
 
@@ -56,16 +55,8 @@
    public CollectionPropertyHandler(PropertyInfo propertyInfo, TypeInfo propertyType)
    {
       super(propertyInfo, propertyType);
-
       componentType = ((ClassInfo) propertyType).getComponentType();
-
-      ClassInfo collectionType = null;
-      JBossXmlCollection xmlCol = propertyInfo.getUnderlyingAnnotation(JBossXmlCollection.class);
-      if (xmlCol != null)
-         collectionType = (ClassInfo) propertyType.getTypeInfoFactory().getTypeInfo(xmlCol.type());
-      else
-         collectionType = (ClassInfo) propertyType;
-      colFactory = CollectionFactory.getFactory(collectionType);
+      colFactory = CollectionFactory.getFactory((ClassInfo) propertyType);
    }
 
    @Override

Modified: jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/jbossxmlcollection/test/JBossXmlCollectionUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/jbossxmlcollection/test/JBossXmlCollectionUnitTestCase.java	2010-02-17 11:02:33 UTC (rev 4039)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/jbossxmlcollection/test/JBossXmlCollectionUnitTestCase.java	2010-02-17 17:21:03 UTC (rev 4040)
@@ -28,7 +28,6 @@
 import org.jboss.test.xb.builder.object.jbossxmlcollection.support.Root;
 
 
-
 /**
  * A JBossXmlCollectionUnitTestCase.
  * 



More information about the jboss-svn-commits mailing list