Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## com.sun.msv.grammar.xmlschema
Class ComplexTypeExp

    java.lang.Object
      com.sun.msv.grammar.Expression
          com.sun.msv.grammar.ReferenceExp
              com.sun.msv.grammar.xmlschema.RedefinableExp
                  com.sun.msv.grammar.xmlschema.XMLSchemaTypeExp
                      com.sun.msv.grammar.xmlschema.ComplexTypeExp

All Implemented Interfaces:
  java.io.Serializable

public class ComplexTypeExp
extends XMLSchemaTypeExp

ComplexType definition. ComplexTypeExp holds an expression (as a ReferenceExp) that matches to this type itself.

the `body` field contains the expression that exactly matches to the declared content model (without any substitutable types).

the `exp` field contains the reference to the body field, if this complex type is not abstract. If abstract, then nullSet is set. You shouldn't directly manipulate the exp field. Instead, you should use the `setAbstract(boolean)` method to do it.

Note: The runtime type substitution (the use of `xsi:type` attribute) is implemented at the VGM layer. Therefore, AGMs of XML Schema does NOT precisely represent what are actually allowed and what are not.

## Complex Type Definition Schema Component Properties

This table shows the mapping between "complex type definition schema component properties" (which is defined in the spec) and corresponding method/field of this class.

Property of the spec | method/field of this class
name | The `ReferenceExp.name` field.
target namespace | the `getTargetNamespace()` method.
abstract | the `isAbstract()` method.
base type definition | `simpleBaseType` or `complexBaseType` field, depending on whether the base type is a simple type or a complex type.
derivation method | the `derivationMethod` field.
final | the `finalValue` field.
prohibited substitutions | the `block` field.
attribtue uses attribute wildcard content type | Not directly accessible. Can be found by walking the children of the `body` field.
annotation | Unaccessible. This information is removed during the parsing phase.

### Abstractness

The `exp` field and the `self` field are very similar. In fact, the only difference is that the former is affected by the abstract property, while the latter isn't.

So if it has to be affected by the abstract property (like referencing a complex type as the element body), you should use the `exp` field. If you don't want to be affected by the abstract property (like referencing a complex type as the base type of another complex type), then you should refer to the `body` field.

Author:
  Kohsuke KAWAGUCHI
See Also:
  `ElementDeclExp`, Serialized Form

Field Summary
`ReferenceExp` | `attWildcard` attribute wildcard as an expression.
`int` | `block` The block property of this schema component, implemented as a bit field.
`ReferenceExp` | `body` actual content model definition + attribute uses.
`ComplexTypeExp` | `complexBaseType` base type of this complex type.
`int` | `derivationMethod` the derivation method used to derive this complex type from the base type.
`int` | `finalValue` The final property of this schema component, implemented as a bit field.
`XMLSchemaSchema` | `parent` parent XMLSchemaSchema object to which this object belongs.
`XSDatatypeExp` | `simpleBaseType` base type of this complex type.
`AttributeWildcard` | `wildcard` Attribute wild card constraint.

Fields inherited from class com.sun.msv.grammar.xmlschema.XMLSchemaTypeExp
`EXTENSION, RESTRICTION`

Fields inherited from class com.sun.msv.grammar.ReferenceExp
`exp, name`

Fields inherited from class com.sun.msv.grammar.Expression
`anyString, epsilon, nullSet, verifierTag`

Constructor Summary
`ComplexTypeExp(XMLSchemaSchema schema, java.lang.String localName)`

Method Summary
`AttributeWildcard` | `getAttributeWildcard()`
`int` | `getBlock()` Gets the value of the block constraint.
`RedefinableExp` | `getClone()` clone this object.
`java.lang.String` | `getTargetNamespace()` gets the target namespace property of this component as specified in the spec.
`boolean` | `isAbstract()` checks if this complex type is abstract.
`boolean` | `isDefined()` implementation detail.
`boolean` | `isDerivedTypeOf(ComplexTypeExp baseType, int constraint)` Checks if this type is a derived type of the specified type.
`boolean` | `isDerivedTypeOf(XMLSchemaTypeExp exp, int constraint)`
`void` | `redefine(RedefinableExp _rhs)` assigns contents of rhs to this object.
`void` | `setAbstract(boolean isAbstract)`
`void` | `setAttributeWildcard(AttributeWildcard local)`

Methods inherited from class com.sun.msv.grammar.ReferenceExp
`equals, visit, visit, visit, visit`

Methods inherited from class com.sun.msv.grammar.Expression
`getExpandedExp, hashCode, isEpsilonReducible, peelOccurence, visit, visit, visit, visit`

Methods inherited from class java.lang.Object
`getClass, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### body

    public final ReferenceExp body

  actual content model definition + attribute uses.

### attWildcard

    public final ReferenceExp attWildcard

  attribute wildcard as an expression.

### parent

    public final XMLSchemaSchema parent

  parent XMLSchemaSchema object to which this object belongs.

### wildcard

    public AttributeWildcard wildcard

  Attribute wild card constraint.

  Due to the nasty definition of the interaction between attribute wildcards, we cannot add the expression for validating wildcard until the very last moment.

  Until the wrap-up phase of the schema parsing, this field will contain the "local wildcard definition." In the wrap-up phase, this field is replaced by the "complete wildcard definition."

### complexBaseType

    public ComplexTypeExp complexBaseType

  base type of this complex type. Either baseComplexType field or baseSimpleType field is set. If the base type is ur-type, both fields are set to null.

  See Also:
    `simpleBaseType`

### simpleBaseType

    public XSDatatypeExp simpleBaseType

  base type of this complex type.

  See Also:
    `complexBaseType`

### derivationMethod

    public int derivationMethod

  the derivation method used to derive this complex type from the base type. Either RESTRICTION or EXTENSION.

  See Also:
    `#simpleBaseType`

### finalValue

    public int finalValue

  The final property of this schema component, implemented as a bit field.

  0, RESTRICTION, EXTENSION, or (RESTRICTION|EXTENSION).

### block

    public int block

  The block property of this schema component, implemented as a bit field.

  0, RESTRICTION, EXTENSION, or (RESTRICTION|EXTENSION).

Constructor Detail

### ComplexTypeExp

    public ComplexTypeExp(XMLSchemaSchema schema,
                          java.lang.String localName)

Method Detail

### getAttributeWildcard

    public AttributeWildcard getAttributeWildcard()

### setAttributeWildcard

    public void setAttributeWildcard(AttributeWildcard local)

### getTargetNamespace

    public final java.lang.String getTargetNamespace()

  gets the target namespace property of this component as specified in the spec.

  If the property is absent, then this method returns the empty string.

  This method is just a shortcut for `parent.targetNamespace`.

### isAbstract

    public boolean isAbstract()

  checks if this complex type is abstract.

  This method corresponds to the abstract property of the complex type declaration schema component.

  Returns:
    true if this method is abstract. Flase if not.

### setAbstract

    public void setAbstract(boolean isAbstract)

### isDerivedTypeOf

    public boolean isDerivedTypeOf(ComplexTypeExp baseType,
                                   int constraint)

  Checks if this type is a derived type of the specified type.

  This method is an implementation of "Type Derivation OK (Complex)" test of the spec.

  If you are not familiar with the abovementioned part of the spec, don't use this method. This method probably won't give you what you expected.

  Parameters:
    `constraint` - A bit field that represents the restricted derivation. This field must consists of bitwise and of `XMLSchemaTypeExp.EXTENSION` or `XMLSchemaTypeExp.RESTRICTION`.
  Returns:
    true if the specified type is "validly derived" from this type. false if not.

### isDerivedTypeOf

    public boolean isDerivedTypeOf(XMLSchemaTypeExp exp,
                                   int constraint)

### getBlock

    public int getBlock()

  Gets the value of the block constraint. SimpleTypeExp always returns 0 because it doesn't have the block constraint.

  Specified by:
    `getBlock` in class `XMLSchemaTypeExp`

### getClone

    public RedefinableExp getClone()

  clone this object.

  Specified by:
    `getClone` in class `RedefinableExp`

### redefine

    public void redefine(RedefinableExp _rhs)

  Description copied from class: `RedefinableExp`
  assigns contents of rhs to this object. rhs and this object must be the same runtime type, and they must have the same name. this method redefines this object by the given component. derived class should override this method and copy necessary fields, should it necessary.

  Overrides:
    `redefine` in class `RedefinableExp`

### isDefined

    public boolean isDefined()

  implementation detail. A ComplexTypeDecl is properly defined if its self is defined. Note that the default implementation of the isDefined method doesn't work for this class because the exp field is set by the constructor.

  Overrides:
    `isDefined` in class `ReferenceExp`

Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD