protected void checkIfReferenceToGlobalTypeIsNeeded(Element elem,
TypeSystemHolder typeSystemHolder,
Inst2XsdOptions options) {
// VenetianBlindDesign defines global complex types
Type elemType = elem.getType();
QName elemName = elem.getName();
if (elemType.isGlobal())
// is already global, do nothing
return;
if (elemType.isComplexType())
{
for (int i = 0; ; i++)
{
elemType.setName(new QName(elemName.getNamespaceURI(), elemName.getLocalPart() + "Type" + (i==0 ? "" : "" + i)));
Type candidate = typeSystemHolder.getGlobalType(elemType.getName());
if (candidate==null)
{
elemType.setGlobal(true);
typeSystemHolder.addGlobalType(elemType);
break;
}
else
{
if (compatibleTypes(candidate, elemType))
{
combineTypes(candidate, elemType, options);
elem.setType(candidate);
break;
}
}
}
}
}
|