Package org.jibx.custom.classes
Class ClassCustom
- java.lang.Object
-
- org.jibx.custom.classes.CustomBase
-
- org.jibx.custom.classes.SharedNestingBase
-
- org.jibx.custom.classes.NestingBase
-
- org.jibx.custom.classes.ClassCustom
-
- All Implemented Interfaces:
IApply
public class ClassCustom extends NestingBase implements IApply
Class customization information. This supports direct class customizations (such as the corresponding element name, when building a concrete mapping) and also acts as a container for individual fields and/or properties.- Author:
- Dennis M. Sosnoski
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
ELEMENT_NAME
Element name in XML customization file.static int
FORM_ABSTRACT_MAPPING
static int
FORM_CONCRETE_MAPPING
static int
FORM_DEFAULT
static int
FORM_STRING
private java.util.ArrayList
m_children
private IClass
m_classInformation
private java.lang.String
m_createType
private java.lang.String
m_deserializer
private java.lang.String
m_elementName
private QName
m_elementQName
private java.lang.String
m_enumValueMethod
private java.lang.String[]
m_excludes
private java.lang.String
m_factoryMethod
private int
m_form
private java.lang.String[]
m_includes
private boolean
m_isApplied
private InsertionOrderedMap
m_memberMap
private java.lang.String
m_name
private java.lang.String[]
m_optionals
private java.lang.String[]
m_requireds
private java.lang.String
m_serializer
private java.lang.String
m_typeName
private QName
m_typeQName
private boolean
m_useSuper
static StringArray
s_allowedAttributes
Enumeration of allowed attribute namesstatic EnumSet
s_representationEnum
-
Fields inherited from class org.jibx.custom.classes.NestingBase
ATTRIBUTE_STYLE_INTEGER, ATTRIBUTE_VALUE_STYLE, ELEMENT_STYLE_INTEGER, ELEMENT_VALUE_STYLE, s_valueStyleEnum
-
Fields inherited from class org.jibx.custom.classes.CustomBase
CAMEL_CASE_NAMES, DERIVE_BY_PACKAGE, DERIVE_FIXED, DERIVE_NONE, DOTTED_NAMES, HYPHENATED_NAMES, REQUIRE_ALL, REQUIRE_NONE, REQUIRE_OBJECTS, REQUIRE_PRIMITIVES, s_namespaceStyleEnum, s_nameStyleEnum, s_requireEnum, UNDERSCORED_NAMES, UPPER_CAMEL_CASE_NAMES
-
-
Constructor Summary
Constructors Constructor Description ClassCustom(NestingBase parent, java.lang.String name)
Constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
addChild(CustomBase child)
Add child.void
apply(IClassLocator icl)
Apply customizations to class to fill out members.private static void
classifyNames(java.lang.String[] names, java.util.Set elems, java.util.Set attrs)
Classify an array of names as elements or attributes, based on leading flag characters ('@' for an attribute, '<' for an element).private java.lang.String
findPropertyType(IClassItem gmeth, IClassItem smeth, IClassLocator icl)
Find the most specific type for a property based on the access methods.java.util.List
getChildren()
Get list of children.IClass
getClassInformation()
Get actual class information.java.lang.String
getCreateType()
Get the type name to be used when creating an instance of this class.java.lang.String
getDeserializer()
Get deserializer method.java.lang.String
getElementName()
Get the element name to be used for this class in a concrete mapping.QName
getElementQName()
Get the qualified element name to be used for this class in a concrete mapping.java.lang.String
getEnumValueMethod()
Get the method used to retrieve the text value for an enum class.java.lang.String[]
getExcludes()
Get list of names to be excluded from class representation.java.lang.String
getFactoryMethod()
Get the factory method to be used when creating an instance of this class.int
getForm()
Get the representation code.private java.lang.String
getFormText()
Form get text method.java.lang.String[]
getIncludes()
Get list of names to be included in class representation.ValueCustom
getMember(java.lang.String name)
Get customization information for a member by name.java.util.Collection
getMembers()
Get collection of members in class.java.lang.String
getName()
Get fully-qualified class name.java.lang.String
getSerializer()
Get serializer method.java.lang.String
getSimpleName()
Get simple class name.java.lang.String
getTypeName()
Get the type name to be used for this class in an abstract mapping.QName
getTypeQName()
Get the qualified type name to be used for this class in an abstract mapping.boolean
isAbstractMappingForced()
Check if abstract mapping required for class.boolean
isConcreteClass()
Check if this is a directly instantiable class (not an interface, and not abstract)boolean
isConcreteMappingForced()
Check if concrete mapping required for class.boolean
isSimpleValue()
Check if class represents a simple text value.boolean
isUseSuper()
Check for superclass to be included in binding.private java.util.Map
mapFields(IClassItem[] fields, java.lang.String[] prefs, java.lang.String[] suffs, java.util.Set inclset, java.util.Set exclset)
Build map from member names to fields.private java.util.Map
mapPropertyReadMethods(IClassItem[] methods, java.util.Set inclset, java.util.Set exclset)
Build map from member names to read access methods.private java.util.Map
mapPropertyWriteMethods(IClassItem[] methods, java.util.Set inclset, java.util.Set exclset)
Build map from member names to write access methods.private void
preSet(IUnmarshallingContext uctx)
Make sure all attributes are defined.void
setCreateType(java.lang.String type)
Set the type name to be used when creating an instance of this class.private void
setFormText(java.lang.String text, IUnmarshallingContext ictx)
Form set text method.private static java.lang.String[]
stripNames(java.lang.String[] names)
Utility method to strip any leading non-alphanumeric characters from an array of name strings.-
Methods inherited from class org.jibx.custom.classes.NestingBase
getStripPrefixes, getStripSuffixes, getValueStyle, isForceMapping, isForceStructureNames, isMapAbstract, isPropertyAccess, isWrapCollections, setMapAbstract, setValueStyle
-
Methods inherited from class org.jibx.custom.classes.SharedNestingBase
convertName, getFormatterClass, getNamespace, getNamespaceStyle, getNameStyle, getSpecifiedNamespace, isObjectRequired, isPrimitiveRequired, isUseJavaDocs, setNamespace, setNamespaceStyle, setNameStyle
-
Methods inherited from class org.jibx.custom.classes.CustomBase
convertName, deriveItemName, deriveNamespace, getContainingObject, getGlobal, getParent, packageOfType, packageToNamespace, validateAttributes
-
-
-
-
Field Detail
-
s_allowedAttributes
public static final StringArray s_allowedAttributes
Enumeration of allowed attribute names
-
ELEMENT_NAME
public static final java.lang.String ELEMENT_NAME
Element name in XML customization file.- See Also:
- Constant Field Values
-
FORM_DEFAULT
public static final int FORM_DEFAULT
- See Also:
- Constant Field Values
-
FORM_CONCRETE_MAPPING
public static final int FORM_CONCRETE_MAPPING
- See Also:
- Constant Field Values
-
FORM_ABSTRACT_MAPPING
public static final int FORM_ABSTRACT_MAPPING
- See Also:
- Constant Field Values
-
FORM_STRING
public static final int FORM_STRING
- See Also:
- Constant Field Values
-
s_representationEnum
public static final EnumSet s_representationEnum
-
m_name
private java.lang.String m_name
-
m_elementName
private java.lang.String m_elementName
-
m_typeName
private java.lang.String m_typeName
-
m_createType
private java.lang.String m_createType
-
m_factoryMethod
private java.lang.String m_factoryMethod
-
m_enumValueMethod
private java.lang.String m_enumValueMethod
-
m_form
private int m_form
-
m_includes
private java.lang.String[] m_includes
-
m_excludes
private java.lang.String[] m_excludes
-
m_useSuper
private boolean m_useSuper
-
m_requireds
private java.lang.String[] m_requireds
-
m_optionals
private java.lang.String[] m_optionals
-
m_serializer
private java.lang.String m_serializer
-
m_deserializer
private java.lang.String m_deserializer
-
m_children
private final java.util.ArrayList m_children
-
m_isApplied
private boolean m_isApplied
-
m_typeQName
private QName m_typeQName
-
m_elementQName
private QName m_elementQName
-
m_classInformation
private IClass m_classInformation
-
m_memberMap
private InsertionOrderedMap m_memberMap
-
-
Constructor Detail
-
ClassCustom
ClassCustom(NestingBase parent, java.lang.String name)
Constructor.- Parameters:
parent
-name
- class simple name (without package)
-
-
Method Detail
-
preSet
private void preSet(IUnmarshallingContext uctx)
Make sure all attributes are defined.- Parameters:
uctx
- unmarshalling context
-
getName
public java.lang.String getName()
Get fully-qualified class name.- Returns:
- class name
-
getSimpleName
public java.lang.String getSimpleName()
Get simple class name.- Returns:
- class name
-
getElementName
public java.lang.String getElementName()
Get the element name to be used for this class in a concrete mapping.- Returns:
- element name
-
getElementQName
public QName getElementQName()
Get the qualified element name to be used for this class in a concrete mapping.- Returns:
- element name
-
getTypeName
public java.lang.String getTypeName()
Get the type name to be used for this class in an abstract mapping.- Returns:
- type name
-
getCreateType
public java.lang.String getCreateType()
Get the type name to be used when creating an instance of this class.- Returns:
- type name
-
setCreateType
public void setCreateType(java.lang.String type)
Set the type name to be used when creating an instance of this class.- Parameters:
type
-
-
getSerializer
public java.lang.String getSerializer()
Get serializer method.- Returns:
- serializer
-
getDeserializer
public java.lang.String getDeserializer()
Get deserializer method.- Returns:
- deserializer
-
getEnumValueMethod
public java.lang.String getEnumValueMethod()
Get the method used to retrieve the text value for an enum class.- Returns:
- method name
-
getFactoryMethod
public java.lang.String getFactoryMethod()
Get the factory method to be used when creating an instance of this class.- Returns:
- method name
-
getTypeQName
public QName getTypeQName()
Get the qualified type name to be used for this class in an abstract mapping.- Returns:
- type qname
-
getForm
public int getForm()
Get the representation code.- Returns:
- value from
s_representationEnum
enumeration
-
getExcludes
public java.lang.String[] getExcludes()
Get list of names to be excluded from class representation.- Returns:
- excludes (
null
if none)
-
getIncludes
public java.lang.String[] getIncludes()
Get list of names to be included in class representation.- Returns:
- includes (
null
if none)
-
isUseSuper
public boolean isUseSuper()
Check for superclass to be included in binding.- Returns:
true
if superclass included,false
if not
-
isConcreteClass
public boolean isConcreteClass()
Check if this is a directly instantiable class (not an interface, and not abstract)- Returns:
true
if instantiable,false
if not
-
isSimpleValue
public boolean isSimpleValue()
Check if class represents a simple text value.- Returns:
- text value flag
-
isAbstractMappingForced
public boolean isAbstractMappingForced()
Check if abstract mapping required for class.- Returns:
- abstract mapping flag
-
isConcreteMappingForced
public boolean isConcreteMappingForced()
Check if concrete mapping required for class. If a 'form' setting is defined for the class it returns the flag based on that setting, and otherwise returns based on the nesting abstract mapping flag.- Returns:
- abstract mapping flag
-
getChildren
public java.util.List getChildren()
Get list of children.- Returns:
- list
-
addChild
protected void addChild(CustomBase child)
Add child.- Parameters:
child
-
-
setFormText
private void setFormText(java.lang.String text, IUnmarshallingContext ictx)
Form set text method. This is intended for use during unmarshalling. TODO: add validation- Parameters:
text
-ictx
-
-
getFormText
private java.lang.String getFormText()
Form get text method. This is intended for use during marshalling.- Returns:
- text
-
mapPropertyReadMethods
private java.util.Map mapPropertyReadMethods(IClassItem[] methods, java.util.Set inclset, java.util.Set exclset)
Build map from member names to read access methods. This assumes that each public, non-static, no-argument method which returns a value and has a name beginning with "get" or "is" is a property read access method. It maps the corresponding property name to the method, and returns the map.- Parameters:
methods
-inclset
- set of member names to be included (null
if not specified)exclset
- set of member names to be excluded (null
if not specified, ignored if inclset is non-null
)- Returns:
- map
-
mapPropertyWriteMethods
private java.util.Map mapPropertyWriteMethods(IClassItem[] methods, java.util.Set inclset, java.util.Set exclset)
Build map from member names to write access methods. This assumes that each public, non-static, single-argument method which returns void and has a name beginning with "set" is a property write access method. It maps the corresponding property name to the method, and returns the map.- Parameters:
methods
-inclset
- set of member names to be included (null
if not specified)exclset
- set of member names to be excluded (null
if not specified, ignored if inclset is non-null
)- Returns:
- map
-
mapFields
private java.util.Map mapFields(IClassItem[] fields, java.lang.String[] prefs, java.lang.String[] suffs, java.util.Set inclset, java.util.Set exclset)
Build map from member names to fields. This includes all non-static and non-transient fields of the class.- Parameters:
fields
-prefs
- prefixes to be stripped in deriving namessuffs
- suffixes to be stripped in deriving namesinclset
- set of member names to be included (null
if not specified)exclset
- set of member names to be excluded (null
if not specified, ignored if inclset is non-null
)- Returns:
- map
-
findPropertyType
private java.lang.String findPropertyType(IClassItem gmeth, IClassItem smeth, IClassLocator icl)
Find the most specific type for a property based on the access methods.- Parameters:
gmeth
- read access method (null
if not defined)smeth
- write access method (null
if not defined)icl
-- Returns:
- most specific type name
-
stripNames
private static java.lang.String[] stripNames(java.lang.String[] names)
Utility method to strip any leading non-alphanumeric characters from an array of name strings.- Parameters:
names
- (null
if none)- Returns:
- array of stripped names (
null
if none)
-
classifyNames
private static void classifyNames(java.lang.String[] names, java.util.Set elems, java.util.Set attrs)
Classify an array of names as elements or attributes, based on leading flag characters ('@' for an attribute, '<' for an element).- Parameters:
names
- (null
if none)elems
- set of element namesattrs
- set of attribute names
-
apply
public void apply(IClassLocator icl)
Apply customizations to class to fill out members. The name handling gets tricky, because of the variety of options provided. The user can specify value names to be included and/or excluded for the class, and also value names to be treated as optional or required. If an 'includes' list is given, only the values on that list are processed from the class, along with any values with their own child elements. If an 'excludes' list is given, only the names not on that list are processed. If neither an 'includes' nor an 'excludes' list is present, all values defined by the class will be processed. It is an error if the same name occurs on both an 'excludes' list and any other list, or if a name on the 'excludes' list has a child element present. It is also an error if the same name occurs on both the 'optionals' and 'requireds' list. Each list name can also be flagged with a leading indicator character to say whether the value should be represented as an attribute ('@') or element ('<'). The order of child elements is also partially determined by the lists, with the 'includes' list processed first, then the 'requireds' list, then the 'optionals' list, then the child elements, then any values not yet processed.
-
getMember
public ValueCustom getMember(java.lang.String name)
Get customization information for a member by name. This method may only be called afterapply(IClassLocator)
.- Parameters:
name
-- Returns:
- customization, or
null
if none
-
getClassInformation
public IClass getClassInformation()
Get actual class information. This method may only be called afterapply(IClassLocator)
.- Returns:
- class information
-
getMembers
public java.util.Collection getMembers()
Get collection of members in class.- Returns:
- members
-
-