public class BindingOrganizer
extends java.lang.Object
Modifier and Type | Field and Description |
---|---|
private static java.lang.String |
BASE_PREFIX
Base prefix used when no prefix set for namespace.
|
private boolean |
m_addConstructors |
private boolean |
m_finished
Bindings finalized flag.
|
private boolean |
m_forceClasses |
private java.util.List |
m_formats
List of format definitions in bindings.
|
private boolean |
m_inBinding |
private java.util.List |
m_keyObjects
List of unique key objects for bindings.
|
private boolean |
m_nonamespaceUsed
Flag for no-namespace namespace used from namespaced binding.
|
private java.util.Set |
m_nsRootUris
Set of namespace URIs needing to be defined in root binding.
|
private java.util.Map |
m_objectBindings
Map from object to binding holder for that namespace.
|
private boolean |
m_outBinding |
private java.util.Map |
m_referenceUriBinding
Map from namespace URIs referenced in bindings not using that namespace to first referencing binding.
|
private boolean |
m_trackSource |
private boolean |
m_trimWhitespace |
private java.util.Map |
m_uriPrefixDefaults
Map from namespace URI to default prefix for that namespace.
|
private java.util.Map |
m_uriPrefixFixed
Map from namespace URI to prefix, for bindings with prefix specified.
|
private static org.apache.log4j.Logger |
s_logger
Logger for class.
|
Constructor and Description |
---|
BindingOrganizer(boolean force,
boolean track,
boolean addcon,
boolean in,
boolean out,
boolean trim)
Constructor taking flags used with constructed bindings.
|
Modifier and Type | Method and Description |
---|---|
BindingHolder |
addBinding(java.lang.Object obj,
java.lang.String uri,
java.lang.String prefix,
boolean dflt)
Add a binding to the set in use.
|
void |
addBindingObject(java.lang.Object obj,
BindingHolder holder)
Associate a control object with an existing binding.
|
void |
addDefaultPrefix(java.lang.String uri,
java.lang.String pref)
Set the default prefix for a namespace, if none already set.
|
void |
addFormat(FormatElement format)
Add a format definition to the binding.
|
(package private) void |
addNamespaceUsage(BindingHolder hold,
java.lang.String uri)
Add usage of namespace for an element or attribute name in binding, assuring that the namespace definition will
be in-scope for that binding.
|
void |
addRootUris(java.util.Collection uris)
Adds a collection of namespace URIs to be referenced at root binding level.
|
void |
addTypeNameReference(BindingHolder hold,
java.lang.String uri,
java.lang.Object obj)
Add reference from binding to a type name defined in the same or another binding.
|
private java.util.Map |
buildDefaultPrefixes(UniqueNameSet prefset,
java.util.Map nsdfltpref)
Set the default prefixes to be used for namespaces.
|
private void |
checkModifiable()
Internal check method to verify that the collection of bindings is still modifiable.
|
BindingHolder |
configureFiles(java.lang.String rootname,
java.lang.String trgtpack,
java.util.List pregens)
Configure the names to be used for writing bindings to files.
|
void |
forceBindingPrefix(java.lang.String prefix,
BindingHolder holder)
Force specified prefix to be used for binding.
|
private void |
generatePrefix(java.lang.String uri,
UniqueNameSet prefset,
java.util.Map uridfltprefs)
Generate prefix if not already set for namespace.
|
BindingHolder |
getBinding(java.lang.Object obj)
Get the binding associated with a particular control object and namespace, if defined.
|
java.util.List |
getKeys()
Get the list of binding key objects.
|
BindingHolder |
getRequiredBinding(java.lang.Object obj)
Get the binding associated with a particular control object.
|
private static boolean |
isAsciiAlpha(char chr)
Check if a character is an ASCII alpha character.
|
private static boolean |
isAsciiAlphaNum(char chr)
Check if a character is an ASCII alpha or numeric character.
|
private static boolean |
isAsciiNum(char chr)
Check if a character is an ASCII numeric character.
|
static boolean |
isEqual(java.lang.Object a,
java.lang.Object b)
General object comparison method.
|
java.util.Iterator |
iterateBindings()
Iterate the collection of bindings.
|
boolean |
validateBindings(BindingHolder root,
java.io.File dir,
ValidationContext vctx)
Validate the constructed bindings.
|
void |
writeBindings(java.io.File dir)
Write the bindings to supplied destination path.
|
private static final org.apache.log4j.Logger s_logger
private static final java.lang.String BASE_PREFIX
private final boolean m_forceClasses
private final boolean m_trackSource
private final boolean m_addConstructors
private final boolean m_inBinding
private final boolean m_outBinding
private final boolean m_trimWhitespace
private final java.util.Map m_uriPrefixFixed
private final java.util.Map m_uriPrefixDefaults
private final java.util.List m_keyObjects
private final java.util.Map m_objectBindings
private final java.util.Map m_referenceUriBinding
private final java.util.Set m_nsRootUris
private final java.util.List m_formats
private boolean m_nonamespaceUsed
private boolean m_finished
public BindingOrganizer(boolean force, boolean track, boolean addcon, boolean in, boolean out, boolean trim)
force
- force classes flagtrack
- track source flagaddcon
- add constructors flagin
- input binding flagout
- output binding flagtrim
- trim whitespace flagpublic BindingHolder addBinding(java.lang.Object obj, java.lang.String uri, java.lang.String prefix, boolean dflt)
obj
- object associated with binding (can be namespace URI, if only one binding per namespace)uri
- namespace URI (null
if no namespace)prefix
- namespace prefix (null
if not specified, empty string if unprefixed default namespace)dflt
- namespace is default for elements in binding flagpublic BindingHolder getBinding(java.lang.Object obj)
obj
- object associated with bindingnull
if not yet definedpublic BindingHolder getRequiredBinding(java.lang.Object obj)
obj
- object associated with binding (can be namespace URI, if only one binding per namespace)public void addBindingObject(java.lang.Object obj, BindingHolder holder)
obj
- object associated with binding (can be namespace URI, if only one binding per namespace)holder
- binding holderpublic void addDefaultPrefix(java.lang.String uri, java.lang.String pref)
uri
- namespace URIpref
- prefix to be used (empty string if to be default namespace)public void forceBindingPrefix(java.lang.String prefix, BindingHolder holder)
prefix
- holder
- public static boolean isEqual(java.lang.Object a, java.lang.Object b)
a
- first object to be comparedb
- second object to be comparedtrue
if both objects are null
, or if a.equals(b)
;
false
otherwiseprivate void checkModifiable()
void addNamespaceUsage(BindingHolder hold, java.lang.String uri)
hold
- binding containing usageuri
- referenced namespace URI (null
if no-namespace)public void addTypeNameReference(BindingHolder hold, java.lang.String uri, java.lang.Object obj)
hold
- binding containing referenceuri
- namespace URI for type nameobj
- object associated with referenced bindingpublic void addFormat(FormatElement format)
format
- public java.util.Iterator iterateBindings()
null
values may be present in the collection, due to bindings
which have been eliminated.public void addRootUris(java.util.Collection uris)
uris
- public java.util.List getKeys()
private static boolean isAsciiAlpha(char chr)
chr
- private static boolean isAsciiNum(char chr)
chr
- private static boolean isAsciiAlphaNum(char chr)
chr
- private void generatePrefix(java.lang.String uri, UniqueNameSet prefset, java.util.Map uridfltprefs)
uri
- prefset
- uridfltprefs
- private java.util.Map buildDefaultPrefixes(UniqueNameSet prefset, java.util.Map nsdfltpref)
Set the default prefixes to be used for namespaces. As part of constructing the map it also checks for conflicts on specified prefixes for namespaces used at the root binding level. This is a complex process, due to the way namespaces work across bindings with abstract mapping references. Since an abstract mapping doesn't define a wrapper element, all namespaces used by the abstract mapping need to be declared on the containing element. In practice, this means that any namespaces in the binding defining the abstract mapping need to be merged into the set of namespaces in the binding making the reference, and these namespaces all must use distinct prefixes. Furthermore, a static analysis of the namespace usage may not be enough to detect conflicts in usage, since even if there are no conflicts in a set of binding definitions conflicts may be created when these bindings are referenced from other bindings (either through direct includes, or as precompiled bindings).
This code checks for any direct conflicts on namespaces with specified prefixes which are being defined in the root binding and throws an exception if such a conflict is found, and creates guaranteed-unique prefixes in cases where no prefixes are provided (either as specified values or as defaults). It does not prevent the user from either specifying prefixes or using default prefixes which may result in conflicts when the bindings are used by other bindings.
prefset
- prefixes in usensdfltpref
- map from namespace URI to default prefix (null
value for namespace used as the
default allowed)null
and non-empty prefix (used for namespace declarations)public BindingHolder configureFiles(java.lang.String rootname, java.lang.String trgtpack, java.util.List pregens)
rootname
- file name for root or singleton binding definitiontrgtpack
- target package for binding (null
if unspecified)pregens
- pregenerated bindings to be included in root bindingpublic boolean validateBindings(BindingHolder root, java.io.File dir, ValidationContext vctx) throws java.io.IOException
configureFiles(String, String, List)
must be called before this
method is called, in order to complete the root binding definition.root
- root binding holder (returned by configureFiles(String, String, List)
)dir
- target directory for writing binding definitionsvctx
- validation context to usetrue
if valid, false
if errorjava.io.IOException
public void writeBindings(java.io.File dir) throws JiBXException, java.io.IOException
configureFiles(String, String, List)
must be called
before this method is called, in order to configure the file names and complete the root binding definition.dir
- target directory for writing binding definitionsJiBXException
java.io.IOException