// check for repeated item
if (memb.isCollection()) {
// create collection element for field or property
CollectionElement coll = new CollectionElement();
if (memb.getFieldName() == null) {
coll.setGetName(gmeth);
coll.setSetName(memb.getSetName());
} else {
coll.setFieldName(memb.getFieldName());
}
setTypes(memb, coll);
// set the element name, if defined
String name = memb.getXmlName();
if ((cust.isWrapCollections() || memb.isElementForced()) && name != null) {
coll.setName(name);
hold.addNamespaceUsage(hold.getNamespace());
}
// check for optional value
if (!memb.isRequired()) {
coll.setUsageName("optional");
}
// check for type defined
String itype = memb.getItemType();
if (itype != null) {
// set name to be used for items in collection
String iname = memb.getItemName();
if (iname == null) {
// use name based on item type
String simple = itype;
int split = simple.lastIndexOf('.');
if (split >= 0) {
simple = simple.substring(0, split);
}
iname = cust.convertName(simple);
}
// define the collection details
defineCollection(itype, iname, coll, hold);
// check for special case of two unwrapped collections with same item-type and no children
ArrayList siblings = parent.children();
if (siblings.size() > 0 && coll.children().size() == 0 && coll.getName() == null) {
ElementBase sibling = (ElementBase)siblings.get(siblings.size()-1);
if (sibling.type() == ElementBase.COLLECTION_ELEMENT) {
CollectionElement lastcoll = (CollectionElement)sibling;
if (lastcoll.children().size() == 0 && lastcoll.getName() == null &&
Utility.safeEquals(lastcoll.getItemTypeName(), coll.getItemTypeName())) {
throw new IllegalStateException("Need to use wrapper element for collection member '" +
memb.getBaseName() + "' of class " + cust.getName());
}
}
}