Class MappingDefinition

All Implemented Interfaces:
IComponent, ILinkable, IMapping

public class MappingDefinition extends MappingBase
Normal mapping with defined binding. This is used for a mapping definition which includes detailed binding information (rather than marshaller and unmarshaller classes which handle the binding directly).
Author:
Dennis M. Sosnoski
  • Field Details

  • Constructor Details

    • MappingDefinition

      public MappingDefinition(IContainer contain, DefinitionContext defc, String type, NameDefinition name, String tname, boolean abs, String base, ObjectBinding bind, boolean nillable) throws JiBXException
      Constructor.
      Parameters:
      contain - containing binding definition structure
      defc - definition context for this mapping
      type - bound class name
      name - mapped element name information (null if none)
      tname - qualified type name for abstract mapping (null if none)
      abs - abstract mapping flag
      base - abstract mapping extended by this one
      bind - binding definition component (may be null if a concrete mapping)
      nillable - flag for nillable element
      Throws:
      JiBXException - if class definition not found
  • Method Details

    • hasNamespace

      boolean hasNamespace()
      Check if one or more namespaces are defined for element.
      Returns:
      true if namespaces are defined, false if not
    • genLoadNamespaces

      void genLoadNamespaces(MethodBuilder mb)
      Generate code for loading namespace index and URI arrays.
      Parameters:
      mb - method builder for generated code
    • getBoundClass

      public BoundClass getBoundClass()
      Get the mapped class information. This implements the method used by the base class.
      Specified by:
      getBoundClass in class MappingBase
      Returns:
      information for mapped class
    • linkMappings

      public void linkMappings() throws JiBXException
      Links extension mappings to their base mappings. This must be done before the more general linking step in order to determine which abstract mappings are standalone and which are extended by other mappings
      Throws:
      JiBXException - if error in linking
    • getBoundType

      public String getBoundType()
      Description copied from interface: IMapping
      Get class name handled by mapping.
      Returns:
      name of class bound by mapping
    • getReferenceType

      public String getReferenceType()
      Description copied from interface: IMapping
      Get class name of type to be assumed for references to this mapping.
      Returns:
      reference type class name name
    • getImplComponent

      public IComponent getImplComponent()
      Description copied from interface: IMapping
      Get binding component implementing mapping. This call is only valid for mappings with child components, not for mappings defined using marshallers or unmarshallers.
      Returns:
      binding component implementing this mapping
    • getMarshaller

      public ClassFile getMarshaller()
      Description copied from interface: IMapping
      Get marshaller class used for mapping.
      Returns:
      marshaller class information
    • getUnmarshaller

      public ClassFile getUnmarshaller()
      Description copied from interface: IMapping
      Get unmarshaller class used for mapping.
      Returns:
      unmarshaller class information
    • getName

      public NameDefinition getName()
      Description copied from interface: IMapping
      Get mapped element name.
      Returns:
      mapped element name information (may be null if no element name defined for mapping)
    • addNamespace

      public void addNamespace(NamespaceDefinition ns) throws JiBXException
      Description copied from interface: IMapping
      Add namespace. This adds a namespace definition to those active for the mapping.
      Parameters:
      ns - namespace definition to be added
      Throws:
      JiBXException - if error in defining namespace
    • isAbstract

      public boolean isAbstract()
      Description copied from interface: IMapping
      Check if mapping is abstract.
      Returns:
      true if an abstract mapping, false if not
    • isBase

      public boolean isBase()
      Description copied from interface: IMapping
      Check if mapping has extensions.
      Returns:
      true if one or more mappings extend this mapping, false if not
    • addExtension

      public void addExtension(MappingDefinition mdef) throws JiBXException
      Description copied from interface: IMapping
      Add extension to abstract mapping. This call is only valid for abstract mappings.
      Parameters:
      mdef - extension mapping definition
      Throws:
      JiBXException - if configuration error
    • buildRef

      public IComponent buildRef(IContainer parent, IContextObj objc, String type, PropertyDefinition prop) throws JiBXException
      Description copied from interface: IMapping
      Build reference to mapping. Constructs and returns the component for handling the mapping.
      Parameters:
      parent - containing binding definition structure
      objc - current object context
      type - mapped value type
      prop - property definition (may be null)
      Returns:
      constructed mapping reference component
      Throws:
      JiBXException - if configuration error
    • getNamespaces

      public ArrayList getNamespaces()
      Description copied from interface: IMapping
      Get namespaces defined for mapping.
      Returns:
      namespace definitions (may be null if none)
    • generateAbstractMarshaller

      private void generateAbstractMarshaller(ClassFile cf)
      Add abstract marshaller interface to handler class. This adds the interface and generates the IAbstractMarshaller.baseMarshal(Object, org.jibx.runtime.IMarshallingContext) method responsible for passing handling on to the appropriate extension class.
      Parameters:
      cf - handler class
    • generateIfExtendingCheck

      private void generateIfExtendingCheck(ClassFile cf, boolean hasname)
      Generate the IMarshaller.isExtension(String) method to check if this mapping is extending a particular abstract mapping.
      Parameters:
      cf -
      hasname -
    • generateUnmarshalImplementation

      private void generateUnmarshalImplementation(ClassFile cf, boolean hasattr, boolean hascont, boolean hasname) throws JiBXException
      Parameters:
      cf - class to receive method
      hasattr - attribute definition present flag
      hascont - content definition present flag
      hasname - element name defined by this mapping flag
      Throws:
      JiBXException
    • generateIsPresent

      private void generateIsPresent(ClassFile cf, boolean hasname)
      Parameters:
      cf - class to receive method
      hasname - element name defined by this mapping flag
    • generateMarshalImplementation

      private void generateMarshalImplementation(ClassFile cf, boolean hasattr, boolean hascont) throws JiBXException
      Parameters:
      cf - class to receive method
      hasattr - attribute definition present flag
      hascont - content definition present flag
      Throws:
      JiBXException
    • generateCode

      public void generateCode(boolean force) throws JiBXException
      Description copied from interface: IMapping
      Generate required code for mapping.
      Parameters:
      force - add marshaller/unmarshaller classes for abstract non-base mappings flag (not passed on to children)
      Throws:
      JiBXException - if error in transformation
    • getWrapperName

      public NameDefinition getWrapperName()
      Description copied from interface: IComponent
      Get element wrapper name. If the component defines an element as the container for content, this returns the name information for that element.
      Specified by:
      getWrapperName in interface IComponent
      Overrides:
      getWrapperName in class PassThroughComponent
      Returns:
      component element name, null if no wrapper element
    • setLinkages

      public void setLinkages() throws JiBXException
      Description copied from interface: ILinkable
      Establish and validate linkages between binding components. This is called after the basic binding structures have been set up. All linkages between components must be resolved by this method, in order to prevent problems due to the order of definitions between components. This implies that each component must in turn call the same method for each child component. None of the other method calls defined by this interface are valid until after this call.
      Specified by:
      setLinkages in interface ILinkable
      Overrides:
      setLinkages in class LinkableBase
      Throws:
      JiBXException - if error in configuration
    • getBinding

      public ITypeBinding getBinding()
      Description copied from interface: IMapping
      Get the actual binding for a mapping. This is only usable with mappings defined by a binding; if the mapping is instead defined by specifying marshaller and unmarshaller classes this will just return null.
      Returns:
      binding structure, or null if none
    • print

      public void print(int depth)
      Specified by:
      print in interface IComponent
      Overrides:
      print in class LinkableBase