private static String inspectTerm(XSTerm term) {
StringBuilder sig = new StringBuilder();
switch (term.getType()) {
case XSConstants.MODEL_GROUP:
AbstractTypeDescription.logger.debug("==> found model group");
XSModelGroup group = (XSModelGroup) term;
sig.append(":").append(XSModelHelper.compositorToString(group.getCompositor()));
sig.append("[");
XSObjectList list = group.getParticles();
List<String> subSignatures = new ArrayList<String>();
for (int i = 0; i < list.getLength(); ++i) {
XSParticle part = (XSParticle) list.item(i);
XSTerm item = part.getTerm();
AbstractTypeDescription.logger.debug("==--> embedded [{" + item.getNamespace() + "}:" + item.getName() + "]");
subSignatures.add(ComplexTypeDescription.inspectTerm(item));
}
/*
* choice elements may differ in their definition order describing the same content model for example:
* {@code
*
* <xs:choice>
*
* <xs:element name="eihter" type="xs:string"/>
*
* <xs:element name="or" type="xs:float"/>
*
* </xs:choice>
*
* }
*
* may be equivalent to {@code
*
* <xs:choice>
*
* <xs:element name="or" type="xs:float"/>
*
* <xs:element name="either" type="xs:string"/>
*
* </xs:choice>
*
* }
*/
if (group.getCompositor() == XSModelGroup.COMPOSITOR_CHOICE) {
Collections.sort(subSignatures);
}
for (String subSig : subSignatures) {
sig.append(subSig).append("|");
}