}
private static void customizeTerm(XSAnnotation an, TermBinding term, boolean trace)
{
XsdAnnotation xsdAn = XsdAnnotation.unmarshal(an.getAnnotationString());
XsdAppInfo appInfo = xsdAn.getAppInfo();
if(appInfo != null)
{
Boolean skip = null;
ClassMetaData classMetaData = appInfo.getClassMetaData();
if(classMetaData != null)
{
if (trace)
{
String msg;
if(term.isModelGroup())
{
msg = term + " bound to ";
}
else if(term.isWildcard())
{
msg = " wildcard bound to ";
}
else
{
msg = "element: name=" + ((ElementBinding)term).getQName() + ", class=";
}
msg += classMetaData.getImpl();
log.trace(msg);
}
term.setClassMetaData(classMetaData);
skip = Boolean.FALSE;
}
PropertyMetaData propertyMetaData = appInfo.getPropertyMetaData();
if(propertyMetaData != null)
{
if (trace)
{
String msg = term.isWildcard() || term.isModelGroup() ? term + " " : "element: name=" +
((ElementBinding)term).getQName() + ", ";
msg += " property=" +
propertyMetaData.getName() +
", collectionType=" + propertyMetaData.getCollectionType();
log.trace(msg);
}
term.setPropertyMetaData(propertyMetaData);
}
MapEntryMetaData mapEntryMetaData = appInfo.getMapEntryMetaData();
if(mapEntryMetaData != null)
{
if(propertyMetaData != null)
{
String msg = "A term can be bound either as a property or as a map" +
" entry but not both: " +
(term.isModelGroup() ? term.toString() : ((ElementBinding)term).getQName().toString());
throw new JBossXBRuntimeException(msg);
}
if (trace)
{
String msg = term.isWildcard() || term.isModelGroup() ? term.toString() : "element name=" +
((ElementBinding)term).getQName();
msg += " is bound to a map entry: impl=" +
mapEntryMetaData.getImpl() +
", getKeyMethod=" +
mapEntryMetaData.getGetKeyMethod() +
", setKeyMethod=" +
mapEntryMetaData.getSetKeyMethod() +
", getValueMethod=" +
mapEntryMetaData.getGetValueMethod() +
", setValueMethod=" +
mapEntryMetaData.getSetValueMethod() +
", valueType=" +
mapEntryMetaData.getValueType() +
", nonNullValue=" + mapEntryMetaData.isNonNullValue();
log.trace(msg);
}
if(classMetaData != null)
{
String msg = "Invalid customization: both jbxb:class and jbxb:mapEntry are specified for term " +
(term.isWildcard() || term.isModelGroup() ? term.toString() : ((ElementBinding)term).getQName().toString());
throw new JBossXBRuntimeException(msg);
}
term.setMapEntryMetaData(mapEntryMetaData);
skip = Boolean.FALSE;
}
PutMethodMetaData putMethodMetaData = appInfo.getPutMethodMetaData();
if(putMethodMetaData != null)
{
if (trace)
{
String msg = term.isWildcard() || term.isModelGroup() ? term.toString() : "element: name=" +
((ElementBinding)term).getQName() + ",";
msg += " putMethod=" +
putMethodMetaData.getName() +
", keyType=" +
putMethodMetaData.getKeyType() +
", valueType=" + putMethodMetaData.getValueType();
log.trace(msg);
}
term.setPutMethodMetaData(putMethodMetaData);
}
AddMethodMetaData addMethodMetaData = appInfo.getAddMethodMetaData();
if(addMethodMetaData != null)
{
if (trace)
{
String msg = term.isWildcard() || term.isModelGroup() ? term.toString() : "element: name=" +
((ElementBinding)term).getQName() + ",";
msg += " addMethod=" +
addMethodMetaData.getMethodName() +
", valueType=" +
addMethodMetaData.getValueType() +
", isChildType=" + addMethodMetaData.isChildType();
log.trace(msg);
}
term.setAddMethodMetaData(addMethodMetaData);
}
ValueMetaData valueMetaData = appInfo.getValueMetaData();
if(valueMetaData != null)
{
if (trace)
{
String msg = term.isWildcard() || term.isModelGroup() ? term.toString() : "element " +
((ElementBinding)term).getQName();
msg += ": unmarshalMethod=" + valueMetaData.getUnmarshalMethod();
log.trace(msg);
}
term.setValueMetaData(valueMetaData);
}
boolean mapEntryKey = appInfo.isMapEntryKey();
if(mapEntryKey)
{
if (trace)
{
String msg = term.isWildcard() || term.isModelGroup() ? term.toString() : "element name=" +
((ElementBinding)term).getQName();
msg += ": is bound to a key in a map entry";
log.trace(msg);
}
term.setMapEntryKey(mapEntryKey);
skip = Boolean.FALSE;
}
boolean mapEntryValue = appInfo.isMapEntryValue();
if(mapEntryValue)
{
if (trace)
{
String msg = term.isWildcard() || term.isModelGroup() ? term.toString() : "element name=" +
((ElementBinding)term).getQName();
msg += ": is bound to a value in a map entry";
log.trace(msg);
}
term.setMapEntryValue(mapEntryValue);
skip = Boolean.FALSE;
}
boolean skipAnnotation = appInfo.isSkip();
if(skip != null)
{
term.setSkip(skip);
}
else if(skipAnnotation)