org.exolab.castor.mapping.loader

Class MappingLoader

Implemented Interfaces:
MappingResolver
Known Direct Subclasses:
JDOMappingLoader, MappingTool.InternalLoader, XMLMappingLoader

public abstract class MappingLoader
extends java.lang.Object
implements MappingResolver

Assists in the construction of descriptors. Can be used as a mapping resolver to the engine. Engines will implement their own mapping scheme typically by extending this class.

Version:
$Revision: 1.4 $ $Date: 2003/04/23 08:50:51 $

Authors:
Assaf Arkin
Keith Visco

Nested Class Summary

(package private) class
MappingLoader.TypeInfoReference
A class used to by the createFieldHandler method in order to save the reference of the TypeInfo that was used.

Field Summary

static ClassDescriptor
NoDescriptor

Constructor Summary

MappingLoader(ClassLoader loader, PrintWriter logWriter)
Constructs a new mapping helper.

Method Summary

protected void
addDescriptor(ClassDescriptor clsDesc)
Adds a class descriptor.
protected ClassDescriptor
createDescriptor(ClassMapping clsMap)
Creates a new descriptor.
protected FieldDescriptor
createFieldDesc(Class javaClass, FieldMapping fieldMap)
Creates a single field descriptor.
protected FieldDescriptor[]
createFieldDescs(Class javaClass, FieldMapping fieldMaps)
Create field descriptors.
protected FieldHandler
createFieldHandler(Class javaClass, Class fieldType, FieldMapping fieldMap, MappingLoader.TypeInfoReference typeInfoRef)
Creates the FieldHandler for the given FieldMapping
protected static Method
findAccessor(Class javaClass, String methodName, Class fieldType, boolean getMethod)
Returns the named accessor.
ClassLoader
getClassLoader()
Returns the class loader associated with this mapping resolver if one was specified.
ClassDescriptor
getDescriptor(Class type)
Returns the class descriptor for the specified Java class.
protected PrintWriter
getLogWriter()
Returns the log writer.
protected TypeInfo
getTypeInfo(Class fieldType, CollectionHandler colHandler, FieldMapping fieldMap)
Enumeration
listDescriptors()
Returns an enumeration of all the known descriptors.
Enumeration
listJavaClasses()
Returns an enumeration of all the supported Java classes.
protected ClassDescriptor
loadClassDescriptor(String clsName)
Loads a class descriptor from a compiled class.
void
loadMapping(MappingRoot mapping, Object param)
Loads the mapping from the specified mapping object.
protected void
resolveRelations(ClassDescriptor clsDesc)
protected Class
resolveType(String typeName)
Returns the Java class for the named type.
void
setAllowRedefinitions(boolean allow)
Enables or disables the ability to allow the redefinition of class mappings.

Field Details

NoDescriptor

public static final ClassDescriptor NoDescriptor

Constructor Details

MappingLoader

protected MappingLoader(ClassLoader loader,
                        PrintWriter logWriter)
Constructs a new mapping helper. This constructor is used by a derived class.

Parameters:
loader - The class loader to use, null for the default

Method Details

addDescriptor

protected void addDescriptor(ClassDescriptor clsDesc)
            throws MappingException
Adds a class descriptor. Will throw a mapping exception if a descriptor for this class already exists.

Parameters:
clsDesc - The descriptor to add

Throws:
MappingException - A descriptor for this class already exists


createDescriptor

protected ClassDescriptor createDescriptor(ClassMapping clsMap)
            throws MappingException
Creates a new descriptor. The class mapping information is used to create a new stock ClassDescriptor. Implementations may extend this class to create a more suitable descriptor.

Parameters:
clsMap - The class mapping information

Throws:
MappingException - An exception indicating why mapping for the class cannot be created


createFieldDesc

protected FieldDescriptor createFieldDesc(Class javaClass,
                                          FieldMapping fieldMap)
            throws MappingException
Creates a single field descriptor. The field mapping is used to create a new stock FieldDescriptor. Implementations may extend this class to create a more suitable descriptor.

Parameters:
javaClass - The class to which the field belongs
fieldMap - The field mapping information

Returns:
The field descriptor

Throws:
MappingException - The field or its accessor methods are not found, not accessible, not of the specified type, etc


createFieldDescs

protected FieldDescriptor[] createFieldDescs(Class javaClass,
                                             FieldMapping fieldMaps)
            throws MappingException
Create field descriptors. The class mapping information is used to create descriptors for all the fields in the class, except for container fields. Implementations may extend this method to create more suitable descriptors, or create descriptors only for a subset of the fields.

Parameters:
javaClass - The class to which the fields belong
fieldMaps - The field mappings

Throws:
MappingException - An exception indicating why mapping for the class cannot be created


createFieldHandler

protected FieldHandler createFieldHandler(Class javaClass,
                                          Class fieldType,
                                          FieldMapping fieldMap,
                                          MappingLoader.TypeInfoReference typeInfoRef)
            throws MappingException
Creates the FieldHandler for the given FieldMapping

Parameters:
javaClass - the class type of the parent of the field
fieldType - the Java class type for the field.
fieldMap - the field mapping

Returns:
the newly created FieldHandler


findAccessor

protected static final Method findAccessor(Class javaClass,
                                           String methodName,
                                           Class fieldType,
                                           boolean getMethod)
            throws MappingException
Returns the named accessor. Uses reflection to return the named accessor and check the return value or parameter type, if specified.

Parameters:
javaClass - The class to which the field belongs
methodName - The name of the accessor method
fieldType - The type of the field if known, or null

Returns:
The method, null if not found

Throws:
MappingException - The method is not accessible or is not of the specified type


getClassLoader

public ClassLoader getClassLoader()
Returns the class loader associated with this mapping resolver if one was specified. This is the class loader used to load all the classes mapped by this mapping resolver. May be null if no class loader was specified or in certain JVMs.
Specified by:
getClassLoader in interface MappingResolver


getDescriptor

public ClassDescriptor getDescriptor(Class type)
Returns the class descriptor for the specified Java class. In no such descriptor exists, returns null.
Specified by:
getDescriptor in interface MappingResolver

Parameters:

Returns:
A suitable class descriptor or null


getLogWriter

protected PrintWriter getLogWriter()
Returns the log writer. If not null, errors and other messages should be directed to the log writer.


getTypeInfo

protected TypeInfo getTypeInfo(Class fieldType,
                               CollectionHandler colHandler,
                               FieldMapping fieldMap)
            throws MappingException


listDescriptors

public Enumeration listDescriptors()
Specified by:
listDescriptors in interface MappingResolver


listJavaClasses

public Enumeration listJavaClasses()
Returns an enumeration of all the supported Java classes. Each element is of type java.lang.Class, and for each such class a suitable descriptor exists.
Specified by:
listJavaClasses in interface MappingResolver


loadClassDescriptor

protected ClassDescriptor loadClassDescriptor(String clsName)
Loads a class descriptor from a compiled class.

Parameters:
clsName - The class for which the descriptor is loaded

Returns:
An instance of the class descriptor or null if not found


loadMapping

public void loadMapping(MappingRoot mapping,
                        Object param)
            throws MappingException
Loads the mapping from the specified mapping object. Calls createDescriptor(ClassMapping) to create each descriptor and addDescriptor(ClassDescriptor) to store it. Also loads all the included mapping files.

Parameters:
mapping - The mapping information
param - Arbitrary parameter that can be used by subclasses

Throws:
MappingException - The mapping file is invalid


resolveRelations

protected void resolveRelations(ClassDescriptor clsDesc)
            throws MappingException


resolveType

protected Class resolveType(String typeName)
            throws ClassNotFoundException
Returns the Java class for the named type. The type name can be one of the accepted short names (e.g. integer) or the full Java class name (e.g. java.lang.Integer). If the short name is used, the primitive type might be returned.


setAllowRedefinitions

public void setAllowRedefinitions(boolean allow)
Enables or disables the ability to allow the redefinition of class mappings.

Parameters:
allow - a boolean that when true enables redefinitions.


Intalio Inc. (C) 1999-2003. All rights reserved http://www.intalio.com