private <T> Collection<? extends DisplayableValue<T>> parseEnumAllowedValues(QName typeName,
ComplexTypeDefinition ctd, XSType xsType) {
if (xsType.isSimpleType()) {
if (xsType.asSimpleType().isRestriction()) {
XSRestrictionSimpleType restriction = xsType.asSimpleType().asRestriction();
List<XSFacet> enumerations = restriction.getDeclaredFacets(XSFacet.FACET_ENUMERATION);
List<DisplayableValueImpl<T>> enumValues = new ArrayList<DisplayableValueImpl<T>>(
enumerations.size());
for (XSFacet facet : enumerations) {
String value = facet.getValue().value;
Element descriptionE = SchemaProcessorUtil.getAnnotationElement(facet.getAnnotation(),
SCHEMA_DOCUMENTATION);
Element appInfo = SchemaProcessorUtil.getAnnotationElement(facet.getAnnotation(),
SCHEMA_APP_INFO);
Element valueE = null;
if (appInfo != null) {
NodeList list = appInfo.getElementsByTagNameNS(
PrismConstants.A_LABEL.getNamespaceURI(),
PrismConstants.A_LABEL.getLocalPart());
if (list.getLength() != 0) {
valueE = (Element) list.item(0);
}
}
String label = null;
if (valueE != null) {
label = valueE.getTextContent();
} else {
label = value;
}
DisplayableValueImpl<T> edv = null;
Class compileTimeClass = prismContext.getSchemaRegistry().getCompileTimeClass(typeName);
if (ctd != null && !ctd.isRuntimeSchema() && compileTimeClass != null) {
String fieldName = null;
for (Field field : compileTimeClass.getDeclaredFields()) {
XmlEnumValue xmlEnumValue = field.getAnnotation(XmlEnumValue.class);
if (xmlEnumValue != null && xmlEnumValue.value() != null
&& xmlEnumValue.value().equals(value)) {
fieldName = field.getName();
}
}
if (fieldName != null) {
T enumValue = (T) Enum.valueOf((Class<Enum>) compileTimeClass, fieldName);
edv = new DisplayableValueImpl(enumValue, label,
descriptionE != null ? descriptionE.getTextContent() : null);
} else {
edv = new DisplayableValueImpl(value, label,
descriptionE != null ? descriptionE.getTextContent() : null);
}
} else {
edv = new DisplayableValueImpl(value, label,
descriptionE != null ? descriptionE.getTextContent() : null);
}
enumValues.add(edv);
}
if (enumValues != null && !enumValues.isEmpty()) {
return enumValues;
}
}
}
return null;
}
DomToSchemaPostProcessor.java 文件源码
java
阅读 19
收藏 0
点赞 0
评论 0
项目:midpoint
作者:
评论列表
文章目录