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);
}
}
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;
}
}
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);
}
}
Aggregations