| /* |
| * Copyright 2004-2005 The Apache Software Foundation. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.tiles; |
| |
| import java.io.Serializable; |
| import java.lang.reflect.InvocationTargetException; |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.Map; |
| import java.util.Set; |
| |
| import org.apache.commons.beanutils.BeanUtils; |
| |
| /** |
| * A TilesFactoryConfig object hold configuration attributes for a tile |
| * definition factory. |
| * |
| * @author Cedric Dumoulin |
| * @since Struts 1.1 |
| * @version $Revision: 1.9 $ $Date: 2003/07/09 00:05:17 $ |
| */ |
| public class DefinitionsFactoryConfig implements Serializable { |
| |
| /** |
| * Fully qualified classname of the factory to create. |
| * If no classname is set, a default factory is created |
| * (of class "org.apache.tiles.xmlDefinition.I18nFactorySet"). |
| */ |
| protected String factoryClassname = |
| "org.apache.tiles.xmlDefinition.I18nFactorySet"; |
| |
| /** |
| * Specifies whether the parser will validate configuration files. |
| * Default value is true. |
| */ |
| protected boolean parserValidate = true; |
| |
| /** |
| * Definition configuration file specified by user. |
| */ |
| protected String definitionConfigFiles = null; |
| |
| /** |
| * Specifies whether the factory is "module-aware". |
| */ |
| protected boolean moduleAware = true; |
| |
| /** |
| * The name associated to this factory. |
| * <br> |
| * With Struts 1.1, this name is the module name to which this factory |
| * belong. It is set by the system. |
| * <br> |
| * In prior versions, this property is not used. |
| */ |
| protected String factoryName; |
| |
| /** |
| * Alternate name for parser debug details properties in configuration file. |
| * @deprecated This will be removed in a release after Struts 1.2. |
| */ |
| public static final String PARSER_DETAILS_PARAMETER_NAME = |
| "definitions-parser-details"; |
| |
| /** |
| * Alternate name for parser validate properties in configuration file. |
| */ |
| public static final String PARSER_VALIDATE_PARAMETER_NAME = |
| "definitions-parser-validate"; |
| |
| /** |
| * Alternate name for factory classname properties in configuration file. |
| */ |
| public static final String FACTORY_CLASSNAME_PARAMETER_NAME = |
| "definitions-factory-class"; |
| |
| /** |
| * Alternate name for definition files properties in configuration file. |
| */ |
| public static final String DEFINITIONS_CONFIG_PARAMETER_NAME = |
| "definitions-config"; |
| |
| /** |
| * Alternate name for definition debug details properties in configuration file. |
| * @deprecated This will be removed in a release after Struts 1.2. |
| */ |
| public static final String TILES_DETAILS_PARAMETER_NAME = "definitions-debug"; |
| |
| /** |
| * Map of extra attribute available. |
| */ |
| private Map extraAttributes = new HashMap(); |
| |
| /** |
| * Default constructor. |
| */ |
| public DefinitionsFactoryConfig() { |
| super(); |
| } |
| |
| /** |
| * Constructor. |
| * Create configuration object, and initialize it with parameters from Map. |
| * Parameters corresponding to an attribute are filtered and stored in appropriate |
| * attribute. |
| * @param initParameters Map. |
| */ |
| public DefinitionsFactoryConfig(Map initParameters) { |
| super(); |
| } |
| |
| /** |
| * Get the module aware flag. |
| * @return <code>true</code>: user wants a single factory instance, |
| * <code>false</code>: user wants multiple factory instances (one per module with Struts) |
| */ |
| public boolean isModuleAware() { |
| return moduleAware; |
| } |
| /** |
| * Set the module aware flag. |
| * @param moduleAware <code>true</code>: user wants a single factory instance, |
| * <code>false</code>: user wants multiple factory instances (one per module with Struts) |
| */ |
| public void setModuleAware(boolean moduleAware) { |
| this.moduleAware = moduleAware; |
| } |
| |
| /** |
| * Get the classname of the factory. |
| * @return Classname. |
| */ |
| public String getFactoryClassname() { |
| return factoryClassname; |
| } |
| |
| /** |
| * Set the classname of the factory.. |
| * @param aFactoryClassname Classname of the factory. |
| */ |
| public void setFactoryClassname(String aFactoryClassname) { |
| factoryClassname = aFactoryClassname; |
| } |
| |
| /** |
| * Determines if the parser is validating. |
| * @return <code>true<code> when in validating mode. |
| */ |
| public boolean getParserValidate() { |
| return parserValidate; |
| } |
| |
| /** |
| * Set the validating mode for the parser. |
| * @param aParserValidate <code>true</code> for validation, <code>false</code> otherwise |
| */ |
| public void setParserValidate(boolean aParserValidate) { |
| parserValidate = aParserValidate; |
| } |
| |
| /** |
| * Get the definition config files. |
| * @return Defition config files. |
| */ |
| public String getDefinitionConfigFiles() { |
| return definitionConfigFiles; |
| } |
| |
| /** |
| * Set the definition config files. |
| * @param aDefinitionConfigFiles Definition config files. |
| */ |
| public void setDefinitionConfigFiles(String aDefinitionConfigFiles) { |
| definitionConfigFiles = aDefinitionConfigFiles; |
| } |
| |
| /** |
| * Set value of an additional attribute. |
| * @param name Name of the attribute. |
| * @param value Value of the attribute. |
| */ |
| public void setAttribute(String name, Object value) { |
| extraAttributes.put(name, value); |
| } |
| |
| /** |
| * Get value of an additional attribute. |
| * @param name Name of the attribute. |
| * @return Value of the attribute, or null if not found. |
| */ |
| public Object getAttribute(String name) { |
| return extraAttributes.get(name); |
| } |
| |
| /** |
| * Get additional attributes as a Map. |
| * @return Map A Map containing attribute name - value pairs. |
| */ |
| public Map getAttributes() { |
| Map map = new HashMap(extraAttributes); |
| // Add property attributes using old names |
| /* |
| map.put(DEFINITIONS_CONFIG_PARAMETER_NAME, getDefinitionConfigFiles()); |
| map.put(TILES_DETAILS_PARAMETER_NAME, Integer.toString(getDebugLevel()) ); |
| map.put(PARSER_DETAILS_PARAMETER_NAME, Integer.toString(getParserDebugLevel()) ); |
| map.put(PARSER_VALIDATE_PARAMETER_NAME, new Boolean(getParserValidate()).toString() ); |
| |
| if( ! "org.apache.tiles.xmlDefinition.I18nFactorySet".equals(getFactoryClassname()) ) |
| map.put(FACTORY_CLASSNAME_PARAMETER_NAME, getFactoryClassname()); |
| */ |
| return map; |
| } |
| |
| /** |
| * Populate this config object from properties map, based on |
| * the specified name/value pairs. This method uses the populate() method from |
| * org.apache.commons.beanutils.BeanUtil. |
| * <p> |
| * Properties keys are scanned for old property names, and linked to the new name |
| * if necessary. This modifies the properties map. |
| * <p> |
| * The particular setter method to be called for each property is |
| * determined using the usual JavaBeans introspection mechanisms. Thus, |
| * you may identify custom setter methods using a BeanInfo class that is |
| * associated with the class of the bean itself. If no such BeanInfo |
| * class is available, the standard method name conversion ("set" plus |
| * the capitalized name of the property in question) is used. |
| * <p> |
| * <strong>NOTE</strong>: It is contrary to the JavaBeans Specification |
| * to have more than one setter method (with different argument |
| * signatures) for the same property. |
| * |
| * @param properties Map keyed by property name, with the |
| * corresponding (String or String[]) value(s) to be set. |
| * |
| * @exception IllegalAccessException if the caller does not have |
| * access to the property accessor method. |
| * @exception InvocationTargetException if the property accessor method |
| * throws an exception. |
| * @see org.apache.commons.beanutils.BeanUtils |
| */ |
| public void populate(Map properties) |
| throws IllegalAccessException, InvocationTargetException { |
| |
| // link old parameter names for backward compatibility |
| linkOldPropertyNames(properties); |
| BeanUtils.populate(this, properties); |
| } |
| |
| /** |
| * Link old property names to new property names. |
| * This modifies the map. |
| * @param properties Map keyed by property name, with the |
| * corresponding (String or String[]) value(s) to be set. |
| */ |
| static public void linkOldPropertyNames(Map properties) { |
| Set entries = properties.entrySet(); |
| Map toAdd = new HashMap(); |
| Iterator i = entries.iterator(); |
| while (i.hasNext()) { |
| Map.Entry entry = (Map.Entry) i.next(); |
| |
| if (DEFINITIONS_CONFIG_PARAMETER_NAME.equals(entry.getKey())) { |
| toAdd.put("definitionConfigFiles", entry.getValue()); |
| |
| } else if (FACTORY_CLASSNAME_PARAMETER_NAME.equals(entry.getKey())) { |
| toAdd.put("factoryClassname", entry.getValue()); |
| |
| } else if (PARSER_DETAILS_PARAMETER_NAME.equals(entry.getKey())) { |
| toAdd.put("parserDebugLevel", entry.getValue()); |
| |
| } else if (PARSER_VALIDATE_PARAMETER_NAME.equals(entry.getKey())) { |
| toAdd.put("parserValidate", entry.getValue()); |
| |
| } else if (TILES_DETAILS_PARAMETER_NAME.equals(entry.getKey())) { |
| toAdd.put("debugLevel", entry.getValue()); |
| } |
| } |
| |
| if (toAdd.size() > 0) { |
| properties.putAll(toAdd); |
| } |
| } |
| |
| /** |
| * Get the factory name. |
| */ |
| public String getFactoryName() { |
| return factoryName; |
| } |
| /** |
| * Set the factory name. |
| * @param factoryName Name of the factory. |
| */ |
| public void setFactoryName(String factoryName) { |
| this.factoryName = factoryName; |
| } |
| } |