You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by hu...@apache.org on 2006/11/06 15:55:31 UTC

svn commit: r471754 [18/19] - in /struts/struts1/trunk: apps/cookbook/src/main/java/examples/ apps/cookbook/src/main/java/examples/bean/ apps/cookbook/src/main/java/examples/dyna/ apps/cookbook/src/main/java/examples/links/ apps/cookbook/src/main/java/...

Modified: struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/InsertTag.java
URL: http://svn.apache.org/viewvc/struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/InsertTag.java?view=diff&rev=471754&r1=471753&r2=471754
==============================================================================
--- struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/InsertTag.java (original)
+++ struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/InsertTag.java Mon Nov  6 06:55:09 2006
@@ -1,19 +1,22 @@
 /*
- * $Id$ 
+ * $Id$
  *
- * Copyright 1999-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.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.struts.tiles.taglib;
@@ -53,1000 +56,1000 @@
  * @version $Rev$ $Date$
  */
 public class InsertTag
-	extends DefinitionTagSupport
-	implements PutTagParent, ComponentConstants, PutListTagParent {
+    extends DefinitionTagSupport
+    implements PutTagParent, ComponentConstants, PutListTagParent {
 
-	/** 
-	 * The role delimiter. 
-	 * @deprecated This will be removed in a release after Struts 1.2.
-	 */
-	public static final String ROLE_DELIMITER = ",";
-
-	/** 
-	 * Commons Logging instance. 
-	 */
-	protected static Log log = LogFactory.getLog(InsertTag.class);
-
-	/* JSP Tag attributes */
-
-	/** 
-	 * Flush attribute value. 
-	 */
-	protected boolean flush = true;
-
-	/** 
-	 * Name to insert. 
-	 */
-	protected String name = null;
-
-	/**
-	 * Name of attribute from which to read page name to include. 
-	 */
-	protected String attribute = null;
-
-	/** 
-	 * Name of bean used as entity to include. 
-	 */
-	protected String beanName = null;
-
-	/** 
-	 * Name of bean property, if any. 
-	 */
-	protected String beanProperty = null;
-
-	/** 
-	 * Scope of bean, if any. 
-	 */
-	protected String beanScope = null;
-
-	/**
-	 * Are errors ignored. This is the property for attribute 'ignore'.
-	 * Default value is false, which throw an exception.
-	 * Only 'attribute not found' errors are ignored.
-	 */
-	protected boolean isErrorIgnored = false;
-
-	/**
-	 * Name of component instance to include.
-	 */
-	protected String definitionName = null;
-
-	/* Internal properties */
-	/**
-	 * Does the end tag need to be processed.
-	 * Default value is true. Boolean set in case of ignored errors.
-	 */
-	protected boolean processEndTag = true;
-
-	/** 
-	 * Current component context. 
-	 */
-	protected ComponentContext cachedCurrentContext;
-
-	/** 
-	 * Final handler of tag methods. 
-	 */
-	protected TagHandler tagHandler = null;
-
-	/** 
-	 * Trick to allows inner classes to access pageContext. 
-	 */
-	protected PageContext pageContext = null;
-
-	/**
-	 * Reset member values for reuse. This method calls super.release(),
-	 * which invokes TagSupport.release(), which typically does nothing.
-	 */
-	public void release() {
-
-		super.release();
-		attribute = null;
-		beanName = null;
-		beanProperty = null;
-		beanScope = null;
-
-		definitionName = null;
-		flush = true;
-		name = null;
-		page = null;
-		role = null;
-		isErrorIgnored = false;
-
-		releaseInternal();
-	}
-
-	/**
-	 * Reset internal member values for reuse.
-	 */
-	protected void releaseInternal() {
-		cachedCurrentContext = null;
-		processEndTag = true;
-		// pageContext = null;  // orion doesn't set it between two tags
-		tagHandler = null;
-	}
-
-	/**
-	 * Set the current page context.
-	 * Called by the page implementation prior to doStartTag().
-	 * <p>
-	 * Needed to allow inner classes to access pageContext.
-	 */
-	public void setPageContext(PageContext pc) {
-		this.pageContext = pc;
-		super.setPageContext(pc);
-	}
-
-	/**
-	 * Get the pageContext property.
-	 */
-	public PageContext getPageContext() {
-		return pageContext;
-	}
-
-	/**
-	 * Set name.
-	 */
-	public void setName(String value) {
-		this.name = value;
-	}
-
-	/**
-	 * Get name.
-	 */
-	public String getName() {
-		return name;
-	}
-
-	/**
-	 * Set component.
-	 */
-	public void setComponent(String name) {
-		this.page = name;
-	}
-
-	/**
-	 * Set definition.
-	 */
-	public void setDefinition(String name) {
-		this.definitionName = name;
-	}
-
-	/**
-	 * Get definition name.
-	 */
-	public String getDefinitionName() {
-		return definitionName;
-	}
-
-	/**
-	 * Set attribute.
-	 */
-	public void setAttribute(String value) {
-		this.attribute = value;
-	}
-
-	/**
-	 * Set bean name.
-	 */
-	public void setBeanName(String value) {
-		this.beanName = value;
-	}
-
-	/**
-	 * Get bean name.
-	 */
-	public String getBeanName() {
-		return beanName;
-	}
-
-	/**
-	 * Set bean property.
-	 */
-	public void setBeanProperty(String value) {
-		this.beanProperty = value;
-	}
-
-	/**
-	 * Get bean property.
-	 */
-	public String getBeanProperty() {
-		return beanProperty;
-	}
-
-	/**
-	 * Set bean scope.
-	 */
-	public void setBeanScope(String value) {
-		this.beanScope = value;
-	}
-
-	/**
-	 * Get bean scope.
-	 */
-	public String getBeanScope() {
-		return beanScope;
-	}
-
-	/**
-	 * Set flush.
-	 */
-	public void setFlush(boolean flush) {
-		this.flush = flush;
-	}
-
-	/**
-	 * Get flush.
-	 */
-	public boolean getFlush() {
-		return flush;
-	}
-
-	/**
-	 * Set flush.
-	 * Method added for compatibility with JSP1.1
-	 */
-	public void setFlush(String flush) {
-		this.flush = (Boolean.valueOf(flush).booleanValue());
-	}
-
-	/**
-	 * Set ignore.
-	 */
-	public void setIgnore(boolean ignore) {
-		this.isErrorIgnored = ignore;
-	}
-
-	/**
-	 * Get ignore.
-	 */
-	public boolean getIgnore() {
-		return isErrorIgnored;
-	}
-
-	/////////////////////////////////////////////////////////////////////////
-
-	/**
-	 * Add a body attribute.
-	 * Erase any attribute with same name previously set.
-	 */
-	public void putAttribute(String name, Object value) {
-		tagHandler.putAttribute(name, value);
-	}
-
-	/**
-	 * Process nested &lg;put&gt; tag.
-	 * Method calls by nested &lg;put&gt; tags.
-	 * Nested list is added to current list.
-	 * If role is defined, it is checked immediately.
-	 */
-	public void processNestedTag(PutTag nestedTag) throws JspException {
-		// Check role
-		HttpServletRequest request =
-			(HttpServletRequest) pageContext.getRequest();
-		String role = nestedTag.getRole();
-		if (role != null && !request.isUserInRole(role)) {
-			// not allowed : skip attribute
-			return;
-		}
-
-		putAttribute(nestedTag.getName(), nestedTag.getRealValue());
-	}
-
-	/**
-	 * Process nested &lg;putList&gt; tag.
-	 * Method calls by nested &lg;putList&gt; tags.
-	 * Nested list is added to sub-component attributes
-	 * If role is defined, it is checked immediately.
-	 */
-	public void processNestedTag(PutListTag nestedTag) throws JspException {
-		// Check role
-		HttpServletRequest request =
-			(HttpServletRequest) pageContext.getRequest();
-		String role = nestedTag.getRole();
-		if (role != null && !request.isUserInRole(role)) {
-			// not allowed : skip attribute
-			return;
-		}
-
-		// Check if a name is defined
-		if (nestedTag.getName() == null) {
-			throw new JspException("Error - PutList : attribute name is not defined. It is mandatory as the list is added as attribute of 'insert'.");
-		}
-
-		// now add attribute to enclosing parent (i.e. : this object).
-		putAttribute(nestedTag.getName(), nestedTag.getList());
-	}
-
-	/**
-	 * Method calls by nested &lg;putList&gt; tags.
-	 * A new list is added to current insert object.
-	 */
-	public void putAttribute(PutListTag nestedTag) throws JspException {
-		// Check role
-		HttpServletRequest request =
-			(HttpServletRequest) pageContext.getRequest();
-		String role = nestedTag.getRole();
-		if (role != null && !request.isUserInRole(role)) {
-			// not allowed : skip attribute
-			return;
-		}
-
-		putAttribute(nestedTag.getName(), nestedTag.getList());
-	}
-
-	/**
-	 * Get current component context.
-	 */
-	private ComponentContext getCurrentContext() {
-		if (cachedCurrentContext == null) {
-			cachedCurrentContext =
-				(ComponentContext) pageContext.getAttribute(
-					ComponentConstants.COMPONENT_CONTEXT,
-					PageContext.REQUEST_SCOPE);
-		}
-
-		return cachedCurrentContext;
-	}
-
-	/**
-	 * Get instantiated Controller.
-	 * Return controller denoted by controllerType, or <code>null</code> if controllerType
-	 * is null.
-	 * @throws JspException If controller can't be created.
-	 */
-	private Controller getController() throws JspException {
-		if (controllerType == null) {
-			return null;
-		}
-
-		try {
-			return ComponentDefinition.createController(
-				controllerName,
-				controllerType);
-
-		} catch (InstantiationException ex) {
-			throw new JspException(ex);
-		}
-	}
-
-	/**
-	 * Process the start tag by checking tag's attributes and creating appropriate handler.
-	 * Possible handlers :
-	 * <ul>
-	 * <li> URL
-	 * <li> definition
-	 * <li> direct String
-	 * </ul>
-	 * Handlers also contain sub-component context.
-	 */
-	public int doStartTag() throws JspException {
+    /**
+     * The role delimiter.
+     * @deprecated This will be removed in a release after Struts 1.2.
+     */
+    public static final String ROLE_DELIMITER = ",";
+
+    /**
+     * Commons Logging instance.
+     */
+    protected static Log log = LogFactory.getLog(InsertTag.class);
+
+    /* JSP Tag attributes */
+
+    /**
+     * Flush attribute value.
+     */
+    protected boolean flush = true;
+
+    /**
+     * Name to insert.
+     */
+    protected String name = null;
+
+    /**
+     * Name of attribute from which to read page name to include.
+     */
+    protected String attribute = null;
+
+    /**
+     * Name of bean used as entity to include.
+     */
+    protected String beanName = null;
+
+    /**
+     * Name of bean property, if any.
+     */
+    protected String beanProperty = null;
+
+    /**
+     * Scope of bean, if any.
+     */
+    protected String beanScope = null;
+
+    /**
+     * Are errors ignored. This is the property for attribute 'ignore'.
+     * Default value is false, which throw an exception.
+     * Only 'attribute not found' errors are ignored.
+     */
+    protected boolean isErrorIgnored = false;
+
+    /**
+     * Name of component instance to include.
+     */
+    protected String definitionName = null;
+
+    /* Internal properties */
+    /**
+     * Does the end tag need to be processed.
+     * Default value is true. Boolean set in case of ignored errors.
+     */
+    protected boolean processEndTag = true;
+
+    /**
+     * Current component context.
+     */
+    protected ComponentContext cachedCurrentContext;
+
+    /**
+     * Final handler of tag methods.
+     */
+    protected TagHandler tagHandler = null;
+
+    /**
+     * Trick to allows inner classes to access pageContext.
+     */
+    protected PageContext pageContext = null;
+
+    /**
+     * Reset member values for reuse. This method calls super.release(),
+     * which invokes TagSupport.release(), which typically does nothing.
+     */
+    public void release() {
+
+        super.release();
+        attribute = null;
+        beanName = null;
+        beanProperty = null;
+        beanScope = null;
+
+        definitionName = null;
+        flush = true;
+        name = null;
+        page = null;
+        role = null;
+        isErrorIgnored = false;
+
+        releaseInternal();
+    }
+
+    /**
+     * Reset internal member values for reuse.
+     */
+    protected void releaseInternal() {
+        cachedCurrentContext = null;
+        processEndTag = true;
+        // pageContext = null;  // orion doesn't set it between two tags
+        tagHandler = null;
+    }
+
+    /**
+     * Set the current page context.
+     * Called by the page implementation prior to doStartTag().
+     * <p>
+     * Needed to allow inner classes to access pageContext.
+     */
+    public void setPageContext(PageContext pc) {
+        this.pageContext = pc;
+        super.setPageContext(pc);
+    }
+
+    /**
+     * Get the pageContext property.
+     */
+    public PageContext getPageContext() {
+        return pageContext;
+    }
+
+    /**
+     * Set name.
+     */
+    public void setName(String value) {
+        this.name = value;
+    }
+
+    /**
+     * Get name.
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Set component.
+     */
+    public void setComponent(String name) {
+        this.page = name;
+    }
+
+    /**
+     * Set definition.
+     */
+    public void setDefinition(String name) {
+        this.definitionName = name;
+    }
+
+    /**
+     * Get definition name.
+     */
+    public String getDefinitionName() {
+        return definitionName;
+    }
+
+    /**
+     * Set attribute.
+     */
+    public void setAttribute(String value) {
+        this.attribute = value;
+    }
+
+    /**
+     * Set bean name.
+     */
+    public void setBeanName(String value) {
+        this.beanName = value;
+    }
+
+    /**
+     * Get bean name.
+     */
+    public String getBeanName() {
+        return beanName;
+    }
+
+    /**
+     * Set bean property.
+     */
+    public void setBeanProperty(String value) {
+        this.beanProperty = value;
+    }
+
+    /**
+     * Get bean property.
+     */
+    public String getBeanProperty() {
+        return beanProperty;
+    }
+
+    /**
+     * Set bean scope.
+     */
+    public void setBeanScope(String value) {
+        this.beanScope = value;
+    }
+
+    /**
+     * Get bean scope.
+     */
+    public String getBeanScope() {
+        return beanScope;
+    }
+
+    /**
+     * Set flush.
+     */
+    public void setFlush(boolean flush) {
+        this.flush = flush;
+    }
+
+    /**
+     * Get flush.
+     */
+    public boolean getFlush() {
+        return flush;
+    }
+
+    /**
+     * Set flush.
+     * Method added for compatibility with JSP1.1
+     */
+    public void setFlush(String flush) {
+        this.flush = (Boolean.valueOf(flush).booleanValue());
+    }
+
+    /**
+     * Set ignore.
+     */
+    public void setIgnore(boolean ignore) {
+        this.isErrorIgnored = ignore;
+    }
+
+    /**
+     * Get ignore.
+     */
+    public boolean getIgnore() {
+        return isErrorIgnored;
+    }
+
+    /////////////////////////////////////////////////////////////////////////
+
+    /**
+     * Add a body attribute.
+     * Erase any attribute with same name previously set.
+     */
+    public void putAttribute(String name, Object value) {
+        tagHandler.putAttribute(name, value);
+    }
+
+    /**
+     * Process nested &lg;put&gt; tag.
+     * Method calls by nested &lg;put&gt; tags.
+     * Nested list is added to current list.
+     * If role is defined, it is checked immediately.
+     */
+    public void processNestedTag(PutTag nestedTag) throws JspException {
+        // Check role
+        HttpServletRequest request =
+            (HttpServletRequest) pageContext.getRequest();
+        String role = nestedTag.getRole();
+        if (role != null && !request.isUserInRole(role)) {
+            // not allowed : skip attribute
+            return;
+        }
+
+        putAttribute(nestedTag.getName(), nestedTag.getRealValue());
+    }
+
+    /**
+     * Process nested &lg;putList&gt; tag.
+     * Method calls by nested &lg;putList&gt; tags.
+     * Nested list is added to sub-component attributes
+     * If role is defined, it is checked immediately.
+     */
+    public void processNestedTag(PutListTag nestedTag) throws JspException {
+        // Check role
+        HttpServletRequest request =
+            (HttpServletRequest) pageContext.getRequest();
+        String role = nestedTag.getRole();
+        if (role != null && !request.isUserInRole(role)) {
+            // not allowed : skip attribute
+            return;
+        }
+
+        // Check if a name is defined
+        if (nestedTag.getName() == null) {
+            throw new JspException("Error - PutList : attribute name is not defined. It is mandatory as the list is added as attribute of 'insert'.");
+        }
+
+        // now add attribute to enclosing parent (i.e. : this object).
+        putAttribute(nestedTag.getName(), nestedTag.getList());
+    }
+
+    /**
+     * Method calls by nested &lg;putList&gt; tags.
+     * A new list is added to current insert object.
+     */
+    public void putAttribute(PutListTag nestedTag) throws JspException {
+        // Check role
+        HttpServletRequest request =
+            (HttpServletRequest) pageContext.getRequest();
+        String role = nestedTag.getRole();
+        if (role != null && !request.isUserInRole(role)) {
+            // not allowed : skip attribute
+            return;
+        }
+
+        putAttribute(nestedTag.getName(), nestedTag.getList());
+    }
+
+    /**
+     * Get current component context.
+     */
+    private ComponentContext getCurrentContext() {
+        if (cachedCurrentContext == null) {
+            cachedCurrentContext =
+                (ComponentContext) pageContext.getAttribute(
+                    ComponentConstants.COMPONENT_CONTEXT,
+                    PageContext.REQUEST_SCOPE);
+        }
+
+        return cachedCurrentContext;
+    }
+
+    /**
+     * Get instantiated Controller.
+     * Return controller denoted by controllerType, or <code>null</code> if controllerType
+     * is null.
+     * @throws JspException If controller can't be created.
+     */
+    private Controller getController() throws JspException {
+        if (controllerType == null) {
+            return null;
+        }
+
+        try {
+            return ComponentDefinition.createController(
+                controllerName,
+                controllerType);
+
+        } catch (InstantiationException ex) {
+            throw new JspException(ex);
+        }
+    }
+
+    /**
+     * Process the start tag by checking tag's attributes and creating appropriate handler.
+     * Possible handlers :
+     * <ul>
+     * <li> URL
+     * <li> definition
+     * <li> direct String
+     * </ul>
+     * Handlers also contain sub-component context.
+     */
+    public int doStartTag() throws JspException {
 
             // Additional fix for Bug 20034 (2005-04-28)
             cachedCurrentContext = null;
 
-		// Check role immediatly to avoid useless stuff.
-		// In case of insertion of a "definition", definition's role still checked later.
-		// This lead to a double check of "role" ;-(
-		HttpServletRequest request =
-			(HttpServletRequest) pageContext.getRequest();
-		if (role != null && !request.isUserInRole(role)) {
-			processEndTag = false;
-			return SKIP_BODY;
-		}
-
-		try {
-			tagHandler = createTagHandler();
-
-		} catch (JspException e) {
-			if (isErrorIgnored) {
-				processEndTag = false;
-				return SKIP_BODY;
-			} else {
-				throw e;
-			}
-		}
-
-		return tagHandler.doStartTag();
-	}
-
-	/**
-	 * Process the end tag by including the template.
-	 * Simply call the handler doEndTag
-	 */
-	public int doEndTag() throws JspException {
-		if (!processEndTag) {
-			releaseInternal();
-			return EVAL_PAGE;
-		}
-
-		int res = tagHandler.doEndTag();
-		// Reset properties used by object, in order to be able to reuse object.
-		releaseInternal();
-		return res;
-	}
-
-	/**
-	 * Process tag attribute and create corresponding tag handler.
-	 */
-	public TagHandler createTagHandler() throws JspException {
-		// Check each tag attribute.
-		// page Url attribute must be the last checked  because it can appears concurrently
-		// with others attributes.
-		if (definitionName != null) {
-			return processDefinitionName(definitionName);
-		} else if (attribute != null) {
-			return processAttribute(attribute);
-		} else if (beanName != null) {
-			return processBean(beanName, beanProperty, beanScope);
-		} else if (name != null) {
-			return processName(name);
-		} else if (page != null) {
-			return processUrl(page);
-		} else {
-			throw new JspException("Error - Tag Insert : At least one of the following attribute must be defined : template|page|attribute|definition|name|beanName. Check tag syntax");
-		}
-	}
-
-	/**
-	 * Process an object retrieved as a bean or attribute.
-	 * Object can be a typed attribute, a String, or anything else.
-	 * If typed attribute, use associated type.
-	 * Otherwise, apply toString() on object, and use returned string as a name.
-	 * @throws JspException - Throws by underlying nested call to 
-	 * processDefinitionName()
-	 */
-	public TagHandler processObjectValue(Object value) throws JspException {
-		// First, check if value is one of the Typed Attribute
-		if (value instanceof AttributeDefinition) {
-			// We have a type => return appropriate IncludeType
-			return processTypedAttribute((AttributeDefinition) value);
-
-		} else if (value instanceof ComponentDefinition) {
-			return processDefinition((ComponentDefinition) value);
-		}
-
-		// Value must denote a valid String
-		return processAsDefinitionOrURL(value.toString());
-	}
-
-	/**
-	 * Process name.
-	 * Search in following order :
-	 * <ul>
-	 * <li>Component context -  if found, process it as value.</li>
-	 * <li>definitions factory</li>
-	 * <li>URL</li>
-	 * <li></li>
-	 * </ul>
-	 *
-	 * @return appropriate tag handler.
-	 * @throws JspException - Throws by underlying nested call to 
-	 * processDefinitionName()
-	 */
-	public TagHandler processName(String name) throws JspException {
-		Object attrValue = getCurrentContext().getAttribute(name);
-
-		if (attrValue != null) {
-			return processObjectValue(attrValue);
-		}
-
-		return processAsDefinitionOrURL(name);
-	}
-
-	/**
-	 * Process the url.
-	 * @throws JspException If failed to create controller
-	 */
-	public TagHandler processUrl(String url) throws JspException {
-		return new InsertHandler(url, role, getController());
-	}
-
-	/**
-	 * Process tag attribute "definition".
-	 * First, search definition in the factory, then create handler from this definition.
-	 * @param name Name of the definition.
-	 * @return Appropriate TagHandler.
-	 * @throws JspException- NoSuchDefinitionException No Definition  found for name.
-	 * @throws JspException- FactoryNotFoundException Can't find Definitions factory.
-	 * @throws JspException- DefinedComponentFactoryException General error in factory.
-	 * @throws JspException InstantiationException Can't create requested controller
-	 */
-	protected TagHandler processDefinitionName(String name)
-		throws JspException {
-
-		try {
-			ComponentDefinition definition =
-				TilesUtil.getDefinition(
-					name,
-					(HttpServletRequest) pageContext.getRequest(),
-					pageContext.getServletContext());
-
-			if (definition == null) { // is it possible ?
-				throw new NoSuchDefinitionException();
-			}
-
-			return processDefinition(definition);
-
-		} catch (NoSuchDefinitionException ex) {
-			throw new JspException(
-				"Error -  Tag Insert : Can't get definition '"
-					+ definitionName
-					+ "'. Check if this name exist in definitions factory.", ex);
-
-		} catch (FactoryNotFoundException ex) {
-			throw new JspException(ex.getMessage());
-
-		} catch (DefinitionsFactoryException ex) {
-			if (log.isDebugEnabled()) {
-				ex.printStackTrace();
-			}
-
-			// Save exception to be able to show it later
-			pageContext.setAttribute(
-				Globals.EXCEPTION_KEY,
-				ex,
-				PageContext.REQUEST_SCOPE);
-			throw new JspException(ex);
-		}
-	}
-
-	/**
-	 * End of Process tag attribute "definition".
-	 * Overload definition with tag attributes "template" and "role".
-	 * Then, create appropriate tag handler.
-	 * @param definition Definition to process.
-	 * @return Appropriate TagHandler.
-	 * @throws JspException InstantiationException Can't create requested controller
-	 */
-	protected TagHandler processDefinition(ComponentDefinition definition)
-		throws JspException {
-		// Declare local variable in order to not change Tag attribute values.
-		String role = this.role;
-		String page = this.page;
-		Controller controller = null;
-
-		try {
-			controller = definition.getOrCreateController();
-
-			// Overload definition with tag's template and role.
-			if (role == null) {
-				role = definition.getRole();
-			}
-
-			if (page == null) {
-				page = definition.getTemplate();
-			}
-
-			if (controllerName != null) {
-				controller =
-					ComponentDefinition.createController(
-						controllerName,
-						controllerType);
-			}
-
-			// Can check if page is set
-			return new InsertHandler(
-				definition.getAttributes(),
-				page,
-				role,
-				controller);
-
-		} catch (InstantiationException ex) {
-			throw new JspException(ex);
-		}
-	}
-
-	/**
-	 * Process a bean.
-	 * Get bean value, eventually using property and scope. Found value is process by processObjectValue().
-	 * @param beanName Name of the bean
-	 * @param beanProperty Property in the bean, or null.
-	 * @param beanScope bean scope, or null.
-	 * @return Appropriate TagHandler.
-	 * @throws JspException - NoSuchDefinitionException No value associated to bean.
-	 * @throws JspException an error occur while reading bean, or no definition found.
-	 * @throws JspException - Throws by underlying nested call to processDefinitionName()
-	 */
-	protected TagHandler processBean(
-		String beanName,
-		String beanProperty,
-		String beanScope)
-		throws JspException {
-
-		Object beanValue =
-			TagUtils.getRealValueFromBean(
-				beanName,
-				beanProperty,
-				beanScope,
-				pageContext);
-
-		if (beanValue == null) {
-			throw new JspException(
-				"Error - Tag Insert : No value defined for bean '"
-					+ beanName
-					+ "' with property '"
-					+ beanProperty
-					+ "' in scope '"
-					+ beanScope
-					+ "'.");
-		}
-
-		return processObjectValue(beanValue);
-	}
-
-	/**
-	 * Process tag attribute "attribute".
-	 * Get value from component attribute.
-	 * Found value is process by processObjectValue().
-	 * @param name Name of the attribute.
-	 * @return Appropriate TagHandler.
-	 * @throws JspException - NoSuchDefinitionException No Definition  found for name.
-	 * @throws JspException - Throws by underlying nested call to processDefinitionName()
-	 */
-	public TagHandler processAttribute(String name) throws JspException {
-		Object attrValue = getCurrentContext().getAttribute(name);
-
-		if (attrValue == null) {
-			throw new JspException(
-				"Error - Tag Insert : No value found for attribute '"
-					+ name
-					+ "'.");
-		}
-
-		return processObjectValue(attrValue);
-	}
-
-	/**
-	 * Try to process name as a definition, or as an URL if not found.
-	 * @param name Name to process.
-	 * @return appropriate TagHandler
-	 * @throws JspException InstantiationException Can't create requested controller
-	 */
-	public TagHandler processAsDefinitionOrURL(String name)
-		throws JspException {
-		try {
-			ComponentDefinition definition =
-				TilesUtil.getDefinition(
-					name,
-					pageContext.getRequest(),
-					pageContext.getServletContext());
-
-			if (definition != null) {
-				return processDefinition(definition);
-			}
-
-		} catch (DefinitionsFactoryException ex) {
-			// silently failed, because we can choose to not define a factory.
-		}
-
-		// no definition found, try as url
-		return processUrl(name);
-	}
-
-	/**
-	 * Process typed attribute according to its type.
-	 * @param value Typed attribute to process.
-	 * @return appropriate TagHandler.
-	 * @throws JspException - Throws by underlying nested call to processDefinitionName()
-	 */
-	public TagHandler processTypedAttribute(AttributeDefinition value)
-		throws JspException {
-		if (value instanceof DirectStringAttribute) {
-			return new DirectStringHandler((String) value.getValue());
-
-		} else if (value instanceof DefinitionAttribute) {
-			return processDefinition((ComponentDefinition) value.getValue());
-
-		} else if (value instanceof DefinitionNameAttribute) {
-			return processDefinitionName((String) value.getValue());
-		}
-
-		return new InsertHandler(
-			(String) value.getValue(),
-			role,
-			getController());
-	}
-
-	/**
-	 * Do an include of specified page.
-	 * This method is used internally to do all includes from this class. It delegates
-	 * the include call to the TilesUtil.doInclude().
-	 * @param page The page that will be included
+        // Check role immediatly to avoid useless stuff.
+        // In case of insertion of a "definition", definition's role still checked later.
+        // This lead to a double check of "role" ;-(
+        HttpServletRequest request =
+            (HttpServletRequest) pageContext.getRequest();
+        if (role != null && !request.isUserInRole(role)) {
+            processEndTag = false;
+            return SKIP_BODY;
+        }
+
+        try {
+            tagHandler = createTagHandler();
+
+        } catch (JspException e) {
+            if (isErrorIgnored) {
+                processEndTag = false;
+                return SKIP_BODY;
+            } else {
+                throw e;
+            }
+        }
+
+        return tagHandler.doStartTag();
+    }
+
+    /**
+     * Process the end tag by including the template.
+     * Simply call the handler doEndTag
+     */
+    public int doEndTag() throws JspException {
+        if (!processEndTag) {
+            releaseInternal();
+            return EVAL_PAGE;
+        }
+
+        int res = tagHandler.doEndTag();
+        // Reset properties used by object, in order to be able to reuse object.
+        releaseInternal();
+        return res;
+    }
+
+    /**
+     * Process tag attribute and create corresponding tag handler.
+     */
+    public TagHandler createTagHandler() throws JspException {
+        // Check each tag attribute.
+        // page Url attribute must be the last checked  because it can appears concurrently
+        // with others attributes.
+        if (definitionName != null) {
+            return processDefinitionName(definitionName);
+        } else if (attribute != null) {
+            return processAttribute(attribute);
+        } else if (beanName != null) {
+            return processBean(beanName, beanProperty, beanScope);
+        } else if (name != null) {
+            return processName(name);
+        } else if (page != null) {
+            return processUrl(page);
+        } else {
+            throw new JspException("Error - Tag Insert : At least one of the following attribute must be defined : template|page|attribute|definition|name|beanName. Check tag syntax");
+        }
+    }
+
+    /**
+     * Process an object retrieved as a bean or attribute.
+     * Object can be a typed attribute, a String, or anything else.
+     * If typed attribute, use associated type.
+     * Otherwise, apply toString() on object, and use returned string as a name.
+     * @throws JspException - Throws by underlying nested call to
+     * processDefinitionName()
+     */
+    public TagHandler processObjectValue(Object value) throws JspException {
+        // First, check if value is one of the Typed Attribute
+        if (value instanceof AttributeDefinition) {
+            // We have a type => return appropriate IncludeType
+            return processTypedAttribute((AttributeDefinition) value);
+
+        } else if (value instanceof ComponentDefinition) {
+            return processDefinition((ComponentDefinition) value);
+        }
+
+        // Value must denote a valid String
+        return processAsDefinitionOrURL(value.toString());
+    }
+
+    /**
+     * Process name.
+     * Search in following order :
+     * <ul>
+     * <li>Component context -  if found, process it as value.</li>
+     * <li>definitions factory</li>
+     * <li>URL</li>
+     * <li></li>
+     * </ul>
+     *
+     * @return appropriate tag handler.
+     * @throws JspException - Throws by underlying nested call to
+     * processDefinitionName()
+     */
+    public TagHandler processName(String name) throws JspException {
+        Object attrValue = getCurrentContext().getAttribute(name);
+
+        if (attrValue != null) {
+            return processObjectValue(attrValue);
+        }
+
+        return processAsDefinitionOrURL(name);
+    }
+
+    /**
+     * Process the url.
+     * @throws JspException If failed to create controller
+     */
+    public TagHandler processUrl(String url) throws JspException {
+        return new InsertHandler(url, role, getController());
+    }
+
+    /**
+     * Process tag attribute "definition".
+     * First, search definition in the factory, then create handler from this definition.
+     * @param name Name of the definition.
+     * @return Appropriate TagHandler.
+     * @throws JspException- NoSuchDefinitionException No Definition  found for name.
+     * @throws JspException- FactoryNotFoundException Can't find Definitions factory.
+     * @throws JspException- DefinedComponentFactoryException General error in factory.
+     * @throws JspException InstantiationException Can't create requested controller
+     */
+    protected TagHandler processDefinitionName(String name)
+        throws JspException {
+
+        try {
+            ComponentDefinition definition =
+                TilesUtil.getDefinition(
+                    name,
+                    (HttpServletRequest) pageContext.getRequest(),
+                    pageContext.getServletContext());
+
+            if (definition == null) { // is it possible ?
+                throw new NoSuchDefinitionException();
+            }
+
+            return processDefinition(definition);
+
+        } catch (NoSuchDefinitionException ex) {
+            throw new JspException(
+                "Error -  Tag Insert : Can't get definition '"
+                    + definitionName
+                    + "'. Check if this name exist in definitions factory.", ex);
+
+        } catch (FactoryNotFoundException ex) {
+            throw new JspException(ex.getMessage());
+
+        } catch (DefinitionsFactoryException ex) {
+            if (log.isDebugEnabled()) {
+                ex.printStackTrace();
+            }
+
+            // Save exception to be able to show it later
+            pageContext.setAttribute(
+                Globals.EXCEPTION_KEY,
+                ex,
+                PageContext.REQUEST_SCOPE);
+            throw new JspException(ex);
+        }
+    }
+
+    /**
+     * End of Process tag attribute "definition".
+     * Overload definition with tag attributes "template" and "role".
+     * Then, create appropriate tag handler.
+     * @param definition Definition to process.
+     * @return Appropriate TagHandler.
+     * @throws JspException InstantiationException Can't create requested controller
+     */
+    protected TagHandler processDefinition(ComponentDefinition definition)
+        throws JspException {
+        // Declare local variable in order to not change Tag attribute values.
+        String role = this.role;
+        String page = this.page;
+        Controller controller = null;
+
+        try {
+            controller = definition.getOrCreateController();
+
+            // Overload definition with tag's template and role.
+            if (role == null) {
+                role = definition.getRole();
+            }
+
+            if (page == null) {
+                page = definition.getTemplate();
+            }
+
+            if (controllerName != null) {
+                controller =
+                    ComponentDefinition.createController(
+                        controllerName,
+                        controllerType);
+            }
+
+            // Can check if page is set
+            return new InsertHandler(
+                definition.getAttributes(),
+                page,
+                role,
+                controller);
+
+        } catch (InstantiationException ex) {
+            throw new JspException(ex);
+        }
+    }
+
+    /**
+     * Process a bean.
+     * Get bean value, eventually using property and scope. Found value is process by processObjectValue().
+     * @param beanName Name of the bean
+     * @param beanProperty Property in the bean, or null.
+     * @param beanScope bean scope, or null.
+     * @return Appropriate TagHandler.
+     * @throws JspException - NoSuchDefinitionException No value associated to bean.
+     * @throws JspException an error occur while reading bean, or no definition found.
+     * @throws JspException - Throws by underlying nested call to processDefinitionName()
+     */
+    protected TagHandler processBean(
+        String beanName,
+        String beanProperty,
+        String beanScope)
+        throws JspException {
+
+        Object beanValue =
+            TagUtils.getRealValueFromBean(
+                beanName,
+                beanProperty,
+                beanScope,
+                pageContext);
+
+        if (beanValue == null) {
+            throw new JspException(
+                "Error - Tag Insert : No value defined for bean '"
+                    + beanName
+                    + "' with property '"
+                    + beanProperty
+                    + "' in scope '"
+                    + beanScope
+                    + "'.");
+        }
+
+        return processObjectValue(beanValue);
+    }
+
+    /**
+     * Process tag attribute "attribute".
+     * Get value from component attribute.
+     * Found value is process by processObjectValue().
+     * @param name Name of the attribute.
+     * @return Appropriate TagHandler.
+     * @throws JspException - NoSuchDefinitionException No Definition  found for name.
+     * @throws JspException - Throws by underlying nested call to processDefinitionName()
+     */
+    public TagHandler processAttribute(String name) throws JspException {
+        Object attrValue = getCurrentContext().getAttribute(name);
+
+        if (attrValue == null) {
+            throw new JspException(
+                "Error - Tag Insert : No value found for attribute '"
+                    + name
+                    + "'.");
+        }
+
+        return processObjectValue(attrValue);
+    }
+
+    /**
+     * Try to process name as a definition, or as an URL if not found.
+     * @param name Name to process.
+     * @return appropriate TagHandler
+     * @throws JspException InstantiationException Can't create requested controller
+     */
+    public TagHandler processAsDefinitionOrURL(String name)
+        throws JspException {
+        try {
+            ComponentDefinition definition =
+                TilesUtil.getDefinition(
+                    name,
+                    pageContext.getRequest(),
+                    pageContext.getServletContext());
+
+            if (definition != null) {
+                return processDefinition(definition);
+            }
+
+        } catch (DefinitionsFactoryException ex) {
+            // silently failed, because we can choose to not define a factory.
+        }
+
+        // no definition found, try as url
+        return processUrl(name);
+    }
+
+    /**
+     * Process typed attribute according to its type.
+     * @param value Typed attribute to process.
+     * @return appropriate TagHandler.
+     * @throws JspException - Throws by underlying nested call to processDefinitionName()
+     */
+    public TagHandler processTypedAttribute(AttributeDefinition value)
+        throws JspException {
+        if (value instanceof DirectStringAttribute) {
+            return new DirectStringHandler((String) value.getValue());
+
+        } else if (value instanceof DefinitionAttribute) {
+            return processDefinition((ComponentDefinition) value.getValue());
+
+        } else if (value instanceof DefinitionNameAttribute) {
+            return processDefinitionName((String) value.getValue());
+        }
+
+        return new InsertHandler(
+            (String) value.getValue(),
+            role,
+            getController());
+    }
+
+    /**
+     * Do an include of specified page.
+     * This method is used internally to do all includes from this class. It delegates
+     * the include call to the TilesUtil.doInclude().
+     * @param page The page that will be included
      * @param flush If the writer should be flushed before the include
-	 * @throws ServletException - Thrown by call to pageContext.include()
-	 * @throws IOException - Thrown by call to pageContext.include()
-	 */
-	protected void doInclude(String page, boolean flush)
-		throws ServletException, IOException {
-		TilesUtil.doInclude(page, pageContext, flush);
-	}
-
-	/////////////////////////////////////////////////////////////////////////////
-
-	/**
-	 * Inner Interface.
-	 * Sub handler for tag.
-	 */
-	protected interface TagHandler {
-		/**
-		 * Create ComponentContext for type depicted by implementation class.
-		 */
-		public int doStartTag() throws JspException;
-		/**
-		 * Do include for type depicted by implementation class.
-		 */
-		public int doEndTag() throws JspException;
-		/**
-		 * Add a component parameter (attribute) to subContext.
-		 */
-		public void putAttribute(String name, Object value);
-	} // end inner interface
-
-	/////////////////////////////////////////////////////////////////////////////
-
-	/**
-	 * Real handler, after attribute resolution.
-	 * Handle include sub-component.
-	 */
-	protected class InsertHandler implements TagHandler {
-		protected String page;
-		protected ComponentContext currentContext;
-		protected ComponentContext subCompContext;
-		protected String role;
-		protected Controller controller;
-
-		/**
-		 * Constructor.
-		 * Create insert handler using Component definition.
-		 */
-		public InsertHandler(
-			Map attributes,
-			String page,
-			String role,
-			Controller controller) {
-
-			this.page = page;
-			this.role = role;
-			this.controller = controller;
-			subCompContext = new ComponentContext(attributes);
-		}
-
-		/**
-		 * Constructor.
-		 * Create insert handler to insert page at specified location.
-		 */
-		public InsertHandler(String page, String role, Controller controller) {
-			this.page = page;
-			this.role = role;
-			this.controller = controller;
-			subCompContext = new ComponentContext();
-		}
-
-		/**
-		 * Create a new empty context.
-		 */
-		public int doStartTag() throws JspException {
-			// Check role
-			HttpServletRequest request =
-				(HttpServletRequest) pageContext.getRequest();
-
-			if (role != null && !request.isUserInRole(role)) {
-				return SKIP_BODY;
-			}
-
-			// save current context
-			this.currentContext = getCurrentContext();
-			return EVAL_BODY_INCLUDE;
-		}
-
-		/**
-		 * Add attribute to sub context.
-		 * Do nothing.
-		 */
-		public void putAttribute(String name, Object value) {
-			subCompContext.putAttribute(name, value);
-		}
-
-		/**
-		 * Include requested page.
-		 */
-		public int doEndTag() throws JspException {
-			// Check role
-			HttpServletRequest request =
-				(HttpServletRequest) pageContext.getRequest();
-
-			if (role != null && !request.isUserInRole(role)) {
-				return EVAL_PAGE;
-			}
-
-			try {
-				if (log.isDebugEnabled()) {
-					log.debug("insert page='" + page + "'.");
-				}
-
-				// set new context for included component.
-				pageContext.setAttribute(
-					ComponentConstants.COMPONENT_CONTEXT,
-					subCompContext,
-					PageContext.REQUEST_SCOPE);
-
-				// Call controller if any
-				if (controller != null) {
-					try {
-						controller.execute(
-							subCompContext,
-							(HttpServletRequest) pageContext.getRequest(),
-							(HttpServletResponse) pageContext.getResponse(),
-							pageContext.getServletContext());
-                            
-					} catch (Exception e) {
-						throw new ServletException(e);
-					}
-
-				}
-
-				// include requested component.
-				if (flush) {
-					pageContext.getOut().flush();
-				}
-
-				doInclude(page, flush);
-
-			} catch (IOException e) {
-				String msg =
-					"Can't insert page '" + page + "' : " + e.getMessage();
-				log.error(msg, e);
-				throw new JspException(msg);
-
-			} catch (IllegalArgumentException e) {
-				// Can't resolve page uri, should we ignore it?
-				if (!(page == null && isErrorIgnored)) {
-					String msg =
-						"Can't insert page '"
-							+ page
-							+ "'. Check if it exists.\n"
-							+ e.getMessage();
-
-					log.error(msg, e);
-					throw new JspException(msg,e);
-				}
-
-			} catch (ServletException e) {
-				Throwable cause = e;
-				if (e.getRootCause() != null) {
-					cause = e.getRootCause();
-				}
-
-				String msg =
-					"ServletException in '" + page + "': " + cause.getMessage();
-
-				log.error(msg, e);
-				throw new JspException(msg,e);
-
-			} finally {
-				// restore old context only if currentContext not null 
-				// (bug with Silverstream ?; related by Arvindra Sehmi 20010712)
-				if (currentContext != null) {
-					pageContext.setAttribute(
-						ComponentConstants.COMPONENT_CONTEXT,
-						currentContext,
-						PageContext.REQUEST_SCOPE);
-				}
-			}
-
-			return EVAL_PAGE;
-		}
-
-		/**
-		 * Process an exception.
-		 * Depending of debug attribute, print full exception trace or only
-		 * its message in output page.
-		 * @param ex Exception
-		 * @param msg An additional message to show in console and to propagate if we can't output exception.
-		 * @deprecated This method will be removed in a release after Struts 1.2.
-		 */
-		protected void processException(Throwable ex, String msg)
-			throws JspException {
-
-			try {
-				if (msg == null) {
-					msg = ex.getMessage();
-				}
-
-				if (log.isDebugEnabled()) { // show full trace
-					log.debug(msg, ex);
-					pageContext.getOut().println(msg);
-					ex.printStackTrace(
-						new PrintWriter(pageContext.getOut(), true));
-				} else { // show only message
-					pageContext.getOut().println(msg);
-				}
-
-			} catch (IOException ioex) { // problems. Propagate original exception
-				pageContext.setAttribute(
-					ComponentConstants.EXCEPTION_KEY,
-					ex,
-					PageContext.REQUEST_SCOPE);
-				throw new JspException(msg,ioex);
-			}
-		}
-	}
-
-	/**
-	 * Parse the list of roles and return <code>true</code> or <code>false</code> based on whether
-	 * the user has that role or not.
-	 * @param role Comma-delimited list of roles.
-	 * @param request The request.
-	 */
-	static public boolean userHasRole(
-		HttpServletRequest request,
-		String role) {
-		StringTokenizer st = new StringTokenizer(role, ",");
-		while (st.hasMoreTokens()) {
-			if (request.isUserInRole(st.nextToken())) {
-				return true;
-			}
-		}
-
-		return false;
-	}
-
-	/////////////////////////////////////////////////////////////////////////////
-
-	/**
-	 * Handle insert direct string.
-	 */
-	protected class DirectStringHandler implements TagHandler {
-		/** Object to print as a direct string */
-		private Object value;
-
-		/**
-		 * Constructor.
-		 */
-		public DirectStringHandler(Object value) {
-			this.value = value;
-		}
-
-		/**
-		 * Do nothing, there is no context for a direct string.
-		 */
-		public int doStartTag() throws JspException {
-			return SKIP_BODY;
-		}
-
-		/**
-		 * Add attribute to sub context.
-		 * Do nothing.
-		 */
-		public void putAttribute(String name, Object value) {
-		}
-
-		/**
-		 * Print String in page output stream.
-		 */
-		public int doEndTag() throws JspException {
-			try {
-				if (flush) {
-					pageContext.getOut().flush();
-				}
-
-				pageContext.getOut().print(value);
-
-			} catch (IOException ex) {
-				if (log.isDebugEnabled()) {
-					log.debug("Can't write string '" + value + "' : ", ex);
-				}
-
-				pageContext.setAttribute(
-					ComponentConstants.EXCEPTION_KEY,
-					ex,
-					PageContext.REQUEST_SCOPE);
-
-				throw new JspException(
-					"Can't write string '" + value + "' : " + ex.getMessage(), ex);
-			}
-
-			return EVAL_PAGE;
-		}
-	}
+     * @throws ServletException - Thrown by call to pageContext.include()
+     * @throws IOException - Thrown by call to pageContext.include()
+     */
+    protected void doInclude(String page, boolean flush)
+        throws ServletException, IOException {
+        TilesUtil.doInclude(page, pageContext, flush);
+    }
+
+    /////////////////////////////////////////////////////////////////////////////
+
+    /**
+     * Inner Interface.
+     * Sub handler for tag.
+     */
+    protected interface TagHandler {
+        /**
+         * Create ComponentContext for type depicted by implementation class.
+         */
+        public int doStartTag() throws JspException;
+        /**
+         * Do include for type depicted by implementation class.
+         */
+        public int doEndTag() throws JspException;
+        /**
+         * Add a component parameter (attribute) to subContext.
+         */
+        public void putAttribute(String name, Object value);
+    } // end inner interface
+
+    /////////////////////////////////////////////////////////////////////////////
+
+    /**
+     * Real handler, after attribute resolution.
+     * Handle include sub-component.
+     */
+    protected class InsertHandler implements TagHandler {
+        protected String page;
+        protected ComponentContext currentContext;
+        protected ComponentContext subCompContext;
+        protected String role;
+        protected Controller controller;
+
+        /**
+         * Constructor.
+         * Create insert handler using Component definition.
+         */
+        public InsertHandler(
+            Map attributes,
+            String page,
+            String role,
+            Controller controller) {
+
+            this.page = page;
+            this.role = role;
+            this.controller = controller;
+            subCompContext = new ComponentContext(attributes);
+        }
+
+        /**
+         * Constructor.
+         * Create insert handler to insert page at specified location.
+         */
+        public InsertHandler(String page, String role, Controller controller) {
+            this.page = page;
+            this.role = role;
+            this.controller = controller;
+            subCompContext = new ComponentContext();
+        }
+
+        /**
+         * Create a new empty context.
+         */
+        public int doStartTag() throws JspException {
+            // Check role
+            HttpServletRequest request =
+                (HttpServletRequest) pageContext.getRequest();
+
+            if (role != null && !request.isUserInRole(role)) {
+                return SKIP_BODY;
+            }
+
+            // save current context
+            this.currentContext = getCurrentContext();
+            return EVAL_BODY_INCLUDE;
+        }
+
+        /**
+         * Add attribute to sub context.
+         * Do nothing.
+         */
+        public void putAttribute(String name, Object value) {
+            subCompContext.putAttribute(name, value);
+        }
+
+        /**
+         * Include requested page.
+         */
+        public int doEndTag() throws JspException {
+            // Check role
+            HttpServletRequest request =
+                (HttpServletRequest) pageContext.getRequest();
+
+            if (role != null && !request.isUserInRole(role)) {
+                return EVAL_PAGE;
+            }
+
+            try {
+                if (log.isDebugEnabled()) {
+                    log.debug("insert page='" + page + "'.");
+                }
+
+                // set new context for included component.
+                pageContext.setAttribute(
+                    ComponentConstants.COMPONENT_CONTEXT,
+                    subCompContext,
+                    PageContext.REQUEST_SCOPE);
+
+                // Call controller if any
+                if (controller != null) {
+                    try {
+                        controller.execute(
+                            subCompContext,
+                            (HttpServletRequest) pageContext.getRequest(),
+                            (HttpServletResponse) pageContext.getResponse(),
+                            pageContext.getServletContext());
+
+                    } catch (Exception e) {
+                        throw new ServletException(e);
+                    }
+
+                }
+
+                // include requested component.
+                if (flush) {
+                    pageContext.getOut().flush();
+                }
+
+                doInclude(page, flush);
+
+            } catch (IOException e) {
+                String msg =
+                    "Can't insert page '" + page + "' : " + e.getMessage();
+                log.error(msg, e);
+                throw new JspException(msg);
+
+            } catch (IllegalArgumentException e) {
+                // Can't resolve page uri, should we ignore it?
+                if (!(page == null && isErrorIgnored)) {
+                    String msg =
+                        "Can't insert page '"
+                            + page
+                            + "'. Check if it exists.\n"
+                            + e.getMessage();
+
+                    log.error(msg, e);
+                    throw new JspException(msg,e);
+                }
+
+            } catch (ServletException e) {
+                Throwable cause = e;
+                if (e.getRootCause() != null) {
+                    cause = e.getRootCause();
+                }
+
+                String msg =
+                    "ServletException in '" + page + "': " + cause.getMessage();
+
+                log.error(msg, e);
+                throw new JspException(msg,e);
+
+            } finally {
+                // restore old context only if currentContext not null
+                // (bug with Silverstream ?; related by Arvindra Sehmi 20010712)
+                if (currentContext != null) {
+                    pageContext.setAttribute(
+                        ComponentConstants.COMPONENT_CONTEXT,
+                        currentContext,
+                        PageContext.REQUEST_SCOPE);
+                }
+            }
+
+            return EVAL_PAGE;
+        }
+
+        /**
+         * Process an exception.
+         * Depending of debug attribute, print full exception trace or only
+         * its message in output page.
+         * @param ex Exception
+         * @param msg An additional message to show in console and to propagate if we can't output exception.
+         * @deprecated This method will be removed in a release after Struts 1.2.
+         */
+        protected void processException(Throwable ex, String msg)
+            throws JspException {
+
+            try {
+                if (msg == null) {
+                    msg = ex.getMessage();
+                }
+
+                if (log.isDebugEnabled()) { // show full trace
+                    log.debug(msg, ex);
+                    pageContext.getOut().println(msg);
+                    ex.printStackTrace(
+                        new PrintWriter(pageContext.getOut(), true));
+                } else { // show only message
+                    pageContext.getOut().println(msg);
+                }
+
+            } catch (IOException ioex) { // problems. Propagate original exception
+                pageContext.setAttribute(
+                    ComponentConstants.EXCEPTION_KEY,
+                    ex,
+                    PageContext.REQUEST_SCOPE);
+                throw new JspException(msg,ioex);
+            }
+        }
+    }
+
+    /**
+     * Parse the list of roles and return <code>true</code> or <code>false</code> based on whether
+     * the user has that role or not.
+     * @param role Comma-delimited list of roles.
+     * @param request The request.
+     */
+    static public boolean userHasRole(
+        HttpServletRequest request,
+        String role) {
+        StringTokenizer st = new StringTokenizer(role, ",");
+        while (st.hasMoreTokens()) {
+            if (request.isUserInRole(st.nextToken())) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /////////////////////////////////////////////////////////////////////////////
+
+    /**
+     * Handle insert direct string.
+     */
+    protected class DirectStringHandler implements TagHandler {
+        /** Object to print as a direct string */
+        private Object value;
+
+        /**
+         * Constructor.
+         */
+        public DirectStringHandler(Object value) {
+            this.value = value;
+        }
+
+        /**
+         * Do nothing, there is no context for a direct string.
+         */
+        public int doStartTag() throws JspException {
+            return SKIP_BODY;
+        }
+
+        /**
+         * Add attribute to sub context.
+         * Do nothing.
+         */
+        public void putAttribute(String name, Object value) {
+        }
+
+        /**
+         * Print String in page output stream.
+         */
+        public int doEndTag() throws JspException {
+            try {
+                if (flush) {
+                    pageContext.getOut().flush();
+                }
+
+                pageContext.getOut().print(value);
+
+            } catch (IOException ex) {
+                if (log.isDebugEnabled()) {
+                    log.debug("Can't write string '" + value + "' : ", ex);
+                }
+
+                pageContext.setAttribute(
+                    ComponentConstants.EXCEPTION_KEY,
+                    ex,
+                    PageContext.REQUEST_SCOPE);
+
+                throw new JspException(
+                    "Can't write string '" + value + "' : " + ex.getMessage(), ex);
+            }
+
+            return EVAL_PAGE;
+        }
+    }
 }

Modified: struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/PutListTag.java
URL: http://svn.apache.org/viewvc/struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/PutListTag.java?view=diff&rev=471754&r1=471753&r2=471754
==============================================================================
--- struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/PutListTag.java (original)
+++ struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/PutListTag.java Mon Nov  6 06:55:09 2006
@@ -1,19 +1,22 @@
 /*
  * $Id$
  *
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
  *
- * 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
  *
- *      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.
+ * 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.struts.tiles.taglib;

Modified: struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/PutListTagParent.java
URL: http://svn.apache.org/viewvc/struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/PutListTagParent.java?view=diff&rev=471754&r1=471753&r2=471754
==============================================================================
--- struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/PutListTagParent.java (original)
+++ struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/PutListTagParent.java Mon Nov  6 06:55:09 2006
@@ -1,21 +1,23 @@
 /*
  * $Id$
  *
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
  *
- * 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
  *
- *      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.
+ * 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.struts.tiles.taglib;
 

Modified: struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/PutTag.java
URL: http://svn.apache.org/viewvc/struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/PutTag.java?view=diff&rev=471754&r1=471753&r2=471754
==============================================================================
--- struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/PutTag.java (original)
+++ struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/PutTag.java Mon Nov  6 06:55:09 2006
@@ -1,19 +1,22 @@
 /*
  * $Id$
  *
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
  *
- * 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
  *
- *      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.
+ * 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.struts.tiles.taglib;

Modified: struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/PutTagParent.java
URL: http://svn.apache.org/viewvc/struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/PutTagParent.java?view=diff&rev=471754&r1=471753&r2=471754
==============================================================================
--- struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/PutTagParent.java (original)
+++ struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/PutTagParent.java Mon Nov  6 06:55:09 2006
@@ -1,21 +1,23 @@
 /*
  * $Id$
  *
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
  *
- * 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
  *
- *      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.
+ * 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.struts.tiles.taglib;
 

Modified: struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/UseAttributeTag.java
URL: http://svn.apache.org/viewvc/struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/UseAttributeTag.java?view=diff&rev=471754&r1=471753&r2=471754
==============================================================================
--- struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/UseAttributeTag.java (original)
+++ struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/UseAttributeTag.java Mon Nov  6 06:55:09 2006
@@ -1,21 +1,23 @@
 /*
  * $Id$
  *
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
  *
- * 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
  *
- *      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.
+ * 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.struts.tiles.taglib;
 

Modified: struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/UseAttributeTei.java
URL: http://svn.apache.org/viewvc/struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/UseAttributeTei.java?view=diff&rev=471754&r1=471753&r2=471754
==============================================================================
--- struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/UseAttributeTei.java (original)
+++ struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/UseAttributeTei.java Mon Nov  6 06:55:09 2006
@@ -1,21 +1,23 @@
 /*
  * $Id$
  *
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
  *
- * 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
  *
- *      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.
+ * 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.struts.tiles.taglib;
 

Modified: struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/util/TagUtils.java
URL: http://svn.apache.org/viewvc/struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/util/TagUtils.java?view=diff&rev=471754&r1=471753&r2=471754
==============================================================================
--- struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/util/TagUtils.java (original)
+++ struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/taglib/util/TagUtils.java Mon Nov  6 06:55:09 2006
@@ -1,19 +1,22 @@
 /*
  * $Id$
  *
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
  *
- * 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
  *
- *      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.
+ * 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.struts.tiles.taglib.util;

Modified: struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/DefinitionsFactory.java
URL: http://svn.apache.org/viewvc/struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/DefinitionsFactory.java?view=diff&rev=471754&r1=471753&r2=471754
==============================================================================
--- struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/DefinitionsFactory.java (original)
+++ struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/DefinitionsFactory.java Mon Nov  6 06:55:09 2006
@@ -1,21 +1,23 @@
 /*
  * $Id$
  *
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
  *
- * 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
  *
- *      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.
+ * 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.struts.tiles.xmlDefinition;
 

Modified: struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/FactorySet.java
URL: http://svn.apache.org/viewvc/struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/FactorySet.java?view=diff&rev=471754&r1=471753&r2=471754
==============================================================================
--- struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/FactorySet.java (original)
+++ struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/FactorySet.java Mon Nov  6 06:55:09 2006
@@ -1,21 +1,23 @@
 /*
  * $Id$
  *
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
  *
- * 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
  *
- *      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.
+ * 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.struts.tiles.xmlDefinition;
 

Modified: struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/I18nFactorySet.java
URL: http://svn.apache.org/viewvc/struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/I18nFactorySet.java?view=diff&rev=471754&r1=471753&r2=471754
==============================================================================
--- struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/I18nFactorySet.java (original)
+++ struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/I18nFactorySet.java Mon Nov  6 06:55:09 2006
@@ -1,19 +1,22 @@
 /*
  * $Id$
  *
- * Copyright 1999-2005 The Apache Software Foundation.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
  *
- * 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
  *
- *      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.
+ * 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.struts.tiles.xmlDefinition;

Modified: struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/XmlAttribute.java
URL: http://svn.apache.org/viewvc/struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/XmlAttribute.java?view=diff&rev=471754&r1=471753&r2=471754
==============================================================================
--- struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/XmlAttribute.java (original)
+++ struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/XmlAttribute.java Mon Nov  6 06:55:09 2006
@@ -1,19 +1,22 @@
 /*
  * $Id$
  *
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
  *
- * 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
  *
- *      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.
+ * 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.struts.tiles.xmlDefinition;
@@ -230,7 +233,7 @@
             }
         }
 
-        // Create attribute wrapper to hold role if role is set and no type 
+        // Create attribute wrapper to hold role if role is set and no type
         // specified
         if (role != null && value != null && valueType == null) {
             realValue = new UntypedAttribute(value.toString(), role);

Modified: struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/XmlDefinition.java
URL: http://svn.apache.org/viewvc/struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/XmlDefinition.java?view=diff&rev=471754&r1=471753&r2=471754
==============================================================================
--- struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/XmlDefinition.java (original)
+++ struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/XmlDefinition.java Mon Nov  6 06:55:09 2006
@@ -1,22 +1,24 @@
 /*
  * $Id$
  *
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
  *
- * 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
  *
- *      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.
+ * 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.struts.tiles.xmlDefinition;
 
 import java.util.Iterator;
@@ -130,7 +132,7 @@
       { // error
       String msg = "Error while resolving definition inheritance: child '"
                            + getName() +    "' can't find its ancestor '"
-                           + getExtends() + 
+                           + getExtends() +
                            "'. Please check your description file.";
       log.error( msg );
         // to do : find better exception
@@ -161,9 +163,9 @@
 
   /**
    * Overload this definition with passed child.
-   * All attributes from child are copied to this definition. Previous 
+   * All attributes from child are copied to this definition. Previous
    * attributes with same name are disguarded.
-   * Special attribute 'path','role' and 'extends' are overloaded if defined 
+   * Special attribute 'path','role' and 'extends' are overloaded if defined
    * in child.
    * @param child Child used to overload this definition.
    */

Modified: struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/XmlDefinitionsSet.java
URL: http://svn.apache.org/viewvc/struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/XmlDefinitionsSet.java?view=diff&rev=471754&r1=471753&r2=471754
==============================================================================
--- struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/XmlDefinitionsSet.java (original)
+++ struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/XmlDefinitionsSet.java Mon Nov  6 06:55:09 2006
@@ -1,21 +1,23 @@
 /*
  * $Id$
  *
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
  *
- * 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
  *
- *      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.
+ * 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.struts.tiles.xmlDefinition;
 

Modified: struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/XmlListAttribute.java
URL: http://svn.apache.org/viewvc/struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/XmlListAttribute.java?view=diff&rev=471754&r1=471753&r2=471754
==============================================================================
--- struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/XmlListAttribute.java (original)
+++ struts/struts1/trunk/tiles/src/main/java/org/apache/struts/tiles/xmlDefinition/XmlListAttribute.java Mon Nov  6 06:55:09 2006
@@ -1,21 +1,23 @@
 /*
  * $Id$
  *
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
  *
- * 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
  *
- *      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.
+ * 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.struts.tiles.xmlDefinition;