org.apache.struts.tiles.xmlDefinition

Class I18nFactorySet

public class I18nFactorySet extends FactorySet

Definitions factory. This implementation allows to have a set of definition factories. There is a main factory and one factory for each file associated to a Locale. To retrieve a definition, we first search for the appropriate factory using the Locale found in session context. If no factory is found, use the default one. Then we ask the factory for the definition. A definition factory file is loaded using main filename extended with locale code (ex : templateDefinitions_fr.xml). If no file is found under this name, use default file.
Field Summary
protected DefinitionsFactorydefaultFactory
Default factory.
static String[]DEFAULT_DEFINITION_FILENAMES
Possible definition filenames.
static StringDEFINITIONS_CONFIG_PARAMETER_NAME
Config file parameter name.
Listfilenames
Names of files containing instances descriptions.
static StringFILENAME_EXTENSION
Default filenames extension.
protected booleanisValidatingParser
Do we want validating parser.
Maploaded
Collection of already loaded definitions set, referenced by their suffix.
protected static Loglog
Commons Logging instance.
protected intparserDetailLevel
Parser detail level.
static StringPARSER_DETAILS_PARAMETER_NAME
Config file parameter name.
static StringPARSER_VALIDATE_PARAMETER_NAME
Config file parameter name.
protected XmlParserxmlParser
XML parser used.
Constructor Summary
I18nFactorySet()
Parameterless Constructor.
I18nFactorySet(ServletContext servletContext, Map properties)
Constructor.
Method Summary
ListcalculateSuffixes(Locale locale)
Calculate the suffixes based on the locale.
StringconcatPostfix(String name, String postfix)
Concat postfix to the name.
protected DefinitionsFactorycreateDefaultFactory(ServletContext servletContext)
Create default factory .
protected DefinitionsFactorycreateFactory(Object key, ServletRequest request, ServletContext servletContext)
Create a factory for specified key.
protected DefinitionsFactorygetDefaultFactory()
Get default factory.
protected ObjectgetDefinitionsFactoryKey(String name, ServletRequest request, ServletContext servletContext)
Extract key that will be used to get the sub factory.
voidinitFactory(ServletContext servletContext, Map properties)
Initialization method.
protected voidinitFactory(ServletContext servletContext, String proposedFilename)
Initialization method.
XmlDefinitionsSetparseXmlFile(ServletContext servletContext, String filename, XmlDefinitionsSet xmlDefinitions)
Parse specified xml file and add definition to specified definitions set.
XmlDefinitionsSetparseXmlFiles(ServletContext servletContext, String postfix, XmlDefinitionsSet xmlDefinitions)
Parse files associated to postix if they exist.
StringtoString()
Return String representation.

Field Detail

defaultFactory

protected DefinitionsFactory defaultFactory
Default factory.

DEFAULT_DEFINITION_FILENAMES

public static final String[] DEFAULT_DEFINITION_FILENAMES
Possible definition filenames.

DEFINITIONS_CONFIG_PARAMETER_NAME

public static final String DEFINITIONS_CONFIG_PARAMETER_NAME
Config file parameter name.

filenames

private List filenames
Names of files containing instances descriptions.

FILENAME_EXTENSION

public static final String FILENAME_EXTENSION
Default filenames extension.

isValidatingParser

protected boolean isValidatingParser
Do we want validating parser. Default is false. Can be set from servlet config file.

loaded

private Map loaded
Collection of already loaded definitions set, referenced by their suffix.

log

protected static Log log
Commons Logging instance.

parserDetailLevel

protected int parserDetailLevel
Parser detail level. Default is 0. Can be set from servlet config file.

PARSER_DETAILS_PARAMETER_NAME

public static final String PARSER_DETAILS_PARAMETER_NAME
Config file parameter name.

PARSER_VALIDATE_PARAMETER_NAME

public static final String PARSER_VALIDATE_PARAMETER_NAME
Config file parameter name.

xmlParser

protected transient XmlParser xmlParser
XML parser used. Attribute is transient to allow serialization. In this implementaiton, xmlParser is created each time we need it ;-(.

Constructor Detail

I18nFactorySet

public I18nFactorySet()
Parameterless Constructor. Method {@link #initFactory} must be called prior to any use of created factory.

I18nFactorySet

public I18nFactorySet(ServletContext servletContext, Map properties)
Constructor. Init the factory by reading appropriate configuration file.

Parameters: servletContext Servlet context. properties Map containing all properties.

Throws: FactoryNotFoundException Can't find factory configuration file.

Method Detail

calculateSuffixes

private List calculateSuffixes(Locale locale)
Calculate the suffixes based on the locale.

Parameters: locale the locale

concatPostfix

private String concatPostfix(String name, String postfix)
Concat postfix to the name. Take care of existing filename extension. Transform the given name "name.ext" to have "name" + "postfix" + "ext". If there is no ext, return "name" + "postfix".

Parameters: name Filename. postfix Postfix to add.

Returns: Concatenated filename.

createDefaultFactory

protected DefinitionsFactory createDefaultFactory(ServletContext servletContext)
Create default factory . Create InstancesMapper for specified Locale. If creation failes, use default mapper and log error message.

Parameters: servletContext Current servlet context. Used to open file.

Returns: Created default definition factory.

Throws: DefinitionsFactoryException If an error occur while creating factory. FileNotFoundException if factory can't be loaded from filenames.

createFactory

protected DefinitionsFactory createFactory(Object key, ServletRequest request, ServletContext servletContext)
Create a factory for specified key. If creation failes, return default factory and log an error message.

Parameters: key The key. request Servlet request. servletContext Servlet context.

Returns: Definition factory for specified key.

Throws: DefinitionsFactoryException If an error occur while creating factory.

getDefaultFactory

protected DefinitionsFactory getDefaultFactory()
Get default factory.

Returns: Default factory

getDefinitionsFactoryKey

protected Object getDefinitionsFactoryKey(String name, ServletRequest request, ServletContext servletContext)
Extract key that will be used to get the sub factory.

Parameters: name Name of requested definition request Current servlet request. servletContext Current servlet context.

Returns: the key or null if not found.

initFactory

public void initFactory(ServletContext servletContext, Map properties)
Initialization method. Init the factory by reading appropriate configuration file. This method is called exactly once immediately after factory creation in case of internal creation (by DefinitionUtil).

Parameters: servletContext Servlet Context passed to newly created factory. properties Map of name/property passed to newly created factory. Map can contains more properties than requested.

Throws: DefinitionsFactoryException An error occur during initialization.

initFactory

protected void initFactory(ServletContext servletContext, String proposedFilename)
Initialization method. Init the factory by reading appropriate configuration file. This method is called exactly once immediately after factory creation in case of internal creation (by DefinitionUtil).

Parameters: servletContext Servlet Context passed to newly created factory. proposedFilename File names, comma separated, to use as base file names.

Throws: DefinitionsFactoryException An error occur during initialization.

parseXmlFile

private XmlDefinitionsSet parseXmlFile(ServletContext servletContext, String filename, XmlDefinitionsSet xmlDefinitions)
Parse specified xml file and add definition to specified definitions set. This method is used to load several description files in one instances list. If filename exists and definition set is null, create a new set. Otherwise, return passed definition set (can be null).

Parameters: servletContext Current servlet context. Used to open file. filename Name of file to parse. xmlDefinitions Definitions set to which definitions will be added. If null, a definitions set is created on request.

Returns: XmlDefinitionsSet The definitions set created or passed as parameter.

Throws: DefinitionsFactoryException On errors parsing file.

parseXmlFiles

private XmlDefinitionsSet parseXmlFiles(ServletContext servletContext, String postfix, XmlDefinitionsSet xmlDefinitions)
Parse files associated to postix if they exist. For each name in filenames, append postfix before file extension, then try to load the corresponding file. If file doesn't exist, try next one. Each file description is added to the XmlDefinitionsSet description. The XmlDefinitionsSet description is created only if there is a definition file. Inheritance is not resolved in the returned XmlDefinitionsSet. If no description file can be opened and no definiion set is provided, return null.

Parameters: postfix Postfix to add to each description file. xmlDefinitions Definitions set to which definitions will be added. If null, a definitions set is created on request.

Returns: XmlDefinitionsSet The definitions set created or passed as parameter.

Throws: DefinitionsFactoryException On errors parsing file.

toString

public String toString()
Return String representation.

Returns: String representation.

Copyright B) 2000-2007 - The Apache Software Foundation