[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