DomToSchemaProcessor.java 文件源码

java
阅读 19 收藏 0 点赞 0 评论 0

项目:engerek 作者:
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;
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号