org.jibx.binding.model
Class DefinitionContext

java.lang.Object
  extended by org.jibx.binding.model.DefinitionContext

public class DefinitionContext
extends java.lang.Object

Definition context information. This is used to track definitions of items that can be referenced by other items. The contexts are nested, so that names not found in a context may be defined by a containing context. The access methods take this into account, automatically delegating to the containing context (if defined) when a lookup fails.

Author:
Dennis M. Sosnoski

Field Summary
private  NamespaceElement m_attributeDefault
          Namespace used by default at this level for attributes.
private  NamespaceElement m_elementDefault
          Namespace used by default at this level for elements.
private  ClassHierarchyContext m_formatContext
          Class hierarchy context for format definitions (lazy create).
private  java.util.HashMap m_mappingMap
          Map from element names to mappings defined at level (lazy create).
private  java.util.HashMap m_namedStructureMap
          Named binding components (lazy create).
private  java.util.ArrayList m_namespaces
          Namespaces defined at level (lazy create).
private  DefinitionContext m_outerContext
          Link to containing definition context.
private  java.util.HashMap m_prefixMap
          Mapping from prefix to namespace definition (lazy create).
private  ClassHierarchyContext m_templateContext
          Class hierarchy context for template definitions (lazy create).
private  java.util.HashMap m_uriMap
          Mapping from URI to namespace definition (lazy create).
 
Constructor Summary
protected DefinitionContext(DefinitionContext outer)
          Constructor.
 
Method Summary
 void addFormat(FormatElement def, ValidationContext vctx)
          Add format to set defined at this level.
 ValidationProblem addImpliedNamespace(NamespaceElement def, ElementBase ref)
          Add namespace declaration to set defined at this level.
 void addMappedName(NameAttributes name, MappingElementBase def, ValidationContext vctx)
          Add mapped name to set defined at this level.
 ValidationProblem addNamedStructure(ContainerElementBase def)
          Add named structure to set defined in this context.
 ValidationProblem addNamespace(NamespaceElement def)
          Add namespace to set defined at this level.
 void addTemplate(MappingElementBase def, ValidationContext vctx)
          Add template or mapping to set defined at this level.
private  NamespaceElement checkDuplicatePrefix(NamespaceElement def)
          Check for namespace using the same prefix.
 NamespaceElement getAttributeNamespace(NameAttributes name)
          Get namespace definition for attribute name.
 FormatElement getBestFormat(IClass clas)
          Get best format definition for class.
 DefinitionContext getContaining()
          Get containing context.
private  ClassHierarchyContext getContainingFormatContext()
          Get containing format context.
private  ClassHierarchyContext getContainingTemplateContext()
          Get containing template context.
 NamespaceElement getElementDefaultNamespace()
          Get the default namespace applied to element definitions.
 NamespaceElement getElementNamespace(NameAttributes name, ValidationContext vctx)
          Get namespace definition for element name.
private  ClassHierarchyContext getFormatContext()
          Get current format context.
(package private)  DefinitionContext getIncludeCopy()
          Copy a context for use by an included binding.
 FormatElement getNamedFormat(java.lang.String name)
          Get named format definition.
 ContainerElementBase getNamedStructure(java.lang.String label)
          Get labeled structure definition within this context.
 TemplateElementBase getNamedTemplate(java.lang.String name)
          Get named template definition.
 NamespaceElement getNamespaceForPrefix(java.lang.String prefix)
          Get namespace for prefix.
 java.util.ArrayList getNamespaces()
          Get the namespaces defined in this context
 FormatElement getSpecificFormat(java.lang.String type)
          Get specific format definition for type.
 TemplateElementBase getSpecificTemplate(java.lang.String type)
          Get specific template definition for type.
private  ClassHierarchyContext getTemplateContext()
          Get current template context.
(package private)  void injectNamespaces(DefinitionContext to)
          Inject namespaces from this context into another context.
private  ValidationProblem internalAddNamespace(NamespaceElement def, boolean report)
          Add namespace to internal tables.
 boolean isCompatibleTemplateType(IClass clas)
          Checks if a class is compatible with one or more templates.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

m_outerContext

private final DefinitionContext m_outerContext
Link to containing definition context.


m_attributeDefault

private NamespaceElement m_attributeDefault
Namespace used by default at this level for attributes.


m_elementDefault

private NamespaceElement m_elementDefault
Namespace used by default at this level for elements.


m_namespaces

private java.util.ArrayList m_namespaces
Namespaces defined at level (lazy create).


m_prefixMap

private java.util.HashMap m_prefixMap
Mapping from prefix to namespace definition (lazy create).


m_uriMap

private java.util.HashMap m_uriMap
Mapping from URI to namespace definition (lazy create).


m_mappingMap

private java.util.HashMap m_mappingMap
Map from element names to mappings defined at level (lazy create).


m_formatContext

private ClassHierarchyContext m_formatContext
Class hierarchy context for format definitions (lazy create).


m_templateContext

private ClassHierarchyContext m_templateContext
Class hierarchy context for template definitions (lazy create).


m_namedStructureMap

private java.util.HashMap m_namedStructureMap
Named binding components (lazy create).

Constructor Detail

DefinitionContext

protected DefinitionContext(DefinitionContext outer)
Constructor.

Parameters:
outer - containing definition context (null if at root of tree)
Method Detail

getIncludeCopy

DefinitionContext getIncludeCopy()
Copy a context for use by an included binding. The duplicated context has the same containing context as the original, and shared reference structures for formats and templates, but only a static copy of the namespace definitions.

Returns:
context copy for included binding

injectNamespaces

void injectNamespaces(DefinitionContext to)
Inject namespaces from this context into another context. This is intended for includes, where the included binding inherits the namespace declarations of the containing binding.

Parameters:
to -

getContaining

public DefinitionContext getContaining()
Get containing context.

Returns:
containing context information (null if at root of tree)

getContainingFormatContext

private ClassHierarchyContext getContainingFormatContext()
Get containing format context.

Returns:
innermost containing context for format definitions (null none defined)

getFormatContext

private ClassHierarchyContext getFormatContext()
Get current format context.

Returns:
innermost context for format definitions (null none defined)

getContainingTemplateContext

private ClassHierarchyContext getContainingTemplateContext()
Get containing template context.

Returns:
innermost containing context for template definitions (null none defined)

getTemplateContext

private ClassHierarchyContext getTemplateContext()
Get current template context.

Returns:
innermost context for template definitions (null none defined)

getElementDefaultNamespace

public NamespaceElement getElementDefaultNamespace()
Get the default namespace applied to element definitions. If there's no default namespace at this level of definitions this moves up the nested definitions contexts until one is found.

Returns:
default namespace (null if none)

getNamespaceForPrefix

public NamespaceElement getNamespaceForPrefix(java.lang.String prefix)
Get namespace for prefix.

Parameters:
prefix -
Returns:
namespace definition in this context, null if none

checkDuplicatePrefix

private NamespaceElement checkDuplicatePrefix(NamespaceElement def)
Check for namespace using the same prefix. This also intializes the namespace structures for this context the first time the method is called.

Parameters:
def -
Returns:
namespace definition using same prefix, null if none

internalAddNamespace

private ValidationProblem internalAddNamespace(NamespaceElement def,
                                               boolean report)
Add namespace to internal tables.

Parameters:
def -
report - report default conflicts as error flag
Returns:
problem information, or null if no problem

addNamespace

public ValidationProblem addNamespace(NamespaceElement def)
Add namespace to set defined at this level.

Parameters:
def - namespace definition element to be added (duplicates ignored)
Returns:
problem information, or null if no problem

addImpliedNamespace

public ValidationProblem addImpliedNamespace(NamespaceElement def,
                                             ElementBase ref)
Add namespace declaration to set defined at this level.

Parameters:
def - namespace definition to be added (duplicates ignored)
ref - binding element referencing the namespace
Returns:
problem information, or null if no problem

getElementNamespace

public NamespaceElement getElementNamespace(NameAttributes name,
                                            ValidationContext vctx)
Get namespace definition for element name. TODO: handle multiple prefixes for namespace, proper screening

Parameters:
name - attribute group defining name
vctx - validation context in use
Returns:
namespace definition, or null if none that matches

getAttributeNamespace

public NamespaceElement getAttributeNamespace(NameAttributes name)
Get namespace definition for attribute name. TODO: handle multiple prefixes for namespace, proper screening

Parameters:
name - attribute group defining name
Returns:
namespace definition, or null if none that matches

addFormat

public void addFormat(FormatElement def,
                      ValidationContext vctx)
Add format to set defined at this level.

Parameters:
def - format definition element to be added
vctx - validation context in use

getSpecificFormat

public FormatElement getSpecificFormat(java.lang.String type)
Get specific format definition for type. Finds with an exact match on the class name, checking the containing definitions if a format is not found at this level.

Parameters:
type - fully qualified class name to be converted
Returns:
conversion definition for class, or null if not found

getNamedFormat

public FormatElement getNamedFormat(java.lang.String name)
Get named format definition. Finds the format with the supplied name, checking the containing definitions if the format is not found at this level.

Parameters:
name - conversion name to be found
Returns:
conversion definition with specified name, or null if no conversion with that name

getBestFormat

public FormatElement getBestFormat(IClass clas)
Get best format definition for class. Finds the format based on the inheritance hierarchy for the supplied class. If a specific format for the actual class is not found (either in this or a containing level) this returns the most specific superclass format.

Parameters:
clas - information for target conversion class
Returns:
conversion definition for class, or null if no compatible conversion defined

addMappedName

public void addMappedName(NameAttributes name,
                          MappingElementBase def,
                          ValidationContext vctx)
Add mapped name to set defined at this level.

Parameters:
name - mapped name
def - mapping definition
vctx - validation context

addTemplate

public void addTemplate(MappingElementBase def,
                        ValidationContext vctx)
Add template or mapping to set defined at this level.

Parameters:
def - template definition element to be added
vctx - validation context in use

getSpecificTemplate

public TemplateElementBase getSpecificTemplate(java.lang.String type)
Get specific template definition for type. Finds with an exact match on the class name, checking the containing definitions if a template is not found at this level.

Parameters:
type - fully qualified class name to be converted
Returns:
template definition for type, or null if not found

getNamedTemplate

public TemplateElementBase getNamedTemplate(java.lang.String name)
Get named template definition. Finds the template with the supplied name, checking the containing definitions if the template is not found at this level. TODO: Make this specific to TemplateElement in 2.0

Parameters:
name - conversion name to be found
Returns:
template definition for class, or null if no template with that name

isCompatibleTemplateType

public boolean isCompatibleTemplateType(IClass clas)
Checks if a class is compatible with one or more templates. This checks based on the inheritance hierarchy for the supplied class, looks for the class or interface itself as well as any subclasses or implementations.

Parameters:
clas - information for target class
Returns:
true if compatible type, false if not

addNamedStructure

public ValidationProblem addNamedStructure(ContainerElementBase def)
Add named structure to set defined in this context. For named structures only the definition context associated with the binding element should be used. This is a kludge, but will go away in 2.0.

Parameters:
def - structure definition
Returns:
problem information, or null if no problem

getNamedStructure

public ContainerElementBase getNamedStructure(java.lang.String label)
Get labeled structure definition within this context. For named structures only the definition context associated with the binding element should be used. This is a kludge, but will go away in 2.0.

Parameters:
label - structure definition label
Returns:
structure definition with specified label, or null if not defined

getNamespaces

public java.util.ArrayList getNamespaces()
Get the namespaces defined in this context

Returns:
namespace definitions (may be null if none)


Project Web Site