Package org.jibx.binding.model
Class DefinitionContext
- java.lang.Object
-
- 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
Fields Modifier and Type Field Description 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
Constructors Modifier Constructor Description protected
DefinitionContext(DefinitionContext outer)
Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description 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 contextFormatElement
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.
-
-
-
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 namevctx
- 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 addedvctx
- 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 namedef
- mapping definitionvctx
- 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 addedvctx
- 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)
-
-