/* */
/* 1330 */ PropertyInfo memberProp = propBeanInfo.getProperty(memberPropName);
/* 1331 */ TypeInfo memberTypeInfo = memberProp.getType();
/* 1332 */ String memberNamespace = null;
/* */
/* 1334 */ JBossXmlNsPrefix nsPrefix = (JBossXmlNsPrefix)memberProp.getUnderlyingAnnotation(JBossXmlNsPrefix.class);
/* 1335 */ if (nsPrefix != null)
/* */ {
/* 1337 */ memberNamespace = this.schemaBinding.getNamespace(nsPrefix.prefix());
/* 1338 */ if ((memberNamespace == null) && (nsPrefix.schemaTargetIfNotMapped()))
/* */ {
/* 1340 */ throw new IllegalStateException("Prefix '" + nsPrefix.prefix() + "' is not mapped to any namespace!");
/* */ }
/* */
/* */ }
/* */
/* 1345 */ String memberName = null;
/* 1346 */ XmlElement memberXmlElement = (XmlElement)memberProp.getUnderlyingAnnotation(XmlElement.class);
/* 1347 */ if (memberXmlElement != null)
/* */ {
/* 1349 */ if (!XmlElement.DEFAULT.class.equals(memberXmlElement.type()))
/* */ {
/* 1351 */ memberTypeInfo = memberTypeInfo.getTypeInfoFactory().getTypeInfo(memberXmlElement.type());
/* */ }
/* */
/* 1354 */ if (memberNamespace == null)
/* 1355 */ memberNamespace = memberXmlElement.namespace();
/* 1356 */ memberName = memberXmlElement.name();
/* */ }
/* */
/* 1359 */ if (memberNamespace == null)
/* */ {
/* 1361 */ memberNamespace = this.defaultNamespace;
/* */ }
/* */
/* 1364 */ boolean isCol = false;
/* 1365 */ AbstractPropertyHandler memberPropertyHandler = null;
/* 1366 */ if (memberProp.getType().isCollection())
/* */ {
/* 1368 */ memberPropertyHandler = new CollectionPropertyHandler(memberProp, memberProp.getType());
/* 1369 */ isCol = true;
/* */
/* 1371 */ if ((memberXmlElement == null) || (XmlElement.DEFAULT.class.equals(memberXmlElement.type())))
/* */ {
/* 1373 */ JBossXmlCollection jbossXmlCollection = (JBossXmlCollection)memberProp.getUnderlyingAnnotation(JBossXmlCollection.class);
/* */
/* 1375 */ if (jbossXmlCollection != null)
/* */ {
/* 1377 */ memberTypeInfo = memberTypeInfo.getTypeInfoFactory().getTypeInfo(jbossXmlCollection.type());
/* */ }
/* 1379 */ memberTypeInfo = findComponentType((ClassInfo)memberTypeInfo);
/* */ }
/* */
/* */ }
/* 1383 */ else if (memberTypeInfo.isCollection())
/* */ {
/* 1385 */ memberPropertyHandler = new CollectionPropertyHandler(memberProp, memberTypeInfo);
/* 1386 */ isCol = true;
/* 1387 */ memberTypeInfo = findComponentType((ClassInfo)memberTypeInfo);
/* */ }
/* */ else
/* */ {
/* 1391 */ memberPropertyHandler = new PropertyHandler(memberProp, memberTypeInfo);
/* */ }
/* */
/* 1394 */ QName memberQName = generateXmlName(memberProp.getName(), this.elementForm, memberNamespace, memberName);
/* 1395 */ propBeanAdapterFactory.addProperty(memberQName, memberPropertyHandler);
/* */
/* 1397 */ XBValueAdapter valueAdapter = null;
/* 1398 */ XmlJavaTypeAdapter xmlTypeAdapter = (XmlJavaTypeAdapter)memberProp.getUnderlyingAnnotation(XmlJavaTypeAdapter.class);
/* 1399 */ if (xmlTypeAdapter != null)
/* */ {
/* 1401 */ valueAdapter = new XBValueAdapter(xmlTypeAdapter.value(), memberTypeInfo.getTypeInfoFactory());
/* 1402 */ memberTypeInfo = valueAdapter.getAdaptedTypeInfo();
/* */ }
/* */
/* 1405 */ TypeBinding memberTypeBinding = resolveTypeBinding(memberTypeInfo);
/* 1406 */ ElementBinding memberElement = createElementBinding(memberTypeInfo, memberTypeBinding, memberQName, false);
/* */
/* 1408 */ memberElement.setNillable(true);
/* 1409 */ memberElement.setValueAdapter(valueAdapter);
/* 1410 */ ParticleBinding memberParticle = new ParticleBinding(memberElement, 0, 1, isCol);
/* 1411 */ propertyGroup.addParticle(memberParticle);
/* */
/* 1413 */ if (this.trace) {
/* 1414 */ log.trace("added " + memberParticle + " to " + xmlModelGroup.kind() + ", property " + property.getName());
/* */ }
/* */ }
/* */ }
/* */
/* 1419 */ model.addParticle(new ParticleBinding(propertyGroup));
/* */
/* 1423 */ AbstractPropertyHandler propertyHandler = null;
/* 1424 */ if (propertyType.isCollection()) {
/* 1425 */ propertyHandler = new CollectionPropertyHandler(property, propClassInfo);
/* */ }
/* */ else {
/* 1428 */ propertyHandler = new PropertyHandler(property, propClassInfo);
/* */ }
/* 1430 */ beanAdapterFactory.addProperty(propertyGroup.getQName(), propertyHandler);
/* 1431 */ return;
/* */ }
/* */
/* */ }
/* */
/* 1436 */ XmlElement[] elements = null;
/* 1437 */ XmlElement xmlElement = (XmlElement)property.getUnderlyingAnnotation(XmlElement.class);
/* 1438 */ if (xmlElement != null)
/* */ {
/* 1441 */ elements = new XmlElement[] { xmlElement };
/* */ }
/* */ else
/* */ {
/* 1447 */ XmlElements xmlElements = (XmlElements)property.getUnderlyingAnnotation(XmlElements.class);
/* 1448 */ if (xmlElements != null) {
/* 1449 */ elements = xmlElements.value();
/* */ }
/* */ }
/* */
/* 1453 */ if ((elements == null) || (elements.length == 0)) {
/* 1454 */ elements = new XmlElement[1];
/* */ }
/* */
/* 1457 */ JBossXmlNsPrefix xmlNsPrefix = (JBossXmlNsPrefix)property.getUnderlyingAnnotation(JBossXmlNsPrefix.class);
/* */
/* 1461 */ XmlElementWrapper xmlWrapper = (XmlElementWrapper)property.getUnderlyingAnnotation(XmlElementWrapper.class);
/* 1462 */ if (xmlWrapper != null)
/* */ {
/* 1464 */ String wrapperNamespace = xmlWrapper.namespace();
/* 1465 */ String wrapperName = xmlWrapper.name();
/* 1466 */ boolean wrapperNillable = xmlWrapper.nillable();
/* */
/* 1468 */ QName wrapperQName = generateXmlName(property.getName(), this.elementForm, wrapperNamespace, wrapperName);
/* */
/* 1470 */ TypeBinding wrapperType = new TypeBinding();
/* 1471 */ SequenceBinding seq = new SequenceBinding(this.schemaBinding);
/* 1472 */ seq.setHandler(BuilderParticleHandler.INSTANCE);
/* 1473 */ ParticleBinding particle = new ParticleBinding(seq);
/* 1474 */ wrapperType.setParticle(particle);
/* 1475 */ wrapperType.setHandler(new DefaultElementHandler());
/* */
/* 1477 */ ElementBinding wrapperElement = createElementBinding(propertyType, wrapperType, wrapperQName, false);
/* 1478 */ wrapperElement.setNillable(wrapperNillable);
/* 1479 */ wrapperElement.setSkip(Boolean.TRUE);
/* 1480 */ particle = new ParticleBinding(wrapperElement, 1, 1, false);
/* 1481 */ localModel.addParticle(particle);
/* */
/* 1483 */ localModel = seq;
/* */
/* 1485 */ if (this.trace) {
/* 1486 */ log.trace("Added property " + wrapperQName + " for type=" + property.getBeanInfo().getName() + " property=" + property.getName() + " as a wrapper element");
/* */ }
/* */
/* */ }
/* */
/* 1491 */ if (elements.length > 1)
/* */ {
/* 1493 */ ChoiceBinding choice = new ChoiceBinding(this.schemaBinding);
/* 1494 */ choice.setHandler(BuilderParticleHandler.INSTANCE);
/* 1495 */ ParticleBinding particleBinding = new ParticleBinding(choice);
/* 1496 */ particleBinding.setMinOccurs(0);
/* 1497 */ particleBinding.setMaxOccurs(1);
/* 1498 */ localModel.addParticle(particleBinding);
/* 1499 */ localModel = choice;
/* 1500 */ if (this.trace) {
/* 1501 */ log.trace("XmlElements seen adding choice for type=" + property.getBeanInfo().getName() + " property=" + property.getName());
/* */ }
/* */ }
/* */
/* 1505 */ for (int i = 0; i < elements.length; i++)
/* */ {
/* 1507 */ XmlElement element = elements[i];
/* 1508 */ if (this.trace) {
/* 1509 */ log.trace("Processing " + element + " for type=" + property.getBeanInfo().getName() + " property=" + property.getName());
/* */ }
/* */
/* 1513 */ String overrideNamespace = null;
/* 1514 */ String overrideName = null;
/* 1515 */ boolean nillable = false;
/* 1516 */ boolean required = false;
/* */
/* 1518 */ TypeInfo localPropertyType = propertyType;
/* */
/* 1520 */ if (element != null)
/* */ {
/* 1522 */ overrideNamespace = element.namespace();
/* 1523 */ overrideName = element.name();
/* 1524 */ nillable = element.nillable();
/* 1525 */ required = element.required();
/* 1526 */ Class elementType = element.type();
/* 1527 */ if (elementType != XmlElement.DEFAULT.class) {
/* 1528 */ localPropertyType = propertyType.getTypeInfoFactory().getTypeInfo(elementType);
/* */ }
/* */ }
/* 1531 */ if (xmlNsPrefix != null)
/* */ {
/* 1533 */ overrideNamespace = this.schemaBinding.getNamespace(xmlNsPrefix.prefix());
/* 1534 */ if (overrideNamespace == null)
/* */ {
/* 1536 */ if (xmlNsPrefix.schemaTargetIfNotMapped())
/* */ {
/* 1538 */ overrideNamespace = this.defaultNamespace;
/* */ }
/* */ else
/* */ {
/* 1542 */ throw new IllegalStateException("Prefix '" + xmlNsPrefix.prefix() + "' is not mapped to any namespace!");
/* */ }
/* */
/* */ }
/* */
/* */ }