public class CodeGen
extends java.lang.Object
public
access,
they are intended for use only by the JiBX developers and may change from one release to the next. To make use of
this class from your own code, call the main(String[])
method with an appropriate argument list.Modifier and Type | Class and Description |
---|---|
private static class |
CodeGen.SchemaNameVisitor
Visitor for checking element namespace usage in schema definitions.
|
private static class |
CodeGen.ValueCountVisitor
Visitor to count the number of values in a definition.
|
Modifier and Type | Field and Description |
---|---|
private static long |
BLOCK_NAME_INHERIT_MASK
Mask for schema elements which block name inheritance downward.
|
private static QName[] |
DEFAULT_REPLACEMENTS
Default type replacements applied.
|
private BindingOrganizer |
m_bindingDirectory
Directory for constructed bindings.
|
private SchemasetCustom |
m_global
Code generation customizations.
|
private PackageOrganizer |
m_packageDirectory
Package directory for generated classes.
|
private BindingHolder |
m_rootHolder
Root binding definition holder (set by
writeBindings(String, String, List, ProblemHandler) ). |
private java.io.File |
m_targetDir
Target directory for code generation.
|
private ValidationContext |
m_validationContext
Context for loading and processing schemas.
|
private static org.apache.log4j.Logger |
s_logger
Logger for class.
|
private static long |
TYPE_DEFINE_MASK
Mask for schema elements which define a type.
|
private static long |
TYPE_DERIVE_MASK
Mask for schema elements which derive from a type.
|
Constructor and Description |
---|
CodeGen(SchemasetCustom global,
java.net.URL root,
java.io.File target)
Constructor.
|
CodeGen(SchemasetCustom custom,
ValidationContext vctx)
Constructor used by tests.
|
Modifier and Type | Method and Description |
---|---|
private static void |
accumulateBindingDefinitions(BindingElement binding,
java.util.Map elemmap,
java.util.Map typemap)
Accumulate all format and mapping definitions, including those found in included bindings.
|
private static void |
addDefaultSubstitutions(SchemasetCustom custom)
Add default type substitutions to set currently defined.
|
void |
applyAndNormalize()
Apply extensions and normalize all schemas.
|
private java.lang.String |
assembleName(java.lang.String prefix,
java.lang.String base)
Assemble a name from a base name and an optional prefix.
|
private void |
assignNames(java.lang.String prefix,
GroupItem group,
boolean force)
Set the basic names to be used for a structure of items.
|
private static TypeData |
buildClassData(java.lang.String cname,
boolean simple)
Build class data for pregenerated class.
|
private void |
buildClassesAndBindings(java.util.ArrayList defs,
java.util.Map typeinst)
Build classes and bindings for all definitions, except those for singleton element definitions using a type.
|
java.lang.String |
buildDataModel(boolean verbose,
boolean usenns,
java.util.Map elemmap,
java.util.Map typemap)
Generate the data model.
|
private java.util.ArrayList |
buildItemStructures()
Build the structure of items to be used in code generation for each global definition.
|
private java.lang.String |
checkDirectName(Item item)
Check if an item has an associated name.
|
private void |
checkInline(DefinitionItem def,
int depth,
java.util.List defs)
Check if a global definition structure is to be inlined.
|
static boolean |
checkNoNamespace(BindingElement binding)
Check if a binding definition uses the no-namespace namespace.
|
private boolean |
checkNoNamespacedUsed()
Check if no-namespace namespace is used in any of the schemas.
|
private void |
compactGroups(GroupItem group)
Compact group structures.
|
private int |
computeComplexity(GroupItem group,
int depth,
java.util.List defs)
Compute the complexity of a structure.
|
private void |
convertToDefinitions(GroupItem group,
java.util.List defs)
Convert nested groups which are not inlined to freestanding definitions.
|
private java.util.Map |
convertTypeIsomorphicElements(java.util.ArrayList items)
Convert the item model used for global elements, if they're the only reference to a global type.
|
boolean |
customizeSchemas(java.lang.String pack,
ProblemHandler handler)
Validate and apply customizations to loaded schemas.
|
private java.lang.String |
deriveName(Item item,
boolean force)
Derive the base name for an item.
|
static java.util.List |
findPathSteps(java.io.File file)
Find the steps in the canonical path to a file.
|
SchemasetCustom |
findSchemaset(SchemaElement schema,
SchemasetCustom custom)
Find the most specific schemaset owning a schema.
|
boolean |
generate(boolean verbose,
java.lang.String usens,
java.lang.String dfltpkg,
java.lang.String bindname,
java.util.List fileset,
java.util.List inclpaths,
java.io.File model,
ProblemHandler handler)
Generate code from a list of schemas.
|
BindingOrganizer |
getBindingDirectory()
Get the binding directory.
|
PackageOrganizer |
getPackageDirectory()
Get the package directory used for code generation.
|
BindingElement |
getRootBinding()
Get the root binding definition.
|
ValidationContext |
getSchemaValidationContext()
Get the validation context used for processing schemas.
|
private void |
initializeBindings()
Initialize the bindings to be generated.
|
private java.util.ArrayList |
inlineReferences(java.util.ArrayList items)
Build list of definitions to be generated.
|
private boolean |
isSimple(GroupItem group)
Check if a group consists only of a single non-repeating item, which is not an enumeration.
|
private static void |
listGeneratedPackages(java.util.List packages,
ProblemHandler handler)
List the number of classes in each package, and the totals.
|
private static void |
listSchemas(SchemaElement[] schemas,
ValidationContext vctx,
ProblemHandler handler)
List the schemas in use.
|
static void |
main(java.lang.String[] args)
Run the binding generation using command line parameters.
|
private boolean |
processExtensions()
Process substitutions and deletions defined by extensions.
|
static BindingElement |
processPregeneratedBinding(java.net.URL url,
java.util.Map elemmap,
java.util.Map typemap,
ProblemHandler handler)
Load and validate binding and process all format and mapping definitions, including those in included bindings.
|
void |
pruneDefinitions()
Processes the schemas to remove unused global definitions.
|
static java.lang.String |
relativeFilePath(java.io.File dir,
java.io.File file)
Construct a relative file path.
|
private static void |
reportBindingProblems(ValidationContext vctx,
ProblemHandler handler)
Report problems found in binding.
|
void |
setDefaultPrefixes(java.util.Iterator iter)
Scan schemas to find the default prefixes used for namespaces.
|
private void |
setName(QName qname,
MappingElementBase mapping,
BindingHolder holder)
Set the name and namespace URI for a concrete <mapping> binding component.
|
void |
writeBindings(java.lang.String name,
java.lang.String pack,
java.util.List pregens,
ProblemHandler handler)
Write the binding definitions file(s).
|
private static final org.apache.log4j.Logger s_logger
private static final QName[] DEFAULT_REPLACEMENTS
private static final long TYPE_DERIVE_MASK
private static final long TYPE_DEFINE_MASK
private static final long BLOCK_NAME_INHERIT_MASK
private final SchemasetCustom m_global
private final java.io.File m_targetDir
private final ValidationContext m_validationContext
private PackageOrganizer m_packageDirectory
private BindingOrganizer m_bindingDirectory
private BindingHolder m_rootHolder
writeBindings(String, String, List, ProblemHandler)
).public CodeGen(SchemasetCustom global, java.net.URL root, java.io.File target)
global
- schema customization root elementroot
- URL for base of schema pathstarget
- destination directory for code generationpublic CodeGen(SchemasetCustom custom, ValidationContext vctx)
custom
- vctx
- public ValidationContext getSchemaValidationContext()
private static void addDefaultSubstitutions(SchemasetCustom custom)
custom
- public SchemasetCustom findSchemaset(SchemaElement schema, SchemasetCustom custom)
schema
- custom
- schema set customizationnull
if nonepublic void setDefaultPrefixes(java.util.Iterator iter)
iter
- schema iteratorpublic boolean customizeSchemas(java.lang.String pack, ProblemHandler handler)
pack
- package to be used by default for no-namespaced schemas (non-null
)handler
- validation problem handlertrue
if successful, false
if errorprivate boolean processExtensions()
true
if any changes to the schemas, false
if notpublic void applyAndNormalize()
public void pruneDefinitions()
private java.lang.String checkDirectName(Item item)
item
- null
if noneprivate java.lang.String deriveName(Item item, boolean force)
item
- force
- name forced flagnull
if to use inherited name when force == false
)private void compactGroups(GroupItem group)
group
- private java.lang.String assembleName(java.lang.String prefix, java.lang.String base)
prefix
- base
- private void assignNames(java.lang.String prefix, GroupItem group, boolean force)
deriveName(Item,boolean)
. This method calls itself recursively to handle nested groups.prefix
- text to be prefixed to names within inlined group (null
if none)group
- item group to be assignedforce
- force name derivation flagprivate int computeComplexity(GroupItem group, int depth, java.util.List defs)
checkInline(DefinitionItem, int, List)
.group
- depth
- nesting depthdefs
- list of generated definitionsprivate boolean isSimple(GroupItem group)
group
- true
if simple group, false
if repeated, multiple, or enumerationprivate void convertToDefinitions(GroupItem group, java.util.List defs)
group
- defs
- list of generated definitionsprivate void checkInline(DefinitionItem def, int depth, java.util.List defs)
computeComplexity(GroupItem, int, List)
. The two methods together determine the inlining status of all items.def
- depth
- nesting depthdefs
- list of generated definitionsprivate void setName(QName qname, MappingElementBase mapping, BindingHolder holder)
StructureClassHolder
equivalent.qname
- qualified name to be set (null
if none)mapping
- concrete mapping definitionholder
- binding containing the mappingprivate java.util.ArrayList buildItemStructures()
private java.util.Map convertTypeIsomorphicElements(java.util.ArrayList items)
items
- global definition itemsprivate java.util.ArrayList inlineReferences(java.util.ArrayList items)
items
- private boolean checkNoNamespacedUsed()
true
if no-namespace used, false
if notprivate void buildClassesAndBindings(java.util.ArrayList defs, java.util.Map typeinst)
defs
- definitions to be generatedtypeinst
- map from base type definition to singleton element definition using that typeprivate void initializeBindings()
public java.lang.String buildDataModel(boolean verbose, boolean usenns, java.util.Map elemmap, java.util.Map typemap)
verbose
- verbose output flagusenns
- no-namespace namespace used flagtypemap
- map from qualified name of type (or attributeGroup, or group) to pregenerated mapping definitionelemmap
- map from qualified name of element to pregenerated mapping definitionpublic BindingOrganizer getBindingDirectory()
public void writeBindings(java.lang.String name, java.lang.String pack, java.util.List pregens, ProblemHandler handler) throws JiBXException, java.io.IOException
buildDataModel(boolean, boolean, Map, Map)
is called.name
- root binding definition file name (use customization, or default, if null
)pack
- target package for binding (null
if unspecified)pregens
- pregenerated bindings to be included in root bindinghandler
- validation error and code generation problem handlerJiBXException
java.io.IOException
public BindingElement getRootBinding()
writeBindings(String, String, List, ProblemHandler)
.public PackageOrganizer getPackageDirectory()
public boolean generate(boolean verbose, java.lang.String usens, java.lang.String dfltpkg, java.lang.String bindname, java.util.List fileset, java.util.List inclpaths, java.io.File model, ProblemHandler handler) throws JiBXException, java.io.IOException
verbose
- verbose output flagusens
- namespace to be used when no schemas with namespaces are being generated (null
if not
specified)dfltpkg
- default package for no-namespace schemas (null
if not specified)bindname
- name for root binding (null
if not specified)fileset
- list of resolvers for schemas to be generatedinclpaths
- list of paths for bindings to be used for matching schema definitions (empty if none)model
- file to be used for dumping generated data model (null
if none)handler
- validation error and code generation problem handlertrue
if successful, false
if failureJiBXException
java.io.IOException
private static void listSchemas(SchemaElement[] schemas, ValidationContext vctx, ProblemHandler handler)
schemas
- vctx
- handler
- private static void listGeneratedPackages(java.util.List packages, ProblemHandler handler)
packages
- handler
- private static TypeData buildClassData(java.lang.String cname, boolean simple)
cname
- class namesimple
- simple value flagprivate static void accumulateBindingDefinitions(BindingElement binding, java.util.Map elemmap, java.util.Map typemap)
binding
- binding definition rootelemmap
- map from element qualified name to class datatypemap
- map from type qualified name to class datapublic static BindingElement processPregeneratedBinding(java.net.URL url, java.util.Map elemmap, java.util.Map typemap, ProblemHandler handler) throws JiBXException, java.io.IOException
url
- binding definition pathelemmap
- map from element qualified name to class datatypemap
- map from type qualified name to class datahandler
- validation error and problem handlerJiBXException
java.io.IOException
private static void reportBindingProblems(ValidationContext vctx, ProblemHandler handler)
vctx
- handler
- public static java.util.List findPathSteps(java.io.File file) throws java.io.IOException
file
- java.io.IOException
public static java.lang.String relativeFilePath(java.io.File dir, java.io.File file) throws java.io.IOException
dir
- start directory for pathfile
- supplied file pathjava.io.IOException
public static boolean checkNoNamespace(BindingElement binding)
binding
- true
if no-namespace namespace used, false
if notpublic static void main(java.lang.String[] args) throws java.lang.Exception
args
- java.lang.Exception