org.jfree.xml.util

Class ObjectFactoryLoader

Implemented Interfaces:
ObjectFactory

public class ObjectFactoryLoader
extends AbstractModelReader
implements ObjectFactory

The object factory loader loads the xml specification for the generic handlers. The specification may be distributed over multiple files.

This class provides the model management for the reader and writer. The instantiation of the handlers is done elsewhere.

Author:
TM

Constructor Summary

ObjectFactoryLoader(URL resourceName)
Creates a new object factory loader for the given base file.

Method Summary

protected void
endMultiplexMapping()
Finializes the multiplexer mapping.
protected void
endObjectDefinition()
Finializes the object definition.
GenericObjectFactory
getFactoryForClass(Class c)
Returns a factory instance for the given class.
ManualMappingDefinition
getManualMappingDefinition(Class c)
Returns the manual mapping definition for the given class, or null, if not manual definition exists.
MultiplexMappingDefinition
getMultiplexDefinition(Class c)
Returns the multiplex definition for the given class, or null, if no such definition exists.
protected void
handleAttributeDefinition(String name, String attribName, String handlerClass)
Handles an attribute definition.
protected void
handleConstructorDefinition(String propertyName, String parameterClass)
Handles a constructor definition.
protected void
handleElementDefinition(String name, String element)
Handles an element definition.
protected void
handleLookupDefinition(String name, String lookupKey)
Handles an lookup definition.
protected boolean
handleManualMapping(String className, String readHandler, String writeHandler)
Handles a manual mapping definition.
protected void
handleMultiplexMapping(String typeName, String className)
Defines an entry for the multiplex mapping.
boolean
isGenericHandler(Class c)
Checks, whether the factory has a description for the given class.
protected void
startMultiplexMapping(String className, String typeAttr)
Starts a multiplex mapping.
protected boolean
startObjectDefinition(String className, String register, boolean ignore)
Starts a object definition.

Methods inherited from class org.jfree.xml.util.AbstractModelReader

endIncludeHandling, endMultiplexMapping, endObjectDefinition, endRootDocument, getCloseComment, getCommentHandler, getOpenComment, handleAttributeDefinition, handleConstructorDefinition, handleElementDefinition, handleIgnoredProperty, handleLookupDefinition, handleManualMapping, handleMultiplexMapping, loadClass, parseXml, parseXmlDocument, setCloseComment, setOpenComment, startIncludeHandling, startMultiplexMapping, startObjectDefinition, startRootDocument

Constructor Details

ObjectFactoryLoader

public ObjectFactoryLoader(URL resourceName)
            throws ObjectDescriptionException
Creates a new object factory loader for the given base file.
Parameters:
resourceName - the URL of the initial specification file.
Throws:
ObjectDescriptionException - if the file could not be parsed.

Method Details

endMultiplexMapping

protected void endMultiplexMapping()
            throws ObjectDescriptionException
Finializes the multiplexer mapping.
Overrides:
endMultiplexMapping in interface AbstractModelReader
Throws:
ObjectDescriptionException - if an error occurs.

endObjectDefinition

protected void endObjectDefinition()
            throws ObjectDescriptionException
Finializes the object definition.
Overrides:
endObjectDefinition in interface AbstractModelReader
Throws:
ObjectDescriptionException - if an error occures.

getFactoryForClass

public GenericObjectFactory getFactoryForClass(Class c)
Returns a factory instance for the given class. The factory is independent from all previously generated instances.
Specified by:
getFactoryForClass in interface ObjectFactory
Parameters:
c - the class
Returns:
the object factory.

getManualMappingDefinition

public ManualMappingDefinition getManualMappingDefinition(Class c)
Returns the manual mapping definition for the given class, or null, if not manual definition exists.
Specified by:
getManualMappingDefinition in interface ObjectFactory
Parameters:
c - the class for which to check the existence of the definition
Returns:
the manual mapping definition or null.

getMultiplexDefinition

public MultiplexMappingDefinition getMultiplexDefinition(Class c)
Returns the multiplex definition for the given class, or null, if no such definition exists.
Specified by:
getMultiplexDefinition in interface ObjectFactory
Parameters:
c - the class for which to check the existence of the multiplexer
Returns:
the multiplexer for the class, or null if no multiplexer exists.

handleAttributeDefinition

protected void handleAttributeDefinition(String name,
                                         String attribName,
                                         String handlerClass)
            throws ObjectDescriptionException
Handles an attribute definition. This method gets called after the object definition was started. The method will be called for every defined attribute property.
Overrides:
handleAttributeDefinition in interface AbstractModelReader
Parameters:
name - the name of the property
attribName - the xml-attribute name to use later.
handlerClass - the attribute handler class.
Throws:
ObjectDescriptionException - if an error occured.

handleConstructorDefinition

protected void handleConstructorDefinition(String propertyName,
                                           String parameterClass)
Handles a constructor definition. Only one constructor can be defined for a certain object type. The constructor will be filled using the given properties.
Overrides:
handleConstructorDefinition in interface AbstractModelReader
Parameters:
propertyName - the property name of the referenced local property
parameterClass - the parameter class for the parameter.

handleElementDefinition

protected void handleElementDefinition(String name,
                                       String element)
            throws ObjectDescriptionException
Handles an element definition. This method gets called after the object definition was started. The method will be called for every defined element property. Element properties are used to describe complex objects.
Overrides:
handleElementDefinition in interface AbstractModelReader
Parameters:
name - the name of the property
element - the xml-tag name for the child element.
Throws:
ObjectDescriptionException - if an error occurs.

handleLookupDefinition

protected void handleLookupDefinition(String name,
                                      String lookupKey)
            throws ObjectDescriptionException
Handles an lookup definition. This method gets called after the object definition was started. The method will be called for every defined lookup property. Lookup properties reference previously created object using the object's registry name.
Overrides:
handleLookupDefinition in interface AbstractModelReader
Parameters:
name - the property name of the base object
lookupKey - the register key of the referenced object
Throws:
ObjectDescriptionException - if an error occured.

handleManualMapping

protected boolean handleManualMapping(String className,
                                      String readHandler,
                                      String writeHandler)
            throws ObjectDescriptionException
Handles a manual mapping definition. The manual mapping maps specific read and write handlers to a given base class. Manual mappings always override any other definition.
Overrides:
handleManualMapping in interface AbstractModelReader
Parameters:
className - the base class name
readHandler - the class name of the read handler
writeHandler - the class name of the write handler
Returns:
true, if the mapping was accepted, false otherwise.
Throws:
ObjectDescriptionException - if an unexpected error occured.

handleMultiplexMapping

protected void handleMultiplexMapping(String typeName,
                                      String className)
            throws ObjectDescriptionException
Defines an entry for the multiplex mapping. The new entry will be activated when the base mappers type attribute contains this typename and will resolve to the handler for the given classname.
Overrides:
handleMultiplexMapping in interface AbstractModelReader
Parameters:
typeName - the type value for this mapping.
className - the class name to which this mapping resolves.
Throws:
ObjectDescriptionException - if an error occurs.

isGenericHandler

public boolean isGenericHandler(Class c)
Checks, whether the factory has a description for the given class.
Specified by:
isGenericHandler in interface ObjectFactory
Parameters:
c - the class to be handled by the factory.
Returns:
true, if an description exists for the given class, false otherwise.

startMultiplexMapping

protected void startMultiplexMapping(String className,
                                     String typeAttr)
Starts a multiplex mapping. Multiplex mappings are used to define polymorphic argument handlers. The mapper will collect all derived classes of the given base class and will select the corresponding mapping based on the given type attribute.
Overrides:
startMultiplexMapping in interface AbstractModelReader
Parameters:
className - the base class name
typeAttr - the xml-attribute name containing the mapping key

startObjectDefinition

protected boolean startObjectDefinition(String className,
                                        String register,
                                        boolean ignore)
            throws ObjectDescriptionException
Starts a object definition. The object definition collects all properties of an bean-class and defines, which constructor should be used when creating the class.
Overrides:
startObjectDefinition in interface AbstractModelReader
Parameters:
className - the class name of the defined object
register - the (optional) register name, to lookup and reference the object later.
ignore - ignore?
Returns:
true, if the definition was accepted, false otherwise.
Throws:
ObjectDescriptionException - if an unexpected error occured.