Search in sources :

Example 1 with CTypeRef

use of com.sun.tools.xjc.model.CTypeRef in project jaxb-ri by eclipse-ee4j.

the class PackageOutlineImpl method calcDefaultValues.

/**
 * Compute the most common namespace URI in this package
 * (to put into {@link XmlSchema#namespace()} and what value
 * we should put into {@link XmlSchema#elementFormDefault()}.
 *
 * This method is called after {@link #classes} field is filled up.
 */
public void calcDefaultValues() {
    // package-info.java
    if (!_model.isPackageLevelAnnotations()) {
        mostUsedNamespaceURI = "";
        elementFormDefault = XmlNsForm.UNQUALIFIED;
        return;
    }
    // used to visit properties
    CPropertyVisitor<Void> propVisitor = new CPropertyVisitor<>() {

        @Override
        public Void onElement(CElementPropertyInfo p) {
            for (CTypeRef tr : p.getTypes()) {
                countURI(propUriCountMap, tr.getTagName());
            }
            return null;
        }

        @Override
        public Void onReference(CReferencePropertyInfo p) {
            for (CElement e : p.getElements()) {
                countURI(propUriCountMap, e.getElementName());
            }
            return null;
        }

        @Override
        public Void onAttribute(CAttributePropertyInfo p) {
            return null;
        }

        @Override
        public Void onValue(CValuePropertyInfo p) {
            return null;
        }
    };
    for (ClassOutlineImpl co : classes) {
        CClassInfo ci = co.target;
        countURI(uriCountMap, ci.getTypeName());
        countURI(uriCountMap, ci.getElementName());
        for (CPropertyInfo p : ci.getProperties()) p.accept(propVisitor);
    }
    mostUsedNamespaceURI = getMostUsedURI(uriCountMap);
    elementFormDefault = getFormDefault();
    attributeFormDefault = XmlNsForm.UNQUALIFIED;
    try {
        XmlNsForm modelValue = _model.getAttributeFormDefault(mostUsedNamespaceURI);
        attributeFormDefault = modelValue;
    } catch (Exception e) {
    // ignore and accept default
    }
    // we won't get this far if the user specified -npa
    if (!mostUsedNamespaceURI.equals("") || elementFormDefault == XmlNsForm.QUALIFIED || (attributeFormDefault == XmlNsForm.QUALIFIED)) {
        XmlSchemaWriter w = _model.strategy.getPackage(_package, Aspect.IMPLEMENTATION).annotate2(XmlSchemaWriter.class);
        if (!mostUsedNamespaceURI.equals(""))
            w.namespace(mostUsedNamespaceURI);
        if (elementFormDefault == XmlNsForm.QUALIFIED)
            w.elementFormDefault(elementFormDefault);
        if (attributeFormDefault == XmlNsForm.QUALIFIED)
            w.attributeFormDefault(attributeFormDefault);
    }
}
Also used : XmlSchemaWriter(com.sun.tools.xjc.generator.annotation.spec.XmlSchemaWriter) CPropertyVisitor(com.sun.tools.xjc.model.CPropertyVisitor) CAttributePropertyInfo(com.sun.tools.xjc.model.CAttributePropertyInfo) CPropertyInfo(com.sun.tools.xjc.model.CPropertyInfo) CElementPropertyInfo(com.sun.tools.xjc.model.CElementPropertyInfo) CClassInfo(com.sun.tools.xjc.model.CClassInfo) CElement(com.sun.tools.xjc.model.CElement) CValuePropertyInfo(com.sun.tools.xjc.model.CValuePropertyInfo) XmlNsForm(jakarta.xml.bind.annotation.XmlNsForm) CTypeRef(com.sun.tools.xjc.model.CTypeRef) CReferencePropertyInfo(com.sun.tools.xjc.model.CReferencePropertyInfo)

Example 2 with CTypeRef

use of com.sun.tools.xjc.model.CTypeRef in project jaxb-ri by eclipse-ee4j.

the class AbstractField method annotateElement.

/**
 * Annotate the element property 'field'
 */
private void annotateElement(JAnnotatable field) {
    CElementPropertyInfo ep = (CElementPropertyInfo) prop;
    List<CTypeRef> types = ep.getTypes();
    if (ep.isValueList()) {
        field.annotate(XmlList.class);
    }
    assert ep.getXmlName() == null;
    if (types.size() == 1) {
        CTypeRef t = types.get(0);
        writeXmlElementAnnotation(field, t, resolve(t, IMPLEMENTATION), false);
    } else {
        for (CTypeRef t : types) {
            // generate @XmlElements
            writeXmlElementAnnotation(field, t, resolve(t, IMPLEMENTATION), true);
        }
        xesw = null;
    }
}
Also used : CElementPropertyInfo(com.sun.tools.xjc.model.CElementPropertyInfo) CTypeRef(com.sun.tools.xjc.model.CTypeRef)

Example 3 with CTypeRef

use of com.sun.tools.xjc.model.CTypeRef in project jaxb-ri by eclipse-ee4j.

the class Element method bind.

void bind() {
    CClassInfo ci = getClassInfo();
    assert ci != null || attributes.isEmpty();
    for (CPropertyInfo p : attributes) ci.addProperty(p);
    switch(contentModelType) {
        case DTDEventListener.CONTENT_MODEL_ANY:
            CReferencePropertyInfo rp = new CReferencePropertyInfo("Content", true, false, true, null, null, /*TODO*/
            locator, false, false, false);
            rp.setWildcard(WildcardMode.SKIP);
            ci.addProperty(rp);
            return;
        case DTDEventListener.CONTENT_MODEL_CHILDREN:
            // handling follows
            break;
        case DTDEventListener.CONTENT_MODEL_MIXED:
            if (contentModel != Term.EMPTY)
                throw new UnsupportedOperationException("mixed content model unsupported yet");
            if (ci != null) {
                // if this element is mapped to a class, just put one property
                CValuePropertyInfo p = new CValuePropertyInfo("value", null, null, /*TODO*/
                locator, getConversion(), null);
                ci.addProperty(p);
            }
            return;
        case DTDEventListener.CONTENT_MODEL_EMPTY:
            // no content model
            assert ci != null;
            return;
    }
    // normalize
    List<Block> n = new ArrayList<>();
    contentModel.normalize(n, false);
    {
        // check collision among Blocks
        Set<String> names = new HashSet<>();
        boolean collision = false;
        OUTER: for (Block b : n) for (Element e : b.elements) if (!names.add(e.name)) {
            collision = true;
            break OUTER;
        }
        if (collision) {
            // collapse all blocks into one
            Block all = new Block(true, true);
            for (Block b : n) all.elements.addAll(b.elements);
            n.clear();
            n.add(all);
        }
    }
    for (Block b : n) {
        CElementPropertyInfo p;
        if (b.isRepeated || b.elements.size() > 1) {
            // collection
            StringBuilder name = new StringBuilder();
            for (Element e : b.elements) {
                if (name.length() > 0)
                    name.append("Or");
                name.append(owner.model.getNameConverter().toPropertyName(e.name));
            }
            p = new CElementPropertyInfo(name.toString(), REPEATED_ELEMENT, ID.NONE, null, null, null, /*TODO*/
            locator, !b.isOptional);
            for (Element e : b.elements) {
                CClassInfo child = owner.getOrCreateElement(e.name).getClassInfo();
                // we are requiring them to be classes.
                assert child != null;
                p.getTypes().add(new CTypeRef(child, new QName("", e.name), null, false, null));
            }
        } else {
            // single property
            String name = b.elements.iterator().next().name;
            String propName = owner.model.getNameConverter().toPropertyName(name);
            TypeUse refType;
            Element ref = owner.getOrCreateElement(name);
            if (ref.getClassInfo() != null)
                refType = ref.getClassInfo();
            else {
                refType = ref.getConversion().getInfo();
            }
            p = new CElementPropertyInfo(propName, refType.isCollection() ? REPEATED_VALUE : NOT_REPEATED, ID.NONE, null, null, null, /*TODO*/
            locator, !b.isOptional);
            p.getTypes().add(new CTypeRef(refType.getInfo(), new QName("", name), null, false, null));
        }
        ci.addProperty(p);
    }
}
Also used : Set(java.util.Set) HashSet(java.util.HashSet) QName(javax.xml.namespace.QName) BIElement(com.sun.tools.xjc.reader.dtd.bindinfo.BIElement) ArrayList(java.util.ArrayList) CPropertyInfo(com.sun.tools.xjc.model.CPropertyInfo) CClassInfo(com.sun.tools.xjc.model.CClassInfo) CElementPropertyInfo(com.sun.tools.xjc.model.CElementPropertyInfo) TypeUse(com.sun.tools.xjc.model.TypeUse) CValuePropertyInfo(com.sun.tools.xjc.model.CValuePropertyInfo) CTypeRef(com.sun.tools.xjc.model.CTypeRef) CReferencePropertyInfo(com.sun.tools.xjc.model.CReferencePropertyInfo)

Aggregations

CElementPropertyInfo (com.sun.tools.xjc.model.CElementPropertyInfo)3 CTypeRef (com.sun.tools.xjc.model.CTypeRef)3 CClassInfo (com.sun.tools.xjc.model.CClassInfo)2 CPropertyInfo (com.sun.tools.xjc.model.CPropertyInfo)2 CReferencePropertyInfo (com.sun.tools.xjc.model.CReferencePropertyInfo)2 CValuePropertyInfo (com.sun.tools.xjc.model.CValuePropertyInfo)2 XmlSchemaWriter (com.sun.tools.xjc.generator.annotation.spec.XmlSchemaWriter)1 CAttributePropertyInfo (com.sun.tools.xjc.model.CAttributePropertyInfo)1 CElement (com.sun.tools.xjc.model.CElement)1 CPropertyVisitor (com.sun.tools.xjc.model.CPropertyVisitor)1 TypeUse (com.sun.tools.xjc.model.TypeUse)1 BIElement (com.sun.tools.xjc.reader.dtd.bindinfo.BIElement)1 XmlNsForm (jakarta.xml.bind.annotation.XmlNsForm)1 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 Set (java.util.Set)1 QName (javax.xml.namespace.QName)1