com.sun.tools.xjc.model
Class CElementPropertyInfo

java.lang.Object
  extended by com.sun.tools.xjc.model.CPropertyInfo
      extended by com.sun.tools.xjc.model.CElementPropertyInfo
All Implemented Interfaces:
CCustomizable, AnnotationSource, ElementPropertyInfo<NType,NClass>, PropertyInfo<NType,NClass>

public final class CElementPropertyInfo
extends CPropertyInfo
implements ElementPropertyInfo<NType,NClass>

ElementPropertyInfo for the compiler.


Nested Class Summary
static class CElementPropertyInfo.CollectionMode
           
 
Field Summary
 
Fields inherited from class com.sun.tools.xjc.model.CPropertyInfo
baseType, defaultValue, inlineBinaryData, javadoc, locator, realization
 
Constructor Summary
CElementPropertyInfo(java.lang.String name, CElementPropertyInfo.CollectionMode collection, ID id, javax.activation.MimeType expectedMimeType, com.sun.xml.xsom.XSComponent source, CCustomizations customizations, org.xml.sax.Locator locator, boolean required)
           
 
Method Summary
<V> V
accept(CPropertyVisitor<V> visitor)
           
 javax.xml.namespace.QName collectElementNames(java.util.Map<javax.xml.namespace.QName,CPropertyInfo> table)
          Puts the element names that this property possesses to the map, so that we can find two properties that own the same element name, which is an error.
 CAdapter getAdapter()
           
 javax.activation.MimeType getExpectedMimeType()
          Expected MIME type, if any.
 javax.xml.namespace.QName getSchemaType()
          The effective value of XmlSchemaType annotation, if any.
 java.util.List<CTypeRef> getTypes()
          Returns the information about the types allowed in this property.
 javax.xml.namespace.QName getXmlName()
          Deprecated. 
 ID id()
          Returns the IDness of the value of this element.
 boolean isCollectionNillable()
          Returns true if this property is nillable (meaning the absence of the value is treated as nil='true')
 boolean isCollectionRequired()
          Checks if the wrapper element is required.
 boolean isOptionalPrimitive()
          Returns true if this property needs to represent null just for the purpose of representing an absence of the property.
 boolean isRequired()
          Returns true if this element is mandatory.
 boolean isUnboxable()
          Returns true if this property is "unboxable".
 boolean isValueList()
          Returns true if this property is a collection but its XML representation is a list of values, not repeated elements.
 PropertyKind kind()
          Gets the kind of this proeprty.
 java.util.List<CNonElement> ref()
          List of TypeInfos that this property references.
 void setAdapter(CAdapter a)
           
 
Methods inherited from class com.sun.tools.xjc.model.CPropertyInfo
displayName, getCustomizations, getLocator, getName, getName, getSchemaComponent, hasAnnotation, inlineBinaryData, isCollection, needsExplicitTypeName, parent, readAnnotation, setName
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface com.sun.xml.bind.v2.model.core.PropertyInfo
displayName, getName, inlineBinaryData, isCollection, parent
 
Methods inherited from interface com.sun.xml.bind.v2.model.annotation.AnnotationSource
hasAnnotation, readAnnotation
 

Constructor Detail

CElementPropertyInfo

public CElementPropertyInfo(java.lang.String name,
                            CElementPropertyInfo.CollectionMode collection,
                            ID id,
                            javax.activation.MimeType expectedMimeType,
                            com.sun.xml.xsom.XSComponent source,
                            CCustomizations customizations,
                            org.xml.sax.Locator locator,
                            boolean required)
Method Detail

id

public ID id()
Description copied from interface: PropertyInfo
Returns the IDness of the value of this element.

Specified by:
id in interface PropertyInfo<NType,NClass>
Returns:
always non-null
See Also:
XmlID, XmlIDREF

getTypes

public java.util.List<CTypeRef> getTypes()
Description copied from interface: ElementPropertyInfo
Returns the information about the types allowed in this property.

In a simple case like the following, an element property only has one TypeRef that points to String and tag name "foo".

 @XmlElement
 String abc;
 

However, in a general case an element property can be heterogeneous, meaning you can put different types in it, each with a different tag name (and a few other settings.)

 // list can contain String or Integer.
 @XmlElements({
   @XmlElement(name="a",type=String.class),
   @XmlElement(name="b",type=Integer.class),
 })
 List<Object> abc;
 

In this case this method returns a list of two TypeRefs.

Specified by:
getTypes in interface ElementPropertyInfo<NType,NClass>
Returns:
Always non-null. Contains at least one entry. If ElementPropertyInfo.isValueList()==true, there's always exactly one type.

ref

public java.util.List<CNonElement> ref()
Description copied from interface: PropertyInfo
List of TypeInfos that this property references. This allows the caller to traverse the reference graph without getting into the details of each different property type.

Specified by:
ref in interface PropertyInfo<NType,NClass>
Specified by:
ref in class CPropertyInfo
Returns:
non-null read-only collection.

getSchemaType

public javax.xml.namespace.QName getSchemaType()
Description copied from interface: PropertyInfo
The effective value of XmlSchemaType annotation, if any.

If the property doesn't have XmlSchemaType annotation, this method returns null.

Since a type name is a property of a Java type, not a Java property, A schema type name of a Java type should be primarily obtained by using NonElement.getTypeName(). This method is to correctly implement the ugly semantics of XmlSchemaType (namely when this returns non-null, it overrides the type names of all types that are in this property.)

Specified by:
getSchemaType in interface PropertyInfo<NType,NClass>

getXmlName

@Deprecated
public javax.xml.namespace.QName getXmlName()
Deprecated. 

XJC never uses the wrapper element. Always return null.

Specified by:
getXmlName in interface ElementPropertyInfo<NType,NClass>
Returns:
must be null if PropertyInfo.isCollection()==false or if ElementPropertyInfo.isValueList()==true. Otherwise, this can be null (in which case there'll be no wrapper), or it can be non-null (in which case there'll be a wrapper)

isCollectionRequired

public boolean isCollectionRequired()
Description copied from interface: ElementPropertyInfo
Checks if the wrapper element is required.

Specified by:
isCollectionRequired in interface ElementPropertyInfo<NType,NClass>
Returns:
Always false if ElementPropertyInfo.getXmlName()==null.

isCollectionNillable

public boolean isCollectionNillable()
Description copied from interface: ElementPropertyInfo
Returns true if this property is nillable (meaning the absence of the value is treated as nil='true')

This method is only used when this property is a collection.

Specified by:
isCollectionNillable in interface ElementPropertyInfo<NType,NClass>

isRequired

public boolean isRequired()
Description copied from interface: ElementPropertyInfo
Returns true if this element is mandatory. For collections, this property isn't used. TODO: define the semantics when this is a collection

Specified by:
isRequired in interface ElementPropertyInfo<NType,NClass>

isValueList

public boolean isValueList()
Description copied from interface: ElementPropertyInfo
Returns true if this property is a collection but its XML representation is a list of values, not repeated elements.

If PropertyInfo.isCollection()==false, this property is always false.

When this flag is true, getTypes().size()==1 always holds.

Specified by:
isValueList in interface ElementPropertyInfo<NType,NClass>

isUnboxable

public boolean isUnboxable()
Description copied from class: CPropertyInfo
Returns true if this property is "unboxable".

In general, a property often has to be capable of representing null to indicate the absence of the value. This requires properties to be generated as @XmlElement Float f, not as @XmlElement float f;. But this is slow.

Fortunately, there are cases where we know that the property can never legally be absent. When this condition holds we can generate the optimized "unboxed form".

The exact such conditions depend on the kind of properties, so refer to the implementation code for the details.

This method returns true when the property can be generated as "unboxed form", false otherwise.

When this property is a collection, this method returns true if items in the collection is unboxable. Obviously, the collection itself is always a reference type.

Overrides:
isUnboxable in class CPropertyInfo

isOptionalPrimitive

public boolean isOptionalPrimitive()
Description copied from class: CPropertyInfo
Returns true if this property needs to represent null just for the purpose of representing an absence of the property.

Overrides:
isOptionalPrimitive in class CPropertyInfo

accept

public <V> V accept(CPropertyVisitor<V> visitor)
Specified by:
accept in class CPropertyInfo

getAdapter

public CAdapter getAdapter()
Specified by:
getAdapter in interface ElementPropertyInfo<NType,NClass>
Specified by:
getAdapter in interface PropertyInfo<NType,NClass>
Specified by:
getAdapter in class CPropertyInfo
Returns:
null if the property is not adapted.

setAdapter

public void setAdapter(CAdapter a)

kind

public final PropertyKind kind()
Description copied from interface: PropertyInfo
Gets the kind of this proeprty.

Specified by:
kind in interface PropertyInfo<NType,NClass>
Returns:
always non-null.

getExpectedMimeType

public javax.activation.MimeType getExpectedMimeType()
Description copied from interface: PropertyInfo
Expected MIME type, if any.

Specified by:
getExpectedMimeType in interface PropertyInfo<NType,NClass>

collectElementNames

public javax.xml.namespace.QName collectElementNames(java.util.Map<javax.xml.namespace.QName,CPropertyInfo> table)
Description copied from class: CPropertyInfo
Puts the element names that this property possesses to the map, so that we can find two properties that own the same element name, which is an error.

Overrides:
collectElementNames in class CPropertyInfo
Returns:
null if no conflict was found. Otherwise return the QName that has the collision.